SpringBoot 集成 MyBatis
創建項目
首先創建一個 springboot集成mybatis
的 Maven
- WebApp
項目;
默認的項目結構是這樣的:
本着 約定大於配置 的原則,我們要修改成 springboot 標準項目結構:
友情提示:
java 目錄建完後要右鍵
->Mark Dictory As
->Sources Root
resources 目錄建完後要右鍵
->Mark Dictory As
->Resources Root
test.java 目錄建完後要右鍵
->Mark Dictory As
->Test Sources Root
test.resources 目錄建完後要右鍵
->Mark Dictory As
->Test Resources Root
test.java
和 test.resources
用不到可以不創建。
Application.java
在引入完依賴以後再寫。
1.引入依賴
首先 繼承springboot父項目、 引入web支持、lombook的依賴。
這些依賴的最新版都可以在這個網站查到:MavenRepository
<!--繼承父項目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<!--引入web支持包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入lombook-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
mybatis-spring-boot-starter 依賴
然後引入 mybatis-spring-boot-starter
的依賴,可以在這個網站查詢最新的依賴:mybatis-spring-boot-starter 依賴
說明:由於 springboot 整合 mybatis 版本中默認依賴 mybatis,因此不需要額外引入 mybatis 版本,否則會出現衝突。
<!--整合mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
建立入口類 Application
:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
完整的 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yusael</groupId>
<artifactId>springboot集成mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>springboot集成mybatis Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!--繼承父項目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<dependencies>
<!--引入web支持包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入lombook-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
<!--整合mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
<build>
<finalName>springboot集成mybatis</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
2.配置文件
修改配置文件 application.properties
;
server.servlet.context-path=/sm
數據庫配置文件:
#指定連接池類型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#指定驅動
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#指定url
spring.datasource.url=jdbc:mysql://localhost:3306/sm
#指定用戶名
spring.datasource.username=root
#指定密碼
spring.datasource.password=1234
加入mybatis配置
mybatis 的配置:
#指定mapper配置文件位置
mybatis.mapper-locations=classpath:/com/yusael/mapper/*.xml
#指定起別名來的類
mybatis.type-aliases-package=com.yusael.entity
在入口類 Application
中添加 @MapperScan
@SpringBootApplication
@MapperScan("com.yusael.dao")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
完整的配置文件
server.servlet.context-path=/sm
#指定連接池類型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#指定驅動
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#指定url
spring.datasource.url=jdbc:mysql://localhost:3306/sm
#指定用戶名
spring.datasource.username=root
#指定密碼
spring.datasource.password=1234
#指定mapper配置文件位置
mybatis.mapper-locations=classpath:/com/yusael/mapper/*.xml
#指定起別名來的類
mybatis.type-aliases-package=com.yusael.entity
3. 數據庫建表
在 sm
數據庫下建立 t_user
表:
CREATE TABLE `t_user` (
`id` varchar(100) NOT NULL,
`name` varchar(100) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`bir` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4. 開發實體類
在 java.com.yusael.entity
包下創建 User
類;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {
private String id;
private String name;
private Integer age;
private Date bir;
}
5. 開發DAO接口以及Mapper
在 java.com.yusael.dao
包下創建 UserDAO
類;
在 resources.com.yusael.mapper
下創建 UserDAOMapper
public interface UserDAO {
void save(User user);
List<User> findAll();
}
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yusael.dao.UserDao">
<!--save-->
<insert id="save" parameterType="User">
insert into t_user values (#{id}, #{name}, #{age}, #{bir})
</insert>
<!--findAll-->
<select id="findAll" resultType="User">
select id,name,age,bir from t_user
</select>
</mapper>
6. 開發Service以及實現
在 java.com.yusael.service
包下創建 UserService
類、UserServiceImpl
類;
// 接口
public interface UserService {
void save(User user);
List<User> findAll();
}
// 實現
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDAO;
@Override
public void save(User user) {
user.setId(UUID.randomUUID().toString());
userDAO.save(user);
}
@Override
public List<User> findAll() {
return userDAO.findAll();
}
}
7. 編寫控制器進行測試
在 com.yusael.controller
包下創建 UserController
類;
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("findAll")
public List<User> findAll() {
return userService.findAll();
}
@GetMapping("save")
public void save(User user) {
userService.save(user);
}
}
完整的項目結構
開始測試
運行項目;
瀏覽器輸入 localhost:8080/sm/user/save?name=zhangsan&age=25&bir=2012/12/12
來保存一條記錄。回車,頁面看不到什麼效果;
瀏覽器再次輸入 http://localhost:8080/sm/user/findAll
來查詢所有記錄;
可以成功的查詢出剛剛添加的記錄:
[
{
"id": "fb91da88-8a54-4f1b-83e7-09d2217ae2cb",
"name": "zhangsan",
"age": 25,
"bir": "2012-12-11T16:00:00.000+0000"
}
]
嘗試多保存幾條數據:
localhost:8080/sm/user/save?name=lisi&age=21&bir=2011/11/11
localhost:8080/sm/user/save?name=wangwu&age=18&bir=2014/12/11
localhost:8080/sm/user/save?name=zhaoliu&age=19&bir=2011/6/11
再次查詢所有記錄: http://localhost:8080/sm/user/findAll