MyBatis操作数据库(入门2) 目录1.MyBatis操作数据库1.参数重命名Param注解加Param不加Param2.增Insert1.传递多个参数2.传递对象3.补充Integer返回值代表这个操作 影响的行数 是多少4.给对象加注解Param改为为什么会有这种现象5.Options获得主键id的值这个 id 是咋赋值给 userInfo.id 的6.补充占位符打印日志3.删Delete4.改Update5.查select6.报错检查方法1.复制MyBatis打印的SQL模板语句到MySQL中执行2.参数为null7.idea参数名与数据库字段名不一致问题解法一别名解法二ResultsResult注解注解复用什么情况下需要注解复用方法ResultMap注解实现主解复用​编辑解法三开启驼峰命名8.注意1.打印日志要开启配置项2.字段名与驼峰名的自动转换9.寄语1.MyBatis操作数据库1.参数重命名Param注解加ParamParam是给参数起别名MyBatis是按照【别名】匹配【#{}】里的值。SQL里的#{} 与方法参数顺序无关只根据注解里的名字一一匹配。不加Param如果开了-parameters没加ParamMyBtais能读到方法参数原名MyBatis是按照【别名】匹配【#{}】里的值如果没开-parameters时没加ParamJava编译丢掉了参数名MyBatis识别不了原名就只能写#{arg0}、#{arg1}.2.增Insert1.传递多个参数传递多个参数最好加Param注解2.传递对象把参数封装成对象3.补充Integer返回值代表这个操作 影响的行数 是多少MyBatis里Insert、Delete、Update这三个操作如果有返回值返回值默认是Integer类型代表这个操作影响的行数有多少。4.给对象加注解Param改为为什么会有这种现象不加Param单个实体参数MyBatis会直接把【实体】里面的【属性】暴露到顶层即相当于写【#{username}】MyBatis做了【#{userInfo.username}】。加Param把这个实体打包成一个叫【userInfo】的【参数】要想拿到username必须写成【#{userInfo.username}】5.Options获得主键id的值这个 id 是咋赋值给 userInfo.id 的上图insert时未设置ididnull——》MyBatis拿着已set的值去执行insertUser2——》MySQL表的id是自增主键AUTO_INCREATMENT数据插入成功后自动生成了一个新id8——》useGeneratedKeystrue告诉MyBatis把数据库生成的自增主键值拿回来——》keyPropertyid告诉MyBatis拿到这个主键值之后赋值给传入的这个UserInfo对象的id属性底层调用userInfo.setId(8)——》插入完成之后原来传进去的同一个UserInfo对象它内部的id已经被MyBatis设置好了所以getId拿到8.总结就是MyBatis修改了参数userInfo的内部属性。6.补充占位符打印日志3.删Delete4.改Update5.查select6.报错检查方法1.复制MyBatis打印的SQL模板语句到MySQL中执行在控制台查看MyBatis打印的预编译的SQL语句把这个复制到MySQL里查看哪里有写错的2.参数为null如果不仔细看idea的日志只看左侧的执行结果显示的执行成功以为业务正常进行就找不到出错点。这里的Updates0数据库没有执行成功7.idea参数名与数据库字段名不一致问题查询数据数据库给idea的返回结果idea显示的值可以发现除了有些字段原本就没有赋值 之外剩下显示null的都是【idea的参数名】与【MySQL字段名】不一致的项表列名起别名所以解法一别名数据库返回的数据idea显示的值解法二ResultsResult注解ResultsResult注解告诉MyBatis【数据库字段】和【idea属性名】怎么对应注解复用什么情况下需要注解复用ResultsResult注解默认只对它所在的Mapper方法生效别的方法不会使用这套映射规则如果别的方法也要用这套映射而再写一遍ResultsResult注解 就会重复冗余所以就用到了【注解复用】简答来说就是在另一个查询方法上用这个已经写过的注解方法ResultMap注解实现主解复用然后selectOne就有值了解法三开启驼峰命名在application.xml下复制这段文字mybatis:configuration:map-underscore-to-camel-case: true #配置驼峰自动转换开启后再次查询8.注意1.打印日志要开启配置项mybatis: configuration: # 配置打印 MyBatis日志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl2.字段名与驼峰名的自动转换mybatis:configuration:map-underscore-to-camel-case: true #配置驼峰自动转换9.寄语