下面整理的是mybatis-spring連接mysql的一種方式,在開發時遇到的一些問題,作爲筆記先記錄下來。
- Dao的mapper文件和映射文件名稱,一定要一致,否則在數據處理時,會提示綁定失敗,找不到文件錯誤
- properties文件中的配置,其中都是可以源碼屬性信息對應的,會在啓動時自動導入
- mapper 文件中需要加註解@Repository,否則在使用時會提示找不到相應的bean信息
- 單元測試時,需要加註解@SpringBootTest,否則雖然可以自動導入mapper變量,但是值爲null
先總結這些,後面有問題再作記錄
目前只是連接單個數據庫,有些實際場景會有多個數據庫連接操作,後面補充
項目的目錄結構:
0、POM文件依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo04</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo04</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<!--資源文件管理-->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
## 1、配置文件
配置文件中包括:數據連接信息和指定的映射文件
#數據庫相關配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/test?useSSL=true&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=test
spring.datasource.password=123456
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
mybatis.mapper-locations=classpath*:com/example/dao/mapping/*.xml
2、DAO文件
UserInfoMapper.java
package com.example.dao.mapper;
import com.example.dao.pojo.UserInfo;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface UserInfoMapper {
Integer selectCount();
List<UserInfo> selectUserList();
}
UserInfoMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.dao.mapper.UserInfoMapper">
<select id="selectCount" resultType="java.lang.Integer">
select count(1) from userinfo;
</select>
<select id="selectUserList" resultType="com.example.dao.pojo.UserInfo">
select * from userinfo;
</select>
</mapper>
實體類UserInfo
package com.example.dao.pojo;
public class UserInfo {
private int id;
private String username;
private Integer gender;
private String interest;
public UserInfo(int id, String username, Integer gender, String interest) {
this.id = id;
this.username = username;
this.gender = gender;
this.interest = interest;
}
public String getInterest() {
return interest;
}
public void setInterest(String interest) {
this.interest = interest;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getGender() {
return gender;
}
public void setGender(Integer gender) {
this.gender = gender;
}
@Override
public String toString() {
return "UserInfo{" +
"id=" + id +
", username='" + username + '\'' +
", gender=" + gender +
", interest='" + interest + '\'' +
'}';
}
}
3、單元測試
//由於是springboot項目,單元一定要記的添加該註解,否則在下面的自動注入時,變量爲空
@SpringBootTest
class Demo04ApplicationTest {
@Autowired
private UserInfoMapper userInfoMapper;
//@Autowired
//private UserEventMapper userEventMapper;
@Test
public void test() {
Integer num = userInfoMapper.selectCount();
System.out.println(num);
List<UserInfo> userInfos = userInfoMapper.selectUserList();
System.out.println(userInfos);
//Integer eventCount = userEventMapper.selectCount();
//System.out.println(eventCount);
}
}
輸出結果
2
[UserInfo{id=1, username='張三', gender=1, interest='學習'}, UserInfo{id=2, username='李四', gender=2, interest='旅遊'}]
1
先到這裏了,後面再加多數據連接操作!