当前位置: 首页 > news >正文

Spring Boot整合MyBatis

最近项目原因可能会继续开始使用MyBatis,已经习惯于spring-data的风格,再回头看xml的映射配置总觉得不是特别舒服,接口定义与映射离散在不同文件中,使得阅读起来并不是特别方便。

Spring中整合MyBatis就不多说了,最近大量使用Spring Boot,因此整理一下Spring Boot中整合MyBatis的步骤。搜了一下Spring Boot整合MyBatis的文章,方法都比较老,比较繁琐。查了一下文档,实际已经支持较为简单的整合与使用。下面就来详细介绍如何在Spring Boot中整合MyBatis,并通过注解方式实现映射。

整合MyBatis

  • 新建Spring Boot项目,或以Chapter1为基础来操作

  • pom.xml中引入依赖

  • 这里用到spring-boot-starter基础和spring-boot-starter-test用来做单元测试验证数据访问

  • 引入连接mysql的必要依赖mysql-connector-java

  • 引入整合MyBatis的核心依赖mybatis-spring-boot-starter

  • 这里不引入spring-boot-starter-jdbc依赖,是由于mybatis-spring-boot-starter中已经包含了此依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.21</version>
        </dependency>

    </dependencies>
  • 同之前介绍的使用jdbc和spring-data连接数据库一样,在application.properties中配置mysql的连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

同其他Spring Boot工程一样,简单且简洁的的完成了基本配置,下面看看如何在这个基础下轻松方便的使用MyBatis访问数据库。

使用MyBatis

  • 在Mysql中创建User表,包含id(BIGINT)、name(INT)、age(VARCHAR)字段。同时,创建映射对象User
public class User {

    private Long id;
    private String name;
    private Integer age;

    // 省略getter和setter

}
  • 创建User映射的操作UserMapper,为了后续单元测试验证,实现插入和查询操作

@Mapper
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);

}

  • 创建Spring Boot主类
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
  • 创建单元测试
  • 测试逻辑:插入一条name=AAA,age=20的记录,然后根据name=AAA查询,并判断age是否为20
  • 测试结束回滚数据,保证测试单元每次运行的数据环境独立

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

    @Autowired
    private UserMapper userMapper;

    @Test
    @Rollback
    public void findByName() throws Exception {
        userMapper.insert("AAA", 20);
        User u = userMapper.findByName("AAA");
        Assert.assertEquals(20, u.getAge().intValue());
    }

}

完整示例Chapter3-2-7

相关文章:

  • 1100名达摩院“扫地僧”加持,阿里云的下一个十年
  • 深入学习JVM了解JVM内存模型
  • I.MX6 AW-NB177NF p2p support
  • Vue Router
  • 【转】FPGA内部小数计算
  • LeetCode算法题-Non-decreasing Array(Java实现)
  • 我的IT转行之路
  • 读书笔记之《实战Java虚拟机》(6):性能监控工具
  • B-树(B+树) 学习总结
  • 【DAY24】内省,NIO的学习笔记
  • 双亲委派模型与Tomcat类加载架构
  • JavaScript事件详解
  • 明文存密码成惯例?Facebook 6 亿用户密码可被 2 万员工直接看
  • 用grunt搭建自动化的web前端开发环境-完整教程
  • 强化学习遭遇瓶颈!分层RL将成为突破的希望
  • (三)从jvm层面了解线程的启动和停止
  • .pyc 想到的一些问题
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Spring声明式事务管理之一:五大属性分析
  • use Google search engine
  • 编写符合Python风格的对象
  • 给第三方使用接口的 URL 签名实现
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 实战|智能家居行业移动应用性能分析
  • 学习JavaScript数据结构与算法 — 树
  • 学习笔记TF060:图像语音结合,看图说话
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • # 计算机视觉入门
  • (0)Nginx 功能特性
  • (003)SlickEdit Unity的补全
  • (2)STM32单片机上位机
  • (6)STL算法之转换
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (NSDate) 时间 (time )比较
  • (多级缓存)多级缓存
  • (论文阅读40-45)图像描述1
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (轉)JSON.stringify 语法实例讲解
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Framework与.NET Framework SDK有什么不同?
  • .Net Memory Profiler的使用举例
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net 中viewstate的原理和使用
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)