MyBatis Plus是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,使用MyBatis Plus時,不會影響原來Mybatis方式的使用。 SpringBoot+MyBatis Plus環境搭建 SQL腳本: CREATE TABLE ( int(11) NOT ...
MyBatis-Plus是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,使用MyBatis-Plus時,不會影響原來Mybatis方式的使用。
SpringBoot+MyBatis-Plus環境搭建
SQL腳本:
CREATE TABLE `tb_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`real_name` varchar(20) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
`phone` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO tb_user (real_name,email,phone) VALUES ('小花','[email protected]','18711111111');
INSERT INTO tb_user (real_name,email,phone) VALUES ('小菊','[email protected]','18322222222');
INSERT INTO tb_user (real_name,email,phone) VALUES ('小熊','[email protected]','18133333333');
INSERT INTO tb_user (real_name,email,phone) VALUES ('小虎','[email protected]','18344444444');
INSERT INTO tb_user (real_name,email,phone) VALUES ('小豬','[email protected]','18723232323');
添加依賴如下(不需要額外添加Mybatis的依賴):
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
application.yml:
spring:
datasource:
url: jdbc:mysql://localhost/plusdb?useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
#在控制台列印SQL語句,com.cf.mpdm.mapper為存放mapper介面的包名
logging:
level:
com.cf.mpdm.mapper: debug
主程式類:
package com.cf.mpdm;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//指定掃描mapper介面的包路徑
@MapperScan("com.cf.mpdm.mapper")
@SpringBootApplication
public class MpdmApplication {
public static void main(String[] args) {
SpringApplication.run(MpdmApplication.class, args);
}
}
UserMapper介面:
package com.cf.mpdm.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cf.mpdm.entity.User;
public interface UserMapper extends BaseMapper<User> {
}
UserMapper介面需要繼承BaseMapper介面,並且指定泛型為表對應的實體類。
實體類User:
package com.cf.mpdm.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
//表名tb_user帶tb_首碼,和實體類類名User不匹配,所以需要使用@TableName指定表名
@TableName("tb_user")
public class User {
//指定主鍵生成策略為自動增長
@TableId(type = IdType.AUTO)
private Integer id;
private String realName;
private String email;
private String phone;
//get/set ...
}
MyBatis-Plus預設使用下劃線命名到駝峰命名的映射規則來處理表和實體類類名以及表的列名和實體類欄位的映射。當預設規則不適用時,則需要通過額外的配置來處理映射,如可以使用註解@TableName來指定表名,使用@TableId和@TableField來指定主鍵列和非主鍵列的列名。
@TableId還可以指定主鍵的生成策略,預設生成策略為NONE,表示無狀態,未設置主鍵類型。其他策略詳見IdType。
當多數表具有相同的首碼或者相同的主鍵生成策略時,可以使用全局配置指定表首碼和主鍵策略,而無需一個個手動添加註解,當然少數特殊的還是可以通過註解的方式來指定,application.yml:
mybatis-plus:
global-config:
db-config:
# 指定主鍵生成策略為自動增長
idType: AUTO
# 指定表首碼
tablePrefix: tb_
基本的CRUD操作
package com.cf.mpdm;
import com.cf.mpdm.entity.User;
import com.cf.mpdm.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SpringBootTest
class MpdmApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void testInsert(){
//INSERT INTO tb_user ( real_name, email, phone ) VALUES ( ?, ?, ? )
User user = new User();
user.setRealName("小蘭");
user.setEmail("[email protected]");
user.setPhone("18700000000");
userMapper.insert(user);
//插入成功時,預設會將主鍵的值回寫到實體類中去
System.out.println(user.getId());
}
@Test
public void testDelete(){
//根據主鍵ID刪除記錄
//DELETE FROM tb_user WHERE id=?
userMapper.deleteById(6);
//根據id列表批量刪除記錄
//DELETE FROM tb_user WHERE id IN ( ? , ? )
/*List<Integer> idList = new ArrayList<>();
idList.add(12);
idList.add(13);
userMapper.deleteBatchIds(idList);*/
//根據條件來刪除記錄,如根據real_name來刪除記錄,columnMap的Key必須為表中的欄位名,而不是實體類中的欄位名。
//DELETE FROM tb_user WHERE real_name = ?
/*Map<String, Object> columnMap = new HashMap<>();
columnMap.put("real_name", "小花");
userMapper.deleteByMap(columnMap);*/
}
@Test
public void testUpdate(){
//根據主鍵id更新記錄
//UPDATE tb_user SET real_name=? WHERE id=?
User user = new User();
user.setId(2);
user.setRealName("歐皓辰");
userMapper.updateById(user);
}
@Test
public void testSelect(){
//根據主鍵id查詢記錄
//SELECT id,real_name,email,phone FROM tb_user WHERE id=?
/*User user = userMapper.selectById(3);
System.out.println(user.getRealName());*/
//根據id列表查詢對應記錄
//SELECT id,real_name,email,phone FROM tb_user WHERE id IN ( ? , ? )
/*List<Integer> idList = new ArrayList<>();
idList.add(3);
idList.add(4);
List<User> userList = userMapper.selectBatchIds(idList);
System.out.println(userList.size());*/
//根據條件來查詢對應記錄
//SELECT id,real_name,email,phone FROM tb_user WHERE real_name = ?
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("real_name", "小蘭");
List<User> userList = userMapper.selectByMap(columnMap);
System.out.println(userList.size());
}
}
關於使用mapper.xml的一些配置
mybatis-plus:
#指定Mapper所對應的XML文件位置
mapperLocations: classpath:mapper/*.xml
#指定別名包掃描路徑,通過該屬性可以給包中的類註冊別名,註冊後在 Mapper 對應的 XML 文件中可以直接使用類名,而不用使用全限定的類名
typeAliasesPackage: com.cf.mpdm.entity