MyBatis là một khuôn khổ Ánh xạ SQL với sự hỗ trợ cho SQL tùy chỉnh, các thủ tục được lưu trữ và các ánh xạ nâng cao.

SpringBoot không cung cấp hỗ trợ chính thức cho tích hợp MyBatis, nhưng cộng đồng MyBatis đã xây dựng một bộ khởi động SpringBoot cho MyBatis.

Bạn có thể đọc về thông báo phát hành SpringBoot MyBatis Starter tại http://blog.mybatis.org/2015/11/mybatis-spring-boot-released.html và bạn có thể khám phá mã nguồn trên GitHub https://github.com/mybatis/mybatis-spring-boot.

Tạo một dự án SpringBoot Maven và thêm phần phụ thuộc MyBatis Starter sau.

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

Chúng tôi sẽ sử dụng lại User.java, schema.sql và data.sql được tạo trong bài viết trước của tôi SpringBoot: Làm việc với JdbcTemplate
Tạo giao diện MyBatis SQL Mapper UserMapper.java với một số thao tác cơ sở dữ liệu như sau:

  package com.sivalabs.demo.domain;
public interface UserMapper
{
    void insertUser(User user);
    User findUserById(Integer id);
    List<User> findAllUsers();
}

Chúng ta cần tạo các tệp Mapper XML để xác định các truy vấn cho các câu lệnh SQL được ánh xạ cho các phương thức giao diện Mapper tương ứng.

Tạo ra UserMapper.xml trong danh bạ src/main/resources/com/sivalabs/demo/mappers/ như sau:

  <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.sivalabs.demo.mappers.UserMapper">

    <resultMap  type="User">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="email" property="email" />
    </resultMap>

    <select  resultMap="UserResultMap">
        select id, name, email from users
    </select>

    <select  resultMap="UserResultMap">
        select id, name, email from users WHERE id=#{id}
    </select>

    <insert  parameterType="User" useGeneratedKeys="true" keyProperty="id">
        insert into users(name,email) values(#{name},#{email})
    </insert>
</mapper>

Một số điều cần quan sát ở đây là:

  • Không gian tên trong Mapper XML phải giống với Tên đủ điều kiện (FQN) cho Giao diện người lập bản đồ
  • Giá trị id câu lệnh phải giống như tên phương thức Giao diện người lập bản đồ.
  • Nếu tên cột kết quả truy vấn khác với tên thuộc tính bean, chúng ta có thể sử dụng cấu hình để cung cấp ánh xạ giữa tên cột và tên thuộc tính bean tương ứng của chúng.

MyBatis cũng cung cấp các cấu hình truy vấn dựa trên chú thích mà không yêu cầu Mapper XML.

Chúng ta có thể tạo UserMapper.java và định cấu hình các SQL được ánh xạ bằng cách sử dụng các chú thích như sau:

  public interface UserMapper
{
    @Insert("insert into users(name,email) values(#{name},#{email})")
    @SelectKey(statement="call identity()", keyProperty="id",
    before=false, resultType=Integer.class)
    void insertUser(User user);

    @Select("select id, name, email from users WHERE id=#{id}")
    User findUserById(Integer id);

    @Select("select id, name, email from users")
    List<User> findAllUsers();

}

SpringBoot MyBatis starter cung cấp các tham số cấu hình MyBatis sau đây mà chúng tôi có thể sử dụng để tùy chỉnh MyBatis .

  mybatis.config = mybatis config file name
mybatis.mapperLocations = mappers file locations
mybatis.typeAliasesPackage = domain object's package
mybatis.typeHandlersPackage = handler's package
mybatis.check-config-location = check the mybatis configuration exists
mybatis.executorType = mode of execution. Default is SIMPLE

Định cấu hình typeAliasesPackagemapperLocations Trong application.properties.

  mybatis.typeAliasesPackage=com.sivalabs.demo.domain
mybatis.mapperLocations=classpath*:**/mappers/*.xml 

Tạo lớp điểm đầu vào SpringbootMyBatisDemoApplication.java.

  @SpringBootApplication
@MapperScan("com.sivalabs.demo.mappers")
public class SpringbootMyBatisDemoApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(SpringbootMyBatisDemoApplication.class, args);
    }
}

Quan sát rằng chúng tôi đã sử dụng @MapperScan("com.sivalabs.demo.mappers") chú thích để chỉ định nơi tìm giao diện Mapper.

Bây giờ, hãy tạo một lớp thử nghiệm JUnit và thử nghiệm các phương thức UserMapper của chúng tôi.

  @RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(SpringbootMyBatisDemoApplication.class)
public class SpringbootMyBatisDemoApplicationTests
{
    @Autowired
    private UserMapper userMapper;

    @Test
    public void findAllUsers() {
        List<User> users = userMapper.findAllUsers();
        assertNotNull(users);
        assertTrue(!users.isEmpty());
    }

    @Test
    public void findUserById() {
        User user = userMapper.findUserById(1);
        assertNotNull(user);
    }

    @Test
    public void createUser() {
        User user = new User(0, "Siva", "[email protected]");
        userMapper.insertUser(user);
        User newUser = userMapper.findUserById(user.getId());
        assertEquals("Siva", newUser.getName());
        assertEquals("[email protected]", newUser.getEmail());
    }
}

Bạn có thể đọc thêm về tích hợp MyBatis và Spring tại http://blog.mybatis.org/p/products.html và http://www.mybatis.org/spring/

Trên đây là Cách sử dụng Spring Boot làm việc với MyBatis theo các bước đơn giản. Nếu bạn có bất kỳ câu hỏi nào liên quan đến các bước nói trên, hãy signalfix.net biết trong phần bình luận. signalfix.net sẽ liên hệ với bạn để có giải pháp trong thời gian sớm nhất.