MyBatis 04-注解方式的基本用法
MyBatis 注解方式就是将 SQL 语句直接写在接口上。优点:对于简单的系统,效率高。缺点:当 SQL 有变化时需重新编译代码。一般不建议使用注解方式。
@Select 注解
@Select({"select id,role_name roleName, enabled, create_by createBy, create_time createTime",
"from sys_role",
"where id = #{id}"})
SysRole selectById(Long id);
实现字段映射,使用 resultMap 方式
可以在配置文件中 <settings>
标签中设置 mapUnderscoreToCamelCase
为 true。MyBatis 会按照“下划线转驼峰”的方式自动映射。
XML 中的 resultMap
元素对应的 Java 注解 @Results
// 3.3.1 版本,增加了 id 属性,可以通过 id 属性引用同一个 @Results 配置
@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")
})
@Select("select id,role_name, enabled, create_by, create_time from sys_role where id = #{id}")
SysRole selectById2(Long id);
@ResultMap("roleResultMap")
@Select("select * from sys_role")
List<SysRole> selectAll();
@Insert 注解
返回自增主键
@Insert({"insert into sys_role(role_name, enabled, create_by, create_time)",
"values(#{roleName}, #{enabled}, #{createBy}, #{createTime, jdbcType=TIMESTAMP})"})
@Options(useGeneratedKeys = true, keyProperty = "id")
int insert2(SysRole sysRole);
返回非自增主键
@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)
int insert3(SysRole sysRole);
使用了 @SelectKey
主键,如果是 XML 中配置的 selectKey
<selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER">
SELECT LAST_INSERT_ID {)
</selectKey>
before 为 false 时,等同于 order="AFTER"
,before 为 true 时,等同于 order="BEFORE"
,
@Update 和 @Delete
Provider 注解
MyBatis 提供了 4 中 Provider 注解,分别是 @SelectProvider、@InsertProvider、@UpdateProvider 和 @DeleteProvider。
创建 PrivilegeMapper 接口:
public interface PrivilegeMapper {
// method="selectById" 方法的参数应该和这个方法一样
@SelectProvider(type=PrivilegeProvider.class, method="selectById")
SysPrivilege selectById(Long id);
}
PrivilegeProvider 类:
public class PrivilegeProvider {
// 必须要有空的构造方法
public String selectById(final Long id){
// 可以直接返回 SQL 字符串
return new SQL(){
{
SELECT("id, privilege_name, privilege_url");
FROM("sys_privilege");
WHERE("id = #{id}");
}
}.toString();
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com
文章标题:MyBatis 04-注解方式的基本用法
文章字数:518
本文作者:Bin
发布时间:2019-09-21, 17:04:10
最后更新:2019-10-09, 21:19:02
原始链接:http://coolview.github.io/2019/09/21/MyBatis/MyBatis%2004-%E6%B3%A8%E8%A7%A3%E6%96%B9%E5%BC%8F%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。