前言
本人的MyBatis系列教程均採用當下流行的SpringBoot + MyBatis配置文件版 + 阿里Druid連接池的組合進行講解,其他組合方式不在本教程討論範圍內。此外,需要學習者有一定的SpringBoot基礎,如對此不太瞭解,可移步本人教程進行SpringBoot的學習。另外,需要對SQL語句有一定的瞭解,不要求掌握的多好,但基本的增刪改查還是要會的。
注:本教程不採用可視化Web界面進行演示,只寫HTTP接口,接口遵循RESTful格式。
0.環境說明
SDK版本:1.8
MySQL版本:5.7
開發工具:IntelliJ IDEA
接口調試工具:Postman
演示數據庫:study-mybatis(請自行創建)
請運行以下sql腳本導入本篇教程所用數據表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`name` varchar(100) DEFAULT NULL COMMENT '姓名',
`phone` varchar(20) DEFAULT NULL COMMENT '手機號',
`birthday` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '生日',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
BEGIN;
INSERT INTO `user` VALUES (1, '小明', '18888888888', '2020-03-16 14:31:21');
INSERT INTO `user` VALUES (2, '小紅', '177777777777', '2020-03-16 14:34:58');
INSERT INTO `user` VALUES (3, '小王', '16666666666', '2020-03-16 14:35:11');
INSERT INTO `user` VALUES (4, '小張', '15555555555', '2020-03-16 14:37:25');
INSERT INTO `user` VALUES (5, '小劉', '14444444444', '2020-03-16 14:48:08');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
1.創建SpringBoot工程
1.File–>New–>Project—>Spring Initializer,在這裏選擇一下SDK版本
2.填寫項目信息
3.添加依賴
4.選擇項目目錄,並確定新建完成,新建完成後,需要import一下maven依賴。項目目錄如下:
5.Maven依賴如下:
<dependencies>
<!--web啓動器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis啓動器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<!--mysql連接器-->
<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>
至此,SpringBoot工程創建完畢。
2.目錄結構創建
需要創建以下目錄,用於存放dao層、service層、controller層、配置類代碼。
序號 | 名稱 | 作用 |
---|---|---|
1 | entities | 存放實體類 |
2 | config | 存放配置類 |
3 | mapper | 存放MyBatis映射接口(DAO層代碼) |
4 | service | 存放service層接口代碼 |
5 | service/impl | 存放service層接口的具體實現 |
6 | controller | 存放控制層代碼 |
7 | resource/mapper | 存放MyBatis xml映射文件代碼 |
此外,在resource目錄下創建一個application.yml文件,用來代替原來的application.properties文件。
創建好的目錄結構如下:
3.創建實體類
在entities包下創建類
package com.yky.springboot.entities;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private Long id;
private String name;
private String phone;
private Date birthday;
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 String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", phone='" + phone + '\'' +
", birthday=" + birthday +
'}';
}
}
4.創建映射接口
在mapper包下創建接口
package com.yky.springboot.mapper;
import com.yky.springboot.entities.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface UserMapper {
User selectById(@Param("id") Long id);
}
目前在此接口中只定義了一個方法,該方法的作用是根據id查找User對象
5.編寫映射配置文件
在resource/mapper目錄下創建UserMapper.xml文件
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace對應Mapper接口的全類名,這樣就可以自動匹配上-->
<mapper namespace="com.yky.springboot.mapper.UserMapper">
<!--
id:此id對應Mapper接口的方法名
resultType:填寫對應的實體類的全類名,這樣纔可以把返回的結果自動放到User對象中
標籤體內直接寫sql語句,#{id}對應Mapper接口中的 @Param("id") Long id ,採用#{@Param註解取的變量別名}方式來拿到傳入的參數的值
-->
<select id="selectById" resultType="com.yky.springboot.entities.User">
SELECT * FROM `user` WHERE id = #{id}
</select>
</mapper>
6.配置數據源和映射文件路徑
在application.yml文件中添加以下代碼:
spring:
datasource:
username: root
password: 123
#mysql8以上的驅動包需要指定時區
url: jdbc:mysql://127.0.0.1:23306/study-mybatis?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
#配置mybatis映射文件路徑
mapper-locations: classpath:mapper/*.xml
7.測試
採用IDEA代碼自動生成功能生成UserMapper的測試類
添加@SpringBootTest註解,並編寫測試方法
@SpringBootTest
class UserMapperTest {
@Autowired
UserMapper userMapper;
@Test
void selectById() {
User user = userMapper.selectById(1L);
System.out.println(user);
}
}
運行結果: