1、快速開始
1.1、現有一張 User 表,其表結構如下
| id | name | age | emali |
|---|---|---|---|
| 1 | Jone | 18 | [email protected] |
| 2 | Jack | 20 | [email protected] |
| 3 | Tom | 28 | [email protected] |
| 4 | Sandy | 21 | [email protected] |
| 5 | Billie | 24 | [email protected] |
- SQL陳述句
DROP TABLE IF EXISTS user;
CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int DEFAULT NULL COMMENT '年齡',
`email` varchar(50) DEFAULT NULL COMMENT '郵箱',
`is_deleted` int NOT NULL DEFAULT '0' COMMENT '邏輯洗掉',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
DELETE FROM user;
INSERT INTO user (id, name, age, email,is_deleted) VALUES
(1, 'Jone', 18, '[email protected]',0),
(2, 'Jack', 20, '[email protected]',0),
(3, 'Tom', 28, '[email protected]',0),
(4, 'Sandy', 21, '[email protected]',0),
(5, 'Billie', 24, '[email protected]',0);
1.2、引入依賴
- mybatis-plus-boot-starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
1.3、配置資料庫連接,開啟控制臺SQL陳述句輸出
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://114.67.111.175:3306/test
username: wq
password: 123456
#開啟控制臺日志
mybatis-plus:
configuration:
#控制臺列印sql陳述句方便除錯sql陳述句執行錯誤
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#這個不在控制臺列印查詢結果,但是在log4j2中列印
#log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl
- 在 Spring Boot 啟動類中添加 @MapperScan 注解,掃描 Mapper 檔案夾:
@SpringBootApplication
@MapperScan("com.wanqi.mybatisplus.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
1.4、編碼
- 物體類User
package com.wanqi.mybatisplus.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
@TableName("user") //指定表名
public class User {
//type = IdType.AUTO自增欄位需要修改資料庫主鍵為自增
//value指定對應主鍵欄位名,type指定id生成策略(默認策略為雪花演算法)
@TableId(value = "https://www.cnblogs.com/wandaren/archive/2022/11/21/id", type = IdType.AUTO)
private Long id;
//value資料庫欄位值
@TableField(value = "https://www.cnblogs.com/wandaren/archive/2022/11/21/name")
private String name;
private Integer age;
private String email;
private Integer isDeleted;
public User(Long id, String name, Integer age, String email) {
this.id = id;
this.name = name;
this.age = age;
this.email = email;
}
public User(String name, Integer age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
public User() {
}
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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(Integer isDeleted) {
this.isDeleted = isDeleted;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
", isDeleted=" + isDeleted +
'}';
}
}
- 撰寫 Mapper 包下的 UserMapper介面
import com.wanqi.mybatisplus.pojo.User;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper extends BaseMapper<User> {
}
1.5、測驗使用
package com.wanqi.mybatisplus;
import com.wanqi.mybatisplus.mapper.UserMapper;
import com.wanqi.mybatisplus.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@SpringBootTest
class MybatisPlusApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect() {
System.out.println(("----- selectAll method test ------"));
userMapper.insert(new User( "古力娜扎", 18, "[email protected]"));
List<User> userList = userMapper.selectList(null);
userList.forEach(System.out::println);
}
}
2、批量操作
2.1、增加Service 層代碼
package com.wanqi.mybatisplus.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wanqi.mybatisplus.pojo.User;
/**
* @Description TODO
* @Version 1.0.0
* @Date 2022/9/1
* @Author wandaren
*/
public interface UserService extends IService<User> {
}
- 注意 UserServiceImpl 必須要繼承 MP 框架中的 ServiceImpl,不然要重寫很多方法,
package com.wanqi.mybatisplus.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wanqi.mybatisplus.mapper.UserMapper;
import com.wanqi.mybatisplus.pojo.User;
import org.springframework.stereotype.Service;
/**
* @Description TODO
* @Version 1.0.0
* @Date 2022/9/1
* @Author wandaren
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
implements UserService{
}
2.2、測驗使用
package com.wanqi.mybatisplus;
import com.wanqi.mybatisplus.mapper.UserMapper;
import com.wanqi.mybatisplus.pojo.User;
import com.wanqi.mybatisplus.service.UserServiceImpl;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@SpringBootTest
class MybatisPlusApplicationTests {
@Autowired
private UserServiceImpl userService;
@Test
void contextLoads() {
Collection<User> userList = new ArrayList<>();
userList.add(new User("hhh", 18, "[email protected]"));
userList.add(new User("sss", 18, "[email protected]"));
userList.add(new User("ddd", 18, "[email protected]"));
userService.saveBatch(userList);
System.out.println(userService.list());
}
}
3、Service CURD
3.1、save
// 插入一條記錄(選擇欄位,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量)
boolean saveBatch(Collection<T> entityList, int batchSize);

3.2、saveOrUpdate
// TableId 注解存在更新記錄,否插入一條記錄
boolean saveOrUpdate(T entity);
// 根據updateWrapper嘗試更新,否繼續執行saveOrUpdate(T)方法
boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);

3.3、remove
// 根據 entity 條件,洗掉記錄
boolean remove(Wrapper<T> queryWrapper);
// 根據 ID 洗掉
boolean removeById(Serializable id);
// 根據 columnMap 條件,洗掉記錄
boolean removeByMap(Map<String, Object> columnMap);
// 洗掉(根據ID 批量洗掉)
boolean removeByIds(Collection<? extends Serializable> idList);

3.4、update
// 根據 UpdateWrapper 條件,更新記錄 需要設定sqlset
boolean update(Wrapper<T> updateWrapper);
// 根據 whereWrapper 條件,更新記錄
boolean update(T updateEntity, Wrapper<T> whereWrapper);
// 根據 ID 選擇修改
boolean updateById(T entity);
// 根據ID 批量更新
boolean updateBatchById(Collection<T> entityList);
// 根據ID 批量更新
boolean updateBatchById(Collection<T> entityList, int batchSize);

3.5、get
// 根據 ID 查詢
T getById(Serializable id);
// 根據 Wrapper,查詢一條記錄,結果集,如果是多個會拋出例外,隨機取一條加上限制條件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);
// 根據 Wrapper,查詢一條記錄
T getOne(Wrapper<T> queryWrapper, boolean throwEx);
// 根據 Wrapper,查詢一條記錄
Map<String, Object> getMap(Wrapper<T> queryWrapper);
// 根據 Wrapper,查詢一條記錄
<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

3.6、List
// 查詢所有
List<T> list();
// 查詢串列
List<T> list(Wrapper<T> queryWrapper);
// 查詢(根據ID 批量查詢)
Collection<T> listByIds(Collection<? extends Serializable> idList);
// 查詢(根據 columnMap 條件)
Collection<T> listByMap(Map<String, Object> columnMap);
// 查詢所有串列
List<Map<String, Object>> listMaps();
// 查詢串列
List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);
// 查詢全部記錄
List<Object> listObjs();
// 查詢全部記錄
<V> List<V> listObjs(Function<? super Object, V> mapper);
// 根據 Wrapper 條件,查詢全部記錄
List<Object> listObjs(Wrapper<T> queryWrapper);
// 根據 Wrapper 條件,查詢全部記錄
<V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

3.7、page
// 無條件分頁查詢
IPage<T> page(IPage<T> page);
// 條件分頁查詢
IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);
// 無條件分頁查詢
IPage<Map<String, Object>> pageMaps(IPage<T> page);
// 條件分頁查詢
IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);

4、邏輯洗掉
- 方式一:使用注解TableLogic
// value邏輯未洗掉值,delval邏輯洗掉值
@TableLogic(value = "https://www.cnblogs.com/wandaren/archive/2022/11/21/0", delval = "1")
private Integer isDeleted;
- 方式二:使用全域配置
mybatis-plus:
global-config:
db-config:
logic-delete-field: isDeleted # 全域邏輯洗掉的物體欄位名
logic-delete-value: 1 # 邏輯已洗掉值(默認為 1)
logic-not-delete-value: 0 # 邏輯未洗掉值(默認為 0)
5、分頁
- 配置
package com.wanqi.mybatisplus.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Description TODO
* @Version 1.0.0
* @Date 2022/9/24
* @Author wandaren
*/
@Configuration
public class CustomMyBatisPlusConfig {
/**
* 分頁插件,一緩和二緩遵循mybatis的規則
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
// 設定請求的頁面大于最大頁后操作, true調回到首頁,false 繼續請求 默認false
// paginationInnerInterceptor.setOverflow(false);
// 設定最大單頁限制數量,默認 500 條,-1 不受限制
// paginationInnerInterceptor.setMaxLimit(500L);
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
}
- 測驗
@Test
void page() {
long l = System.currentTimeMillis();
Page<VoteRecord> page = new Page<>(99999, 20);
final Page<VoteRecord> voteRecordPage = voteRecordMapper.selectPage(page, null);
voteRecordPage.getRecords().forEach(System.out::println);
System.out.println(System.currentTimeMillis() -l);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/537679.html
標籤:其他
