1. 程式人生 > >SpringBoot 整合MyBatis案例詳解

SpringBoot 整合MyBatis案例詳解

SpringBoot約定大於配置的特點,讓框架的配置非常簡潔,與傳統的SSM框架相比,簡化了大量的XML配置,使得程式設計師可以從繁瑣的配置中脫離出來,將精力集中在業務程式碼層面,提高了開發效率,並且後期的維護成本也大大降低。

從原始碼中可以看到,每一個springboot整合的jar包也是一個maven的子module,springboot已經將相關依賴的jar包自動新增到工程中,不需要開發人員手動去添加了,這也是springboot能夠簡化配置的一個重要原因。

下面開始說明springboot是如何整合mybatis框架以及如何實現和資料庫的互動的

首先需要在pom.xml中引入springboot整合mybatis的jar包以及mysql-connector-java

<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.38</version> </dependency>

 

然後在application.properties中新增資料庫相關引數

spring.datasource.url=jdbc:mysql://localhost:3306/mysql
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=org.gjt.mm.mysql.Driver

 

到這裡mybatis的相關配置已經完成,可以看出配置非常的簡單

下一步開始編寫mapper對映檔案,我們放棄傳統的xml配置,改用註解的方式,編寫一個mapper介面

需要說明的是,springboot的啟動類需要在目錄最上層,保證所有的類可以被springboot掃描到

介面外面需要新增@Mapper,才可以被spring識別,@Param註解宣告的名稱要和sql語句傳入的引數保持一致,

傳參的方式可以是String型別,也可以是map集合,或者是User物件

package com.didispace.domain;

import java.util.Map;

import org.apache.ibatis.annotations.*;




@Mapper
public interface UserMapper {

    @Insert("insert into users(name,age) values (#{name},#{age})")
    public void insertUser(@Param("name") String name,@Param("age") Integer age);
    
    @Insert("insert into users(name,age) values (#{name},#{age})")
    public void insertUserMap(Map<String, Object> map);
    
    @Update("update users set age=#{age} where name=#{name}")
    public void updateUser(User user);
    
    @Select("select * from users where name=#{name}")
    public User selectUserByName(@Param("name") String name);
    
    @Select("select count(*) from users")
    public Integer selectAllUsers();
    
    @Delete("delete from users")
    public void deleteAllUsers();
}

 

 

最後,編寫一個Junit測試類,測試方法是否能夠成功執行

@SpringApplicationConfiguration(Application.class),將springboot啟動類新增到測試類中,實現每次測試都同時啟動springboot

@Before,在測試之前先刪除該表所有記錄,保證每次執行都能確保資料一致。

首先插入兩筆記錄,然後根據名稱查詢,最後分別使用map和user物件方式傳參

package demo;

import java.util.HashMap;
import java.util.Map;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.didispace.Application;
import com.didispace.domain.User;
import com.didispace.domain.UserMapper;



@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
public class ApplicationTest {
    
    @Autowired
    private UserMapper userMapper;
    
    @Before
    public void deleteAll() throws Exception{
        userMapper.deleteAllUsers();
    }
    
    @Test
    public void test() throws Exception{
        userMapper.insertUser("lirenjie", 28);    
        userMapper.insertUser("carrystone", 19);
        Assert.assertEquals(2, userMapper.selectAllUsers().intValue());
        Assert.assertEquals(28, userMapper.selectUserByName("lirenjie").getAge().intValue());
        Map<String, Object> map = new HashMap<>();
        map.put("name", "frankseoul");
        map.put("age", 17);
        userMapper.insertUserMap(map);
        Assert.assertEquals(17, userMapper.selectUserByName("frankseoul").getAge().intValue());
        User user = new User("frankseoul",19);
        userMapper.updateUser(user);
        System.out.println(userMapper.selectUserByName("frankseoul").getAge());
    }
}

 

執行Junit,可以看到方法執行成功,資料庫也有相關記錄