Spring boot 學習筆記 (二)- 整合MyBatis
Spring Boot中整合MyBatis,並通過注解方式實現映射。
整合MyBatis
以Spring boot 學習筆記 (一)- Hello world 為基礎項目,在pom.xml中添加如下依賴
<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>
在application.properties 文件下 添加mysql的連接配置(切記不要在行尾留有空格,否則報com.mysql.jdbc.Driver Class Not Found error,其實只是含有空格導致找不到類)
spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password= spring.datasource.driver-class-name=com.mysql.jdbc.Driver
同其他Spring Boot工程一樣,簡單且簡潔的的完成了基本配置,下面看看如何在這個基礎下輕松方便的使用MyBatis訪問數據庫。
添加com.latteyan.entity包,並添加User 類
package com.latteyan.entity; import java.io.Serializable; public class User implements Serializable{ private static final long serialVersionUID = 8002149736589557777L; private Long id; private String name; private Integer age; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
添加com.latteyan.dao包,並添加UserMapper接口
package com.latteyan.dao; import java.util.List; import java.util.Map; import com.latteyan.entity.User; import org.apache.ibatis.annotations.*; @Mapper public interface UserMapper { // 通過Parameter新增 @Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})") int insertByParameter(@Param("name") String name, @Param("age") Integer age); // 通過Map新增 @Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER})") int insertByMap(Map<String, Object> map); // 通過Object新增 @Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})") int insertByObject(User user); // Delete By Id @Delete("DELETE FROM user WHERE id =#{id}") void delete(Long id); // Update @Update("UPDATE user SET age=#{age} WHERE name=#{name}") void update(User user); // Find by Parameter @Select("SELECT * FROM USER WHERE NAME = #{name}") User findByName(@Param("name") String name); // 通過@Results,綁定返回值 @Results({ @Result(property = "name", column = "name"), @Result(property = "age", column = "age") }) @Select("SELECT name, age FROM user") List<User> findAll(); }
通過UserMapper 接口我們就可以現在訪問數據庫的功能.
單元測試
package com.latteyan; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import com.latteyan.dao.UserMapper; import com.latteyan.entity.User; @RunWith(SpringRunner.class) @SpringBootTest public class SpringbootApplicationTests { @Autowired private UserMapper userMapper; @Test public void add() throws Exception { // insert by parameter userMapper.insertByParameter("zhangShan", 20); // insert by object User user = new User(); user.setAge(21); user.setName("LiSi"); userMapper.insertByObject(user); // insert by map Map<String, Object> map = new HashMap<>(); map.put("name", "huangwu"); map.put("age", 22); userMapper.insertByMap(map); User zhangShan = userMapper.findByName("zhangShan"); Assert.assertEquals(20, zhangShan.getAge().intValue()); User LiSi = userMapper.findByName("LiSi"); Assert.assertEquals(21, LiSi.getAge().intValue()); User huangwu = userMapper.findByName("huangwu"); Assert.assertEquals(22, huangwu.getAge().intValue()); } @Test public void udpate() throws Exception { User user = userMapper.findByName("zhangShan"); user.setAge(50); userMapper.update(user); user = userMapper.findByName("zhangShan"); Assert.assertEquals(50, user.getAge().intValue()); userMapper.delete(user.getId()); } @Test public void findAll() throws Exception { List<User> users = userMapper.findAll(); Assert.assertNotNull(users); } }
參考:http://blog.didispace.com/springbootmybatis/
