我是靠谱客的博主 高高期待,这篇文章主要介绍MyBatis学习笔记(三)——注解方式的基本使用前言@Select注解@Insert注解@Update注解和@Delete注解Provider注解总结:,现在分享给大家,希望可以做个参考。

前言

上一篇博客总结了mybatis基于XML配置的用法,传送门。这篇博客总结一下mybatis基于注解的用法。在mybatis的注解中基本就是@Select、@Insert、@Update、@Delete四种注解的使用。本篇博客将会以sys_role表格为实例进行操作。

@Select注解

resultMap方式

在xml使用方式中,resultMap标签对应完成了类型的映射,如下所示:

复制代码
1
2
3
4
5
6
7
8
9
<resultMap id="BaseResultMap" type="com.learn.chapterfour.domain.SysUser"> <result column="id" jdbcType="INTEGER" property="id"/> <result column="user_name" jdbcType="VARCHAR" property="userName"/> <result column="user_password" jdbcType="VARCHAR" property="userPassword"/> <result column="user_email" jdbcType="VARCHAR" property="userEmail"/> <result column="user_info" jdbcType="VARCHAR" property="userInfo"/> <result column="head_img" jdbcType="BLOB" property="headImg"/> <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/> </resultMap>

对应的注解实现方式:

复制代码
1
2
3
4
5
6
7
@Results(id = "roleResultMap", value = { @Result(property = "id", column = "id", id = true), @Result(property = "roleName", column = "role_name"), @Result(property = "enabled", column = "enabled"), @Result(property = "createBy", column = "create_by"), @Result(property = "createTime", column = "create_time") })

后面要引用这个映射结果,就直接使用@ResultMap注解就可以了。

@Select的使用

复制代码
1
2
3
@ResultMap("roleResultMap") @Select({"select id,role_name,enabled,create_by,create_time", "from sys_role ", "where id = #{id}"}) public SysRole selectById2(Long id);

@Insert注解

其实该注解的使用本身很简单,但是设计到主键的返回,就变得有点复杂

复制代码
1
2
@Insert({"insert into sys_role(id,role_name,enabled,create_by,create_time)", "values(#{id},#{roleName},#{enabled},#{createBy},#{createTime,jdbcType=TIMESTAMP})"}) public int insertSysRoleWithOutId(SysRole sysRole);

@insert注解返回自增主键

复制代码
1
2
3
4
5
6
7
8
9
/** * 自动返回主键,这里不用设置主键,会自动生成主键 * * @param sysRole * @return */ @Insert({"insert into sys_role(role_name,enabled,create_by,create_time)", "values(#{roleName},#{enabled},#{createBy},", "#{createTime,jdbcType=TIMESTAMP})"}) @Options(useGeneratedKeys = true, keyProperty = "id") public int insertSysRoleWithAutoIncreament(SysRole sysRole);

和上面的insert方法相比,这个方法中的注解就少了id一列,注解多了一个@Options,其中的两个属性的作用和xml中的作用一致。

@insert注解返回非自增主键

复制代码
1
2
3
4
5
6
7
8
9
/** * 自动返回主键,但是非自增 * * @param sysRole * @return */ @Insert({"insert into sys_role(role_name,enabled,create_by,create_time)", "values(#{roleName},#{enabled},#{createBy},", "#{createTime,jdbcType=TIMESTAMP})"}) @SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "id", resultType = Long.class, before = false) public int insertSysRoleWithIdNotAutoIncreament(SysRole sysRole);

返回非自增主键指的是针对没有自增主键的数据库进行操作。

@Update注解和@Delete注解

复制代码
1
2
3
4
5
@Update({"update sys_role set ", "role_name = #{roleName},enabled=#{enabled},create_by = #{createBy},create_time = #{createTime,jdbcType=TIMESTAMP}", " where id = #{id}"}) public int updateById(SysRole sysRole); @Delete("delete from sys_role where id = #{id}") public int deleteById(Long id);

Provider注解

MyBatis同时提供了@SelectProvider、@InsertProvider、@UpdateProvider、@DeleteProvider注解,这几个注解也能实现相关的CRUD。

实例:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@SelectProvider(type=PrivilegeProvider.class,method = "selectById") SysPrivilege selectById(Long id) public class PrivilegeProvider{ public String selectById(final long id){ return new SQL(){ { SELECT("id,privilege_name,privilege_url"); FROM("sys_privilege"); WHERE("id=#{id}"); } }.toString } }

Provider的注解中,有两个必填的属性,type,method。type指定的是一个包含method指定的方法的类。这个类必须有空的构造方法。这个方法的返回的值就是需要执行的SQL语句。

总结:

其实熟悉了XML的用法,对于注解的用法还是比较好了解的,总体来看MyBatis的注解使用分为两大类,不同的CRUD注解和Provider注解,可以根据自己的需要选择使用的方式,但是个人觉得Provider注解似乎较好的与业务进行了分离。

完整代码实例移步github(chapter03):https://github.com/liman657/mybatislearn

最后

以上就是高高期待最近收集整理的关于MyBatis学习笔记(三)——注解方式的基本使用前言@Select注解@Insert注解@Update注解和@Delete注解Provider注解总结:的全部内容,更多相关MyBatis学习笔记(三)——注解方式内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部