spring boot 中MyBatis整合
阿新 • • 發佈:2019-01-04
- application.properties增加spring配置資料庫連結地址
spring.datasource.url=jdbc:mysql://localhost:3306/***?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=***
spring.datasource.password=***
mybatis.config-location=classpath:mybatis-config.xml
在resource下面新建一個mybatis-config.xml,如圖
在 mybatis-config.xml中,配置MyBatis相關資訊
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- Globally enables or disables any caches configured in any mapper under this configuration --> <setting name="cacheEnabled" value="true"/> <!-- Sets the number of seconds the driver will wait for a response from the database --> <setting name="defaultStatementTimeout" value="3000"/> <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- Allows JDBC support for generated keys. A compatible driver is required. This setting forces generated keys to be used if set to true, as some drivers deny compatibility but still work --> <setting name="useGeneratedKeys" value="true"/> </settings> <!-- Continue going here --> </configuration>
- pom.xml引入mybatis-spring-boot-starter和mysql-connector-java
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency>
- http://www.mybatis.org/mybatis3/zh/index.html3. (MyBatis官方網站,推薦學習)
- 演示如何利用MyBatis操作資料庫
新建和資料苦欄位相同的實體類
package com.nowcoder.model;
public class User {
private int id;
private String name;
private String password;
private String salt;
private String headUrl;
public User() {
}
public User(String name) {
this.name = name;
this.password = "";
this.salt = "";
this.headUrl = "";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public String getHeadUrl() {
return headUrl;
}
public void setHeadUrl(String headUrl) {
this.headUrl = headUrl;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
在Dao層,新建UserDao介面
package com.nowcoder.dao;
import com.nowcoder.model.User;
import org.apache.ibatis.annotations.*;
@Mapper
public interface UserDAO {
// 注意空格
String TABLE_NAME = " user ";
String INSERT_FIELDS = " name, password, salt, head_url ";
String SELECT_FIELDS = " id, " + INSERT_FIELDS;
@Insert({"insert into ", TABLE_NAME, "(", INSERT_FIELDS,
") values (#{name},#{password},#{salt},#{headUrl})"})
int addUser(User user);
@Select({"select ", SELECT_FIELDS, " from ", TABLE_NAME, " where id=#{id}"})
User selectById(int id);
@Update({"update ", TABLE_NAME, " set password=#{password} where id=#{id}"})
void updatePassword(User user);
@Delete({"delete from ", TABLE_NAME, " where id=#{id}"})
void deleteById(int id);
}
這裡採用註解方式寫入SQL語句,當sql語句比較麻煩的時候,我們選用xml來寫sql語句
接下來,就可以定義一個測試用例,呼叫userDao操作資料庫。
package com.nowcoder;
import com.nowcoder.dao.QuestionDAO;
import com.nowcoder.dao.UserDAO;
import com.nowcoder.model.Question;
import com.nowcoder.model.User;
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.SpringApplicationConfiguration;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import java.util.Date;
import java.util.Random;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = WendaApplication.class)
@Sql("/init-schema.sql")
public class InitDatabaseTests {
@Autowired
UserDAO userDAO;
@Autowired
QuestionDAO questionDAO;
@Test
public void contextLoads() {
Random random = new Random();
for (int i = 0; i < 11; ++i) {
User user = new User();
user.setHeadUrl(String.format("http://images.nowcoder.com/head/%dt.png", random.nextInt(1000)));
user.setName(String.format("USER%d", i));
user.setPassword("");
user.setSalt("");
userDAO.addUser(user);
user.setPassword("newpassword");
userDAO.updatePassword(user);
Question question = new Question();
question.setCommentCount(i);
Date date = new Date();
date.setTime(date.getTime() + 1000 * 3600 * 5 * i);
question.setCreatedDate(date);
question.setUserId(i + 1);
question.setTitle(String.format("TITLE{%d}", i));
question.setContent(String.format("Balaababalalalal Content %d", i));
questionDAO.addQuestion(question);
}
Assert.assertEquals("newpassword", userDAO.selectById(1).getPassword());
userDAO.deleteById(1);
Assert.assertNull(userDAO.selectById(1));
}
}
這樣就可以完成對資料庫的操作了。