@insert mybatis踩坑记录,实体接收前端传递的参数

目录
  • @insert mybatis踩坑实体接收前端传递的参数
  • mybatis获取主键及参数传递的有关问题
    • 获取主键值
    • 不同的参数类型,${}和#{}的不同取值方式

@insert mybatis踩坑实体接收前端传递的参数

插入方法使用的使用entity实体对象进行接收的

@Insert(" insert into infor (name,pass,salary) values (#{infor.name},#{infor.pass},#{infor.salary})")
    public int save(@Param("infor") Infor infor);  

//必须添加@param这个注解,使得mybatis去解析这个数据,否则一直提示infor的没有getter方法

@Insert(" insert into infor (name,pass,salary) values (#{name},#{pass},#{salary})")
    public int save( Infor infor);  

经过后来的工作才 认识到,使用上面的一种方式确实可行,同时我们可以直接使用这个实体类的属性进行对应的insert的操作,特此来更新博文。

错误提示:

org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'infor' in 'class com.ys.study.entity.Infor'
    at org.apache.ibatis.reflection.Reflector.getGetInvoker(Reflector.java:419) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.reflection.MetaClass.getGetInvoker(MetaClass.java:164) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.reflection.wrapper.BeanWrapper.getBeanProperty(BeanWrapper.java:162) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.reflection.wrapper.BeanWrapper.get(BeanWrapper.java:49) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.reflection.MetaObject.getValue(MetaObject.java:122) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.reflection.MetaObject.metaObjectForProperty(MetaObject.java:145) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.reflection.MetaObject.getValue(MetaObject.java:115) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:79) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.parameterize(PreparedStatementHandler.java:93) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.parameterize(RoutingStatementHandler.java:64) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:185) ~[mybatis-3.4.6.jar:3.4.6]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_171]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_171]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_171]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_171]

mybatis获取主键及参数传递的有关问题

获取主键值

insert into emp values(null,#{ename},#{age},#{sex}) /*insert into emp values(null,'${ename}',${age},'${sex}')*/

不同的参数类型,${}和#{}的不同取值方式

1.当传输参数为单个String或基本数据类型及其包装类

  • #{}:可以以任意的名字获取参数值
  • :只能以{value}huo${_parameter}获取

2.当传输参数为javabean时

#{}和都可以通过属性名直接获取属性值,但是要注意{}的单引号问题

3.当传输多个参数时,mybatis会默认将这些参数放在map集合中

两种方式:

(1) 键为01.2,3,…n-1 以参数为值

(2) 键为param1,param2,param3…param(n).以参数为值

  • #{}:#{arg0}/#{arg1};#{param1},#{param2}
  • :{param1},param2,{arg0},arg1.但是要注意{}的单引号问题

4.当传输map参数时

#{}和都可以通过键的名字直接获值,但是要注意{}的单引号问题

5.命名参数

可以通过@param(:‘key’)为map集合指定键的名字

Emp getEmpByIDAndEnameParam(@Param(“eid”) Integer eid, @Param(“ename”) String ename);

#{}和都可以通过键的名字直接获值,但要注意{}的单引号问题

6.当传输参数为List或Array,mybatis会将List或Array放在map中

List以list为键,Array以array为键

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis中insert主键ID获取和多参数传递的示例代码

    一.插入数据主键ID获取 一般我们在做业务开发时,经常会遇到插入一条数据并使用到插入数据的ID情况.如果先插入在查询的话需要多一次sql查询,未免效率太低.因此mybatis也有提供插入数据并返回主键ID的方式.如下 1.Insert/update 1.1.属性解释 keyProperty selectKey 语句结果应该被设置的目标属性.如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表. resultType 结果的类型.MyBatis 通常可以推算出来,但是为了更加确定写上也不会有什

  • Mybatis中传递多个参数的4种方法总结

    前言 现在大多项目都是使用Mybatis了,但也有些公司使用Hibernate.使用Mybatis最大的特性就是sql需要自己写,而写sql就需要传递多个参数.面对各种复杂的业务场景,传递参数也是一种学问. 下面给大家总结了以下几种多参数传递的方法. 方法1:顺序传参法 #{}里面的数字代表你传入参数的顺序. 这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错. 方法2:@Param注解传参法 #{}里面的名称对应的是注解 @Param括号里面修饰的名称. 这种方法在参数不多的情况还

  • mybatis-plus分页如何接收前端参数limit和page

    目录 记录一下layui+springboot+mybatis-plus实现分页 controller层 dao层 创建config包 创建返回前端的实体类 前端接收到信息 mybatis-plus中Page类各个参数的具体含义 mybatis-plus中Page类 它的构造参数居然有5个 记录一下layui+springboot+mybatis-plus实现分页 controller层 dao层 创建config包 创建返回前端的实体类 再创建数据库相对应的实体类就可以了 前端接收到信息 my

  • @insert mybatis踩坑记录,实体接收前端传递的参数

    目录 @insert mybatis踩坑实体接收前端传递的参数 mybatis获取主键及参数传递的有关问题 获取主键值 不同的参数类型,${}和#{}的不同取值方式 @insert mybatis踩坑实体接收前端传递的参数 插入方法使用的使用entity实体对象进行接收的 @Insert(" insert into infor (name,pass,salary) values (#{infor.name},#{infor.pass},#{infor.salary})")     pu

  • SpringMVC 接收前端传递的参数四种方式小结

    目录 SpringMVC 接收前端传递的参数四种方式 @RequestParam 获取注解 @PathVariable获取注解 SpringMVC,可以不设置任何注解即可接收参数 SpringMVC,也可以自动包装成对象 @RequestBody 用来接收数组或者复杂对象 SpringMVC的自动封装(不传参也能进入) SpringMVC接收不到前端传递的参数原因 代码清单 SpringMVC 接收前端传递的参数四种方式 @RequestParam注解 @PathVariable注解 Sprin

  • Spring Boot统一返回体的踩坑记录

    前言 在Spring Boot项目中我们可以通过RestControllerAdvice配合实现ResponseBodyAdvice<T>接口来保证Spring MVC接口具有统一的返回格式,以保证前端同学能够封装统一的数据接收工具.但是很多网上的文章并没有对实际开发中的细节作出更多的讲解.今天胖哥就来分享一下我的采坑经历,也算作一个总结. 控制作用范围 我记得在前面关于Swagger3的文章中提过,如果我们不指定范围将导致Swagger无法识别接口的元信息.因此如果你使用了Swagger必须

  • 基于spring data jpa @query返回map的踩坑记录

    目录 spring data jpa @query返回map踩坑记录 设置JPA的Query返回Map对象 spring data jpa @query返回map踩坑记录 最近用spring data jpa,网上看的一些教程,有的说是返回的Object[]数组,有的说是直接返回的对象,亲身验证了一下,发现主要看写法和返回结果. 用的版本是这样的: dao代码如下: public interface UserRepository extends JpaRepository<User, Integ

  • Java踩坑记录之Arrays.AsList

    前言 java.util.Arrays的asList方法可以方便的将数组转化为集合,我们平时开发在初始化ArrayList时使用的比较多,可以简化代码,但这个静态方法asList()有几个坑需要注意: 一. 如果对集合使用增加或删除元素的操作将会报错 如下代码: List list = Arrays.asList("a","b","c"); list.add("d"); 输出结果: Exception in thread &q

  • 微信小程序开发篇之踩坑记录

    最近参与开发了公司的第一款小程序,开发体验基本类似于基于webview的混合式开发,可以调用官方强大的api,但也有一些坑或者说不习惯的地方.这篇文章从实用性出发,记录了开发过程中的一些问题: 1. 样式优先级混乱 在使用button组件时,发现在class中设置width不生效,下面贴上代码: .my-button{ width: 140rpx; height: 60rpx; line-height: 60rpx; padding: 0; } 经过微信调试工具排查后,发现user agent的

  • 关于Vue3过渡动画的踩坑记录

    目录 背景 问题定位 进一步分析 总结 背景 在我的 <Vue 3 开发企业级音乐 App>课程问答区,有个同学提了个问题,在歌手列表到歌手详情页面到转场动画中,只有进入动画,却没有离场动画: 该学生确实在这个问题上研究了有一段时间,而且从他的描述,我一时半会儿也想不出哪有问题,于是让他把代码传到 GitHub 上,毕竟直接从代码层面定位问题是最靠谱的. 问题定位 一般遇到此类问题的时候,我的第一反应是他用的 Vue 3 版本可能有问题,毕竟 Vue 3 还在不断迭代过程,某个版本有一些小 b

  • JavaWeb踩坑记录之项目访问不到html文件

    踩坑问题和原因 踩坑问题 由于博主的JavaWeb是速成所以对一些知识点掌握的不是很熟,所以也就出现了今天这个问题——Tomcat访问不到html文件. 在运行是总是会出现404.每次出现这个就很烦,让人摸不着头脑.虽然这个问题其实对一些项目没有很大的影响,但是他会让我的项目目录会很杂乱.总的来说该问题就是不解决它,就会出现一堆静态资源都在一个文件夹.这可能会导致后期找一些项目的文件就得找半天. 踩坑原因 由于粗心的我把一些html文件都放在WEB-INF下面.因为WEB-INF下的资源不能直接

  • Java中Objects.equals踩坑记录

    目录 前言 1. 案发现场 2. 判断相等的方法 2.1 使用==号 2.2 使用equals方法 3. 空指针异常 4. Objects.equals的作用 5. Objects.equals的坑 总结 前言 最近review别人代码的时候,发现有个同事,在某个业务场景下,使用Objects.equals方法判断两个值相等时,返回了跟预期不一致的结果,引起了我的兴趣. 原本以为判断结果会返回true的,但实际上返回了false. 记得很早之前,我使用Objects.equals方法也踩过类似的

  • vue2.x background:url()的踩坑记录

    目录 background:url()的踩坑记录 backgroundImage路径问题 处理方法 background:url()的踩坑记录 开发模式下vue中background: url(‘../../assets/img/xxxxx’)直接写在行间样式不生效,即不能直接在标签中style属性中写, 必须写在非行间样式才会生效. 如果要写在行间样式中,需要对资源进行导入,比如ES规范的import或者CommomJS规范的require backgroundImage路径问题 项目中图片都

随机推荐