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,可以看到方法執行成功,資料庫也有相關記錄