博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis的注解功能
阅读量:7281 次
发布时间:2019-06-30

本文共 3454 字,大约阅读时间需要 11 分钟。

一、mybatis 简单注解

关键注解词 : 

@Insert : 插入sql , 和xml insert sql语法完全一样
@Select : 查询sql,  和xml select sql语法完全一样
@Update : 更新sql,  和xml update sql语法完全一样
@Delete : 删除sql,  和xml delete sql语法完全一样
@Param :  入参
@Results : 结果集合
@Result : 结果
 

1、领域模型 :

public class UserDO {        private Long id;        private String userName;        private Date gmtCreate;        private Date gmtModified;        public Long getId() {            return id;        }        public void setId(Long id) {            this.id = id;        }        public String getUserName() {            return userName;        }        public void setUserName(String userName) {            this.userName = userName;        }        public Date getGmtCreate() {            return gmtCreate;        }        public void setGmtCreate(Date gmtCreate) {            this.gmtCreate = gmtCreate;        }        public Date getGmtModified() {            return gmtModified;        }        public void setGmtModified(Date gmtModified) {            this.gmtModified = gmtModified;        }    }

 

2、接口定义 :

public interface UserDAO {    @Insert("INSERT INTO t_user(gmt_create, gmt_modified, user_name) values(now(), now(), #{userName})")    public int insert(@Param("userName") String userName);         @Select("SELECT * FROM t_user WHERE id = #{id}")    public UserDO selectByUserId(@Param("id") Long id) ;        @Update("UPDATE t_user SET gmt_modified = now(), user_name = #{userName} WHERE id = #{id}")    public int udpateById(@Param("userName") String userName, @Param("id") Long id) ;    @Delete("DELETE  FROM t_user WHERE id = #{id}")    public int udpateById(@Param("id") Long id) ;  }

  

3、mybatis  xml config:

 

  
     
  

 

这样,我们就完成了mybatis 使用注解的demo, 是不是觉得很简单 ~~

 

如果熟悉mybatis xml的话, 大多数情况下, 我们需要将数据库表的字段名 与 class DO 映射起来。mybatis注解也提供了映射的功能, 语法大同小异。

 

@Select("SELECT * FROM tsp_template WHERE id = #{id}")     @Results(value = { @Result(property = "userName", column = "user_name", javaType = String.class, jdbcType = JdbcType.VARCHAR) })        public UserDO selectById(@Param("id") Long id);

 

当然, 上述只是再不能简单的sql了。想想如果我们有这种需求, 更新用户信息, 希望能更新指定的属性值, 换而言之, 像xml 一样动态生成SQL 。 那我们就不能简单粗暴使用 @update 注解 。好在 强大的mybatis 也提供了动态SQL的组装。

动态SQL 

 对应关系如下

@Insert :@InsertProvider
@Select :@SelectProvider
@Update :@UpdateProvider
@Delete :@DeleteProvider 四个provider注解标识 使用了动态SQL, 使用语法格式 :
@UpdateProvider(type = UserProvider.class, method = "updateSQL")

 

如何构造动态SQL

public class UserProvider {    /**     * udpate     * @param UserDO userDO     * @return     */    public String updateSQL(final UserDO userDO) {        return new SQL() {            {                UPDATE("t_user");                SET("gmt_modified = now()");                if (userDO.getUserName() != null) {                    SET("user_name = #{userName}");                }                WHERE("id = #{id}}");            }        }.toString();    }}

  

本文提到的知识点比较基础, 如需深入了解见官网文档or看下源码。

总结 : 

  1、xml 和 注解 如何选择 ? 因人而异, 每个人的撸码各有各的习惯, xml 、注解各有优缺点, xml的缺点 : 当模型属性有变更时, 需要从DO改到DAO改到xml, 想想就蛋疼了~ xml也有优点 , SQL片段复用方便, 语法平易近人, 不像注解, 构造个动态语句, 还得建个类, 而且当你需要构造一段SQL被多处引用时, annotation 显得无能为力了~重复写相同的SQL片段, 代码就显得冗余了, 这时必须借助 xml来抽取共同使用。吐槽了下mybatis注解, 那注解岂不是毫无用处? no , mybatis 适合模型属性经常变更的场景, 因为可以结合反射, 正则匹配动态构造SQL(纯粹瞎歪歪, 个人想法, 应该可以实现, 改天撸一发)。可以说, mybatis的注解 优点 很好弥补了 xml缺点。两者互补~

  2、古人语 : 熊和鱼掌不可得兼 ~ 而mybatis注解 和 xml 可以混合使用。只要你愿意~~

转载于:https://www.cnblogs.com/fengli9998/p/7382957.html

你可能感兴趣的文章
如何使用纯 CSS 制作四子连珠游戏
查看>>
分布式的系统核心是什么——日志
查看>>
D3.js系列学习笔记之一:初识绘图流程和基本思想
查看>>
「JavaScript」函数声明和函数表达式
查看>>
webpack4 的开发环境配置说明
查看>>
【JavaScript】面向对象
查看>>
手机端简洁日历控件iantoo.week()
查看>>
一起来学SpringBoot | 第六篇:整合SpringDataJpa
查看>>
并发——读写锁初探
查看>>
前端每日实战:71# 视频演示如何用纯 CSS 创作一个跳 8 字型舞的 loader
查看>>
一点感悟:《Node.js学习笔记》star数突破1000+
查看>>
用Go实现Redis之一准备工作
查看>>
简单5步,从0开始搭建你的第一款小程序
查看>>
安装Scrapy库报错 “error: Microsoft Visual C++ 14.0 is required. ”解决方法
查看>>
根据JWT的key和URL决定是否缓存HTTP请求
查看>>
前端AES加密
查看>>
持续更新 mongoose 细节收集
查看>>
Mybatis常见面试题
查看>>
基于VUE构建做题H5组件【附源代码】
查看>>
BFC深入理解
查看>>