序言:使用MyBatis3提供的注解可以逐步取代XML,例如使用@Select注解直接编写SQL完成数据查询,使用@SelectProvider高级注解还可以编写动态SQL,以应对复杂的业务需求。
MyBatis主要提供了以下CRUD注解:
-
<李> @Select李>
<李> @Insert李>
<李> @Update李>
<李> @Delete李>
增删改查占据了绝大部分的业务操作,掌握这些基础注解的使用是很必要的。例如下面这段代码无需XML即可完成数据查询:
@Mapper 公共接口usermap { @Select (“select * from t_user”) List列表(); }
使用过Hibernate的同学可能会好奇,这里为什么没有配置映射关系也能完成属性注入?在传统项目使用过Mybatis的童鞋可能很会就能反应过来,是因为在配置文件中开启了全局驼峰映射,SpringBoot中同样能够做的到,并且更为简单快捷。
虽然开启了全局驼峰映射,但你可能还会质疑,如果不符合下划线转驼峰规则的字段,拿查询回来的实体对象属性将获取为零,比如上述用户对象属性mobileNum和对应的数据库字段phoneNum,则查询结果为:
( { “标识”:“1”, “用户名”:“管理”, “密码”:“管理”, “mobileNum”: null }, { “标识”:“2”, “用户名”:“根”, “密码”:“根”, “mobileNum”: null } ] >之前为了解决对象属性和字段驼峰不一致的问题,我们可以使用映射注解@Results来指定映射关系。
Mybatis主要提供这些映射注解:
<李> @Results用于填写结果集的多个字段的映射关系。李> <李> @Result用于填写结果集的单个字段的映射关系。李> <李> @ResultMap根据ID关联XML里面& lt; resultMap>。李>
例如上面列表的方法,我们可以在查询SQL的基础上,指定返回的结果集的映射关系,其中属性表示实体对象的属性名,表列示对应的数据库字段名。
@Results ({ @Result(属性=氨晔丁?列=癠SER_ID”), @Result(属性=坝没?列=坝没?, @Result(属性=懊苈搿?列=懊苈搿?, @Result(属性=癿obileNum”,列=癙HONE_NUM”) }) @Select (“select * from t_user”) List(); ,列出 查询结果如下:
( { “标识”:“1”, “用户名”:“管理”, “密码”:“管理”, “mobileNum”:“15011791234” }, { “标识”:“2”, “用户名”:“根”, “密码”:“根”, “mobileNum”:“18812342017” } )为了方便演示和免除手工编写映射关系的烦恼,这里提供了一个快速生成映射结果集的方法,具体内容如下:
/* * * 1。用于获取结果集的映射关系 */公共静态字符串getResultsStr(类起源){ StringBuilder StringBuilder=new StringBuilder (); stringBuilder.append (“@Results ({\ n”); (字段字段:origin.getDeclaredFields ()) { 字符串属性=field.getName ();//映射关系:对象属性(驼峰)→数据库字段(下划线) 字符串列=new PropertyNamingStrategy.SnakeCaseStrategy () .translate (field.getName ()) .toUpperCase (); stringBuilder.append(字符串。格式(“@Result(属性=\“% s \”,列=\ " % s \ "), \ n”,财产,列)); } stringBuilder.append (})); 返回stringBuilder.toString (); } >之前在当前主方法执行效果如下:然后我们将控制台这段打印信息复制到接口方法上即可。
![]()
MyBatis-3主要提供了以下CRUD的高级注解:
<李> @SelectProvider李> <李> @InsertProvider李> <李> @UpdateProvider李> <李> @DeleteProvider李>
见名知意,这些高级注解主要用于动态SQL,这里以@SelectProvider为例,主要包含两个注解属性,其中类型表示工具类,方法表示工具类的某个方法,用于返回具体的SQL。
@Mapper 公共接口usermap { @SelectProvider(类型=UserSqlProvider。类,方法=" list222”) List详解SpringBoot快速整合Mybatis(去XML化+注解进阶)