详解Mybatis注解写法(附10余个常用例子)

作者:sunnyzyq 时间:2023-01-19 03:39:53 

【前言】

Mybatis 除了 XML 配置写法,还可以使用注解写法。

首先需要引入 Mybatis 的依赖:


<dependency>
 <groupId>org.mybatis.spring.boot</groupId>
 <artifactId>mybatis-spring-boot-starter</artifactId>
 <version>1.3.2</version>
</dependency>
<dependency>
 <groupId>tk.mybatis</groupId>
 <artifactId>mapper-spring-boot-starter</artifactId>
 <version>1.1.3</version>
</dependency>

然后在接口上打上对应 @Mapper 注解

详解Mybatis注解写法(附10余个常用例子)

下面是常用的 Myatis 注解写法:

【1】新增对象( 非自增 ID )

插入的时候,数据库的值字段会自动匹配对象中同名称属性的值。


@Insert(value = { "INSERT INTO user (id, name, age, remark) VALUES (#{id}, #{name}, #{age}, #{remark})" })
public void addUser(User user);

【2】新增对象( 自增 ID )

如果数据库user表的 id 是自增长,我们可以加上 @Options 注解,那么该对象在插入后,id 属性会自动获取到主键。

@Options(useGeneratedKeys=true, keyProperty="id") 其中的 id 对应数据库表中的主键字段。


@Insert(value = { "INSERT INTO user (name, age, remark) VALUES (#{name}, #{age}, #{remark})" })
@Options(useGeneratedKeys=true, keyProperty="id")
public void insertUser(User user);

【3】根据 ID 查询对象

 @Param(value = "id") 其中的 id 对应 SQL 语句中的 #{id}


@Select("SELECT * FROM user WHERE id = #{id}")
public User getUserById(@Param(value = "id") long id);

在查询对象的过程中,表字段会自动装箱给同名属性。当然,也可以写成绑定形式。

如下:@Result 注解中 property 是对象字段,column 是表字段。


@Select("SELECT * FROM user WHERE id = #{id}")
@Results({
@Result(property="id", column="id"),
@Result(property="name", column="name"),
@Result(property="age", column="age"),
@Result(property="remark", column="remark"),
})
public User getUserById(@Param(value = "id") long id);

【4】大于 ( > ) 查询

在SQL 语句中,直接写作 > ,但在 xml 中,大于通常用转义 &gt; 替代 ( xml 写法介绍详见 6.2)。


@Select("SELECT * FROM user WHERE age > #{age}")
public List<User> getUserList(@Param(value = "age") Integer age);

【5】小于 ( < ) 查询

在SQL 语句中,直接写作 < ,但在 xml 中,小于通常用转义 &lt; 替代  ( xml 写法介绍详见 6.2)。


@Select("SELECT * FROM user WHERE age < #{age}")
public List<User> getUserList(@Param(value = "age") Integer age);

【6】IN 关键字查询

(6.1)带 IN 的子查询


@Select("SELECT * FROM user WHERE id IN (SELECT id FROM user WHERE name = #{name})")
public List<User> getUserList(@Param(value = "name") String name);

(6.2)带 IN 的集合查询

List 集合,Set集合,数组 都适用。

注意:@Select({"<script>", "xx1", "xx2", "</script>"}) 这种写法为 xml 方式写法。所有 SQL 都在 <script> </script> 这对标签之中,标签之外是一对大括号,<script> 标签内的所有参数在最后执行 SQL 的时候会自动拼接,如这里为 xx1xx2,以此类推。 <script> 标签内还可以内嵌标签,比如下面里的 <foreach>,标签内所有引号都为单引号。


@Select({"<script>", "SELECT * FROM user WHERE id IN ",
"<foreach collection='ids' item='id' open='(' separator=',' close=')'>#{id}</foreach>", "</script>"})
public List<User> getUserList(@Param(value = "ids") List<Long> ids);

在 Postgrelsql 中,如果逻辑SQL中的 IN 和 ANY 的语义相同,那么尽量用 ANY,这样会更加效率。如:


@Select("SELECT * FROM user WHERE id = ANY(#{ids}::integer[])")
public List<SubOrderPO> getUserList(@Param(value = "ids") Integer[] ids);

【7】LIKE 关键字查询


@Select("SELECT * FROM user WHERE name LIKE concat('%', #{name}, '%') ")
public List<User> getUserList(@Param(value = "name") String name);

【8】时间查询

(8.1)Date 类型:直接传入进行比较


@Select("SELECT * FROM user WHERE create_time > #{createTime}")
public List<User> test(@Param(value = "createTime") Date createTime);

(8.2)String 类型:需要将其转化( 时间精度可以按自己需要裁取 )

Mysql :STR_TO_DATE('2008-08-08 08:08:08', '%Y-%m-%d %H:%i:%s')

Postgrelsql :to_timestamp('2008-08-08 08:08:08','yyyy-MM-dd hh24:mi:ss')

Oracle : to_date( '2008-08-08 08:08:08' , 'yyyy-MM-dd HH24:mi:ss' )

如 Mysql 写法:


@Select("SELECT * FROM user WHERE create_time > STR_TO_DATE(#{createTime}, '%Y-%m-%d %H:%i:%s')")
public List<User> test(@Param(value = "createTime") String createTime);

【9】高级查询( 动态SQL )

 注意:【&gt;】是大于(>)的转义,【&lt;】 是小于(<)的转义


@Select({"<script>", "SELECT * FROM user ","<where>",
"<if test = 'name != null' >", " AND name LIKE concat('%', #{name}, '%') ", "</if>",
"<if test = 'age != null and age != 0' >", " AND age &lt; #{age} ", "</if>",
"</where>", "</script>"})
public List<User> getUserList(@Param(value = "name") String name, @Param(value = "age") Integer age);

【10】修改对象


@Update("UPDATE user SET name = #{name} WHERE id = #{id}")
public void update(@Param(value = "id") Long id, @Param(value = "name") String name);

【11】删除对象


@Delete("Delete FROM user WHERE id = #{id}")
public void delete(@Param(value = "id") Long id);

来源:https://blog.csdn.net/sunnyzyq/article/details/102533764

标签:Mybatis,注解
0
投稿

猜你喜欢

  • spring boot入门之诞生背景及优势影响

    2021-09-16 06:31:57
  • 对Jpa中Entity关系映射中mappedBy的全面理解

    2023-07-25 03:48:39
  • 解析SpringSecurity+JWT认证流程实现

    2023-05-24 19:33:56
  • Spring的异常重试框架Spring Retry简单配置操作

    2023-11-25 18:27:35
  • 解析springboot整合谷歌开源缓存框架Guava Cache原理

    2023-11-07 13:24:23
  • SpringBoot实现RAS+AES自动接口解密

    2022-11-05 04:07:01
  • eclipse导入appcompat项目报错解决办法

    2021-11-10 14:25:57
  • Java中Mybatis-Plus使用方式介绍

    2021-11-14 05:49:56
  • java获取json中的全部键值对实例

    2023-08-23 19:53:03
  • C# WinForm制作异形窗体与控件的方法

    2023-11-07 11:09:28
  • Java实现级联下拉结构的示例代码

    2023-11-03 18:22:06
  • Java Synchronized锁失败案例及解决方案

    2023-10-25 12:33:47
  • Android so的热升级尝试

    2023-08-07 22:41:59
  • 三种Java自定义DNS解析器方法与实践

    2022-01-13 10:12:11
  • SpringBoot自定义注解之实现AOP切面日志详解

    2022-12-18 17:58:06
  • C#调用Win32的API函数--User32.dll

    2022-04-13 16:43:24
  • Java获取文件的类型和扩展名的实现方法

    2021-09-24 08:56:56
  • 解析spring cloud ouath2中的Eureka

    2023-10-12 04:07:54
  • request如何获取body的json数据

    2021-11-16 20:30:31
  • c# 调用Win32Api关闭当前应用的方法

    2023-09-22 20:51:26
  • asp之家 软件编程 m.aspxhome.com