之前在Spring Boot中整合MyBatis时,采用了注解的配置方式,相信很多人还是比较喜欢这种优雅的方式的,也收到不少读者朋友的反馈和问题,主要集中于针对各种场景下注解如何使用,下面就对几种常见的情况举例说明用法。

在做下面的示例之前,先准备一个整合好MyBatis的工程,可参见Spring Boot整合MyBatis,也可直接使用整合好的样例:Chapter3-2-7。

传参方式

下面通过几种不同传参方式来实现前文中实现的插入操作。

使用@Param

在之前的整合示例中我们已经使用了这种最简单的传参方式,如下:

@Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})")int insert(@Param("name") String name, @Param("age") Integer age);

这种方式很好理解,@Param中定义的name对应了SQL中的#{name}age对应了SQL中的#{age}

使用Map

如下代码,通过Map<String, Object>对象来作为传递参数的容器:

@Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER})")int insertByMap(Map<String, Object> map);

对于Insert语句中需要的参数,我们只需要在map中填入同名的内容即可,具体如下面代码所示:

Map<String, Object> map = new HashMap<>();map.put("name", "CCC");map.put("age", 40);userMapper.insertByMap(map);

使用对象

除了Map对象,我们也可直接使用普通的Java对象来作为查询条件的传参,比如我们可以直接使用User对象:

@Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})")int insertByUser(User user);

这样语句中的#{name}#{age}就分别对应了User对象中的nameage属性。

增删改查

MyBatis针对不同的数据库操作分别提供了不同的注解来进行配置,在之前的示例中演示了@Insert,下面针对User表做一组最基本的增删改查作为示例:

public interface UserMapper {

    @Select("SELECT * FROM user WHERE name = #{name}")    User findByName(@Param("name") String name);

    @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")    int insert(@Param("name") String name, @Param("age") Integer age);

    @Update("UPDATE user SET age=#{age} WHERE name=#{name}")    void update(User user);

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

在完成了一套增删改查后,不妨我们试试下面的单元测试来验证上面操作的正确性:

@RunWith(SpringJUnit4ClassRunner.class)@SpringApplicationConfiguration(classes = Application.class)@Transactionalpublic class ApplicationTests {

   @Autowired   private UserMapper userMapper;

  @Test    @Rollback    public void testUserMapper() throws Exception {       // insert一条数据,并select出来验证      userMapper.insert("AAA", 20);       User u = userMapper.findByName("AAA");     Assert.assertEquals(20, u.getAge().intValue());       // update一条数据,并select出来验证      u.setAge(30);     userMapper.update(u);     u = userMapper.findByName("AAA");      Assert.assertEquals(30, u.getAge().intValue());       // 删除这条数据,并select验证        userMapper.delete(u.getId());     u = userMapper.findByName("AAA");      Assert.assertEquals(null, u); }}

返回结果的绑定

对于增、删、改操作相对变化较小。而对于“查”操作,我们往往需要进行多表关联,汇总计算等操作,那么对于查询的结果往往就不再是简单的实体对象了,往往需要返回一个与数据库实体不同的包装类,那么对于这类情况,就可以通过@Results@Result注解来进行绑定,具体如下:

@Results({    @Result(property = "name", column = "name"),    @Result(property = "age", column = "age")})@Select("SELECT name, age FROM user")List<User> findAll();

在上面代码中,@Result中的property属性对应User对象中的成员名,column对应SELECT出的字段名。在该配置中故意没有查出id属性,只对User对应中的name和age对象做了映射配置,这样可以通过下面的单元测试来验证查出的id为null,而其他属性不为null:

@Test@Rollbackpublic void testUserMapper() throws Exception {    List<User> userList = userMapper.findAll();    for(User user : userList) {       Assert.assertEquals(null, user.getId());      Assert.assertNotEquals(null, user.getName()); }}

后记

本文主要介绍几种最为常用的方式,更多其他注解的使用可参见文档:http://www.mybatis.org/mybatis-3/zh/java-api.html

代码示例

本文的相关例子可以查看下面仓库中的chapter3-2-8目录:

  • Github:https://github.com/dyc87112/SpringBoot-Learning
  • Gitee:https://gitee.com/didispace/SpringBoot-Learning

Spring Boot中使用MyBatis注解配置详解相关推荐

  1. springboot 中使用 Mybatis 注解 配置 详解

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 传参方式 使用不同的传参方式: 使用@Param 之前博文中的项目使用了这种简单的传参方式: @In ...

  2. Spring Boot 使用 HikariCP 连接池配置详解

    Spring Boot 使用 HikariCP 连接池配置详解 HikariCP 是一个高性能的 JDBC 连接池组件. Spring Boot 2.x 将其作为默认的连接池组件,项目中添加 spri ...

  3. spring boot 教程(三)配置详解

    在大部分情况下,我们不需要做太多的配置就能够让spring boot正常运行.在一些特殊的情况下,我们需要做修改一些配置,或者需要有自己的配置属性. Spring Boot 支持多种外部配置方式 这些 ...

  4. 关于Spring Boot WebSocket整合以及nginx配置详解

    这篇文章主要给大家介绍了关于Spring Boot WebSocket整合以及nginx配置的相关资料,文中通过示例代码给大家介绍的非常详细,相信对大家的学习或者工作具有一定的参考学习价值,需要的朋友 ...

  5. Spring Boot 中使用 @Transactional 注解配置事务管理

    From: https://blog.csdn.net/nextyu/article/details/78669997 事务管理是应用系统开发中必不可少的一部分.Spring 为事务管理提供了丰富的功 ...

  6. Spring boot 中pom.xml 各个节点详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. spring之旅第四篇-注解配置详解

    spring之旅第四篇-注解配置详解 一.引言 最近因为找工作,导致很长时间没有更新,找工作的时候你会明白浪费的时间后面都是要还的,现在的每一点努力,将来也会给你回报的,但行好事,莫问前程!努力总不会 ...

  8. Spring Boot中的application.properties配置简介(二)

    Spring Boot中的application.properties配置简介(二)   根据上文的介绍,我们已经对Spring Boot中的application.properties配置有了一定的 ...

  9. Spring Boot中的一些常用配置介绍!

    这篇教程将为你介绍Spring Boot 中的一些常用配置,比如:自定义 Banner.配置日志.关闭特定的自动配置等. 自定义Banner 在 Spring Boot 启动的时候会有一个默认的启动图 ...

最新文章

  1. QQ音乐API分析记录
  2. Cell子刊:MRI有助于揭示睡眠之谜
  3. .GRIDVIEW奇偶行变色
  4. java 中通过 Lettuce 来操作 Redis
  5. html自动生成在线试题,HTML5测试题整理Ⅰ
  6. linux非阻塞等待线程,linux – 即使异步I / O操作挂起,只有线程处理io_service正在等待...
  7. 八邻域轮廓跟踪算法_结合mRMR选择和IFCM聚类的遥感影像分类算法
  8. python多线程爬虫数据顺序_Python爬虫必学知识点:多线程爬虫
  9. Myeclipse学习总结(11)——Eclipse中设置Java/Css/Html/Jsp换行长度
  10. 随想录(关于signal的实验)
  11. 2018热度上升最快的编程工具是什么?TensorFlow只排第11
  12. 推荐几个好用的php集成开发环境,推荐几个好用的PHP集成开发环境 (2
  13. 樊登读书赋能读后感_一场人均4万元的知识盛宴,樊登直播首秀到底讲了什么?...
  14. Spring Data JPA整合Redis缓存的配置
  15. 雨林木风windows7旗舰版
  16. sqlite使用手册
  17. C语言函数 bzero
  18. 模糊c均值聚类及python实现
  19. 中国大数据论坛第八期教育成都沙龙成功
  20. 什么是UI(UI百科)

热门文章

  1. 从Ubuntu12.04LTS到Foreda19再到Foreda8
  2. 对Java注解(Annotation)初步的认识
  3. 全局曝光和卷帘曝光的区别
  4. 怎么让sublime text3可以运行c/c++
  5. Android uevent
  6. php循环读取mysql_PHP无限循环获取MySQL数据
  7. emmc固件开发_UP2开发板简易开箱(二)
  8. STM32启动文件——startup_stm32f10x_hd.s
  9. python模块的定义_Python基础编程 模块的引入与定义
  10. LeetCode 1976. 到达目的地的方案数(迪杰斯特拉 Python 优先队列)