概述
前言
上一篇博客总结了mybatis基于XML配置的用法,传送门。这篇博客总结一下mybatis基于注解的用法。在mybatis的注解中基本就是@Select、@Insert、@Update、@Delete四种注解的使用。本篇博客将会以sys_role表格为实例进行操作。
@Select注解
resultMap方式
在xml使用方式中,resultMap标签对应完成了类型的映射,如下所示:
<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>
对应的注解实现方式:
@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的使用
@ResultMap("roleResultMap")
@Select({"select id,role_name,enabled,create_by,create_time", "from sys_role ", "where id = #{id}"})
public SysRole selectById2(Long id);
@Insert注解
其实该注解的使用本身很简单,但是设计到主键的返回,就变得有点复杂
@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注解返回自增主键
/**
* 自动返回主键,这里不用设置主键,会自动生成主键
*
* @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注解返回非自增主键
/**
* 自动返回主键,但是非自增
*
* @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注解
@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。
实例:
@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学习笔记(三)——注解方式的基本使用前言@Select注解@Insert注解@Update注解和@Delete注解Provider注解总结:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复