51Testing软件测试论坛

标题: Spring Boot 整合MyBatis [打印本页]

作者: Mario洁    时间: 2019-3-8 15:55
标题: Spring Boot 整合MyBatis

Spring Boot官方提供了Spring Data的支持,但是却没有提供MyBatis的支持。

因为,Spring Data是Spring旗下的子产品,而MyBatis却不是。

本文通过一个小例子来实现Spring Boot 与MyBatis的整合。

加入maven依赖

  1. <!-- mybatis整合spring boot的starter -->
  2. <dependency>
  3.     <groupId>org.mybatis.spring.boot</groupId>
  4.     <artifactId>mybatis-spring-boot-starter</artifactId>
  5.     <version>1.3.0</version>
  6. </dependency>

  7. <dependency>
  8.     <groupId>com.h2database</groupId>
  9.     <artifactId>h2</artifactId>
  10.     <scope>runtime</scope>
  11. </dependency>

  12. <dependency>
  13.     <groupId>org.springframework.boot</groupId>
  14.     <artifactId>spring-boot-starter-test</artifactId>
  15.     <scope>test</scope>
  16. </dependency>
复制代码

Spring Boot官方提供的starter是这样的:spring-boot-starter-*

而其他第三方提供的starter是这样的:*-spring-boot-starter

编写实体类

  1. public class Emp {

  2.     private Long id;
  3.     private String name;
  4.     private Date birthday;
  5.     private Double salary;

  6.     public Emp() {
  7.     }

  8.     public Emp(String name, Date birthday, Double salary) {
  9.         this.name = name;
  10.         this.birthday = birthday;
  11.         this.salary = salary;
  12.     }

  13.     //getter and setter
  14. }
复制代码

编写持久层

  1. public interface EmpMapper {

  2.     List<Emp> findAll();

  3.     Emp findById(Long id);

  4.     void save(Emp emp);

  5.     void update(Emp emp);

  6.     void delete(Long id);
  7. }
复制代码

Spring Boot的启动程序

  1. @MapperScan("org.yun.mapper")
  2. @SpringBootApplication
  3. public class Application {

  4.     public static void main(String[] args) {
  5.         SpringApplication.run(Application.class, args);
  6.     }
  7. }
复制代码

@MapperScan指定要扫描的XxxMapper.java文件

在src/main/resources/下创建包 org.yun.mapper(与EmpMapper.java的包同名)
然后,建立EmpMapper.xml文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3. <mapper namespace="org.yun.mapper.EmpMapper">

  4.     <sql id="baseSql">
  5.         id,name,birthday,salary
  6.     </sql>

  7.     <select id="findAll" resultType="org.yun.domain.Emp">
  8.         select
  9.         <include refid="baseSql"/>
  10.         from emp
  11.     </select>

  12.     <select id="findById" parameterType="long" resultType="org.yun.domain.Emp">
  13.         select
  14.         <include refid="baseSql"/>
  15.         from emp
  16.         where id = #{id}
  17.     </select>

  18.     <insert id="save" parameterType="org.yun.domain.Emp" keyProperty="id" useGeneratedKeys="true">
  19.         insert into emp(name,birthday,salary)values(#{name},#{birthday},#{salary})
  20.     </insert>

  21.     <update id="update" parameterType="org.yun.domain.Emp">
  22.         update emp set name = #{name},birthday = #{birthday},salary = #{salary}
  23.         where id = #{id}
  24.     </update>

  25.     <delete id="delete" parameterType="long">
  26.         delete from emp where id = #{id}
  27.     </delete>

  28. </mapper>
复制代码

编写application.properties

  1. #指定实体类的名别包
  2. mybatis.type-aliases-package=org.yun.domain

  3. #指定XxxMapper.xml的位置
  4. #mybatis.mapper-locations=classpath:org/yun/mapper/*Mapper.xml
复制代码

创建数据表schema.sql

  1. CREATE TABLE emp (
  2.   id       BIGINT PRIMARY KEY AUTO_INCREMENT,
  3.   name     VARCHAR(30),
  4.   birthday DATE,
  5.   salary   DOUBLE
  6. );
复制代码

初始化数据data.sql

  1. insert into emp(name,birthday,salary)values('admin','1999-09-09',9000);
复制代码

将schema.sql、data.sql(名字固定)文件放置在src/main/resources下目录,Spring Boot启动的时候会自动执行。

最后编写单元测试

  1. import static org.junit.Assert.assertNotNull;
  2. import static org.junit.Assert.assertTrue;

  3. @RunWith(SpringRunner.class)
  4. @SpringBootTest
  5. public class ApplicationTests {

  6.     @Autowired
  7.     private EmpMapper empMapper;

  8.     @Test
  9.     public void contextLoads() {
  10.         assertNotNull(empMapper);

  11.         Emp emp1 = new Emp("tom", new Date(), 5000D);
  12.         Emp emp2 = new Emp("bill", new Date(), 6000D);
  13.         empMapper.save(emp1);
  14.         empMapper.save(emp2);

  15.         assertTrue(empMapper.findAll().size() == 3);

  16.         Emp emp = empMapper.findById(2L);
  17.         emp.setSalary(8000D);
  18.         empMapper.update(emp);
  19.         assertTrue(emp.getSalary() == 8000D);

  20.         empMapper.delete(2L);
  21.         assertTrue(empMapper.findAll().size() == 2);
  22.     }
  23. }
复制代码







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2