日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)

發(fā)布時(shí)間:2023/12/8 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

條件構(gòu)造器

一般都是用service層的方法,因?yàn)楸萴apper層的全。十分重要:Wrapper?記住查看輸出的SQL進(jìn)行分析

相當(dāng)于創(chuàng)建一個(gè)構(gòu)造器對(duì)象,然后講需要查詢or更新的條件寫在里面,最后打包給mapper?or?service層的插入、更新方法

下圖是Wapper的子類,QueryWrapper和UpdateWrapper是一般的Wrapper,AbstractLambdaWrapper?是lambda語(yǔ)法糖的鏈?zhǔn)讲僮?#xff08;兩者選擇一種使用即可)

下圖是wrapper的條件方法,就不一一介紹了,下面舉了六個(gè)就基本例子?

1、測(cè)試一?

@Test public void testWrapper1() {//參數(shù)是一個(gè)wrapper ,條件構(gòu)造器,和剛才的map對(duì)比學(xué)習(xí)!//查詢name不為空,email不為空,age大于18的用戶QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.isNotNull("name").isNotNull("email").ge("age",18);List<User> userList = userMapper.selectList(wrapper);userList.forEach(System.out::println); }

測(cè)試二

@Test public void testWrapper2() {//查詢name=wsk的用戶QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("name","wsk");//查詢一個(gè)數(shù)據(jù)selectOne,若查詢出多個(gè)會(huì)報(bào)錯(cuò)//Expected one result (or null) to be returned by selectOne(), but found: *//若出現(xiàn)多個(gè)結(jié)果使用list或mapUser user = userMapper.selectOne(wrapper);//查詢一個(gè)數(shù)據(jù),若出現(xiàn)多個(gè)結(jié)果使用list或mapSystem.out.println(user); }

測(cè)試三

@Test public void testWrapper3() {//查詢age在10-20之間的用戶QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.between("age", 10, 20);//區(qū)間Integer count = userMapper.selectCount(wrapper);//輸出查詢的數(shù)量selectCountSystem.out.println(count); }

測(cè)試四

@Test public void testWrapper4() {//模糊查詢QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.notLike("name","s").likeRight("email","qq");//qq% 左和右?List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);maps.forEach(System.out::println); }

測(cè)試五

@Test public void testWrapper5() {//模糊查詢// SELECT id,name,age,email,version,deleted,create_time,update_time //FROM user //WHERE deleted=0 AND id IN //(select id from user where id<5)QueryWrapper<User> wrapper = new QueryWrapper<>();//id 在子查詢中查出來wrapper.inSql("id","select id from user where id<5");List<Object> objects = userMapper.selectObjs(wrapper);objects.forEach(System.out::println); }

測(cè)試六

@Test public void testWrapper6() {QueryWrapper<User> wrapper = new QueryWrapper<>();//通過id進(jìn)行降序排序wrapper.orderByDesc("id");List<User> userList = userMapper.selectList(wrapper);userList.forEach(System.out::println); }

CRUD接口

基本配置:

0、創(chuàng)建數(shù)據(jù)庫(kù)

DROP TABLE IF EXISTS user;CREATE TABLE user (id BIGINT(20) NOT NULL COMMENT '主鍵ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年齡',email VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱',version INT(10) NOT NULL DEFAULT 1 COMMIT '樂觀鎖版本號(hào)',DELETED INT(10) NOT NULL DEFAULT 0 COMMIT '邏輯刪除',CREATE_TIME DATE COMMIT '創(chuàng)建時(shí)間',modify_time DATE COMMIT '更新時(shí)間',PRIMARY KEY (id) );DELETE FROM user;INSERT INTO user (id, name, age, email) VALUES (1, '工藤新一','test1@baomidou.com'), (2, '毛利蘭','est2@baomidou.com'), (3, '柯南', 28, 'test3@baomidou.com'), (4, '灰原哀', 21, 'test4@baomidou.com'), (5, '工藤有希子', 24, 'test5@baomidou.com');

1、創(chuàng)建項(xiàng)目,導(dǎo)入依賴

<!--spring-boot--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--SpringBootTest--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--mysql 驅(qū)動(dòng)--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version></dependency><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency>

2、yaml

#設(shè)置開發(fā)環(huán)境 spring:datasource:username: rootpassword: 123456driver-class-name: com.p6spy.engine.spy.P6SpyDriverurl: jdbc:p6spy:mysql://localhost:3306/mybatis_plus?serverTimezone=UTC&useUnicode=true&characterEncoding=utf#配置日志 log-impl:日志實(shí)現(xiàn) mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3、創(chuàng)建實(shí)體類

@Data @AllArgsConstructor @NoArgsConstructor @TableName("user") public class User {@TableId(type = IdType.AUTO)Long id;String name;int age;String email;@Version//樂觀鎖version注解private Integer version;private Integer isDelete;@TableField(fill = FieldFill.INSERT)private Date cTime;@TableField(fill = FieldFill.INSERT_UPDATE)private Date upTime; }

4、寫Mapper

@Repository public interface UserMapper extends BaseMapper<User> {}

5、寫Service接口和實(shí)現(xiàn)類

//Service接口 public interface UserService extends IService<User> { //別忘了繼承這個(gè)父類}//實(shí)現(xiàn)類 @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { //記得繼承父類}

6、之后就可以測(cè)試了

Mapper CRUD接口

顧名思義這個(gè)只有mapper層對(duì)象才有的方法

Insert

寫數(shù)據(jù)庫(kù)的時(shí)候id設(shè)置了主鍵自增的話,插入的時(shí)候不需要加入id,因?yàn)镸P會(huì)自動(dòng)添加并且自增的。

注:數(shù)據(jù)庫(kù)寫了id自增的話,在實(shí)體類設(shè)置主鍵生成策略是沒用的,因?yàn)閿?shù)據(jù)庫(kù)設(shè)置了自增,數(shù)據(jù)庫(kù)優(yōu)先級(jí)高于代碼

@Test//測(cè)試插入 public void insertTest(){User user = new User();user.setName("wsk");user.setAge(18);user.setEmail("2803708553@qq.com");Integer result = userMapper.insert(user); //會(huì)幫我們自動(dòng)生成idSystem.out.println(result); //受影響的行數(shù)System.out.println(user); //通過日志發(fā)現(xiàn)id會(huì)自動(dòng)回填(id是由雪花算法生成的,在主鍵生成策略部分有講到) }

數(shù)據(jù)庫(kù)插入的id的默認(rèn)值為:全局的唯—id

Update

@Test//測(cè)試更新 public void updateTest(){User user = new User();user.setId(2L);//怎么改id??//通過條件自動(dòng)拼接動(dòng)態(tài)Sqluser.setName("root");user.setAge(12);user.setEmail("root@qq.com");int i = userMapper.updateById(user);//updateById,但是參數(shù)是個(gè)userSystem.out.println(i); }

Select

  • 通過id查詢單個(gè)用戶
@Test//通過id查詢單個(gè)用戶 public void testSelectById(){User user = userMapper.selectById(1L);System.out.println(user); }

  • 通過id查詢多個(gè)用戶
@Test//通過id查詢多個(gè)用戶 public void testSelectBatchIds(){List<User> users = userMapper.selectBatchIds(Arrays.asList(1L, 2L, 3L));users.forEach(System.out::println);//System.out.println(users); }

?

  • 條件查詢 通過map封裝
@Test//通過條件查詢之一 map(這里的map,相當(dāng)于where后面的 name="conan"等條件) public void testMap(){HashMap<String, Object> map = new HashMap<>();//自定義要查詢的map.put("name","www"); //查詢名字是www的數(shù)據(jù)map.put("name","111"); //查詢名字是111的數(shù)據(jù) 最后的結(jié)果是取兩者交集map.put("age",18);List<User> users = userMapper.selectByMap(map);users.forEach(System.out::println); }

?

Delete

基本的刪除任務(wù):

?

@Test public void testDeleteById(){userMapper.deleteById(1359507762519068681L); } @Test public void testDeleteBatchIds(){userMapper.deleteBatchIds(Arrays.asList(1359507762519068675L,1359507762519068676L)); } @Test public void testD(){HashMap<String, Object> map = new HashMap<>();map.put("age","18");map.put("name","lol");userMapper.deleteByMap(map); }

Service CRUD接口

顧名思義這是Service層才有的方法

Save

為了區(qū)分mapper層和service層的方法,所以service層的插入方法取名為save

@Test void test(){User user = new User();user.setName("Conan");user.setAge(18);user.setEmail("毛利偵探事務(wù)所");//插入單條數(shù)據(jù)userService.save(user);// 插入(批量)userService.saveBatch(Arrays.asList(user)); }

Remove

service層刪除方法取名為remove

@Testvoid test(){User user = new User();user.setName("Conan");user.setAge(18);user.setEmail("毛利偵探事務(wù)所");HashMap<String,Object> map = new HashMap<>();map.put("name","Conan");QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("name","毛利小五郎");userService.remove(wrapper); //根據(jù)條件構(gòu)造器刪除數(shù)據(jù)userService.removeById(16L); //根據(jù)id刪除數(shù)據(jù),也可以根據(jù)實(shí)體類對(duì)象刪除數(shù)據(jù)userService.removeByMap(map); //根據(jù)map的條件刪除記錄userService.removeBatchByIds(Arrays.asList(user)); //批量刪除 }

Update

@Testvoid test(){User user = new User();user.setName("Conan");user.setAge(18);user.setEmail("毛利偵探事務(wù)所");HashMap<String,Object> map = new HashMap<>();map.put("name","Conan");QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("name","毛利小五郎").ge("age",18);userService.update(wrapper); //根據(jù)條件構(gòu)造器更新userService.updateById(user); //根據(jù)傳入的實(shí)體類id確定需要更新的數(shù)據(jù),更新為傳入的實(shí)體類對(duì)象userService.updateBatchById(Arrays.asList(user)); //批量更新}

Get

該方法只能查詢一條數(shù)據(jù),所以不推薦。查詢用list方法

@Testvoid test(){User user = new User();user.setName("Conan");user.setAge(18);user.setEmail("毛利偵探事務(wù)所");HashMap<String,Object> map = new HashMap<>();map.put("name","Conan");QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("name","毛利小五郎").ge("age",18);userService.getById(12L); //根據(jù)id查詢一條數(shù)據(jù)userService.getMap(wrapper); //根據(jù)構(gòu)造器查詢一條數(shù)據(jù),返回Mapper集合}

List

查詢多條數(shù)據(jù)

@Test void test(){User user = new User();user.setName("Conan");user.setAge(18);user.setEmail("毛利偵探事務(wù)所");HashMap<String,Object> map = new HashMap<>();map.put("name","Conan");QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("name","毛利小五郎").ge("age",18);userService.list(); //查詢?nèi)繑?shù)據(jù)userService.listMaps(); //查詢?nèi)繑?shù)據(jù),以map形式返回userService.listByMap(map); //根據(jù)map查詢數(shù)據(jù)userService.listByIds(Arrays.asList(10L,15L)); //根據(jù)id查詢數(shù)據(jù) }

SaveOrUpdate

運(yùn)行邏輯:直接更新,更新0行的話;就select,查詢出來是0行;則就插入

有傳入id的情況會(huì)優(yōu)先更新,如果更新不了,則會(huì)插入新的數(shù)據(jù)

記得在實(shí)體類寫上@TableId!!!

@Test void test(){User user = new User();user.setName("Conan");user.setAge(18);user.setEmail("毛利偵探事務(wù)所");HashMap<String,Object> map = new HashMap<>();map.put("name","Conan");UpdateWrapper<User> wrapper = new UpdateWrapper<>();wrapper.eq("name","毛利小五郎").ge("age",18);userService.saveOrUpdate(user); //傳入的對(duì)象id存在則更新,否則插入新數(shù)據(jù)userService.saveOrUpdate(user,wrapper); //根據(jù)更新條件構(gòu)造器,更細(xì)數(shù)據(jù)userService.saveOrUpdateBatch(Arrays.asList(user)); //批量修改插入 }

Count

統(tǒng)計(jì)符合條件的數(shù)據(jù)的數(shù)量

@Testvoid test(){User user = new User();user.setName("Conan");user.setAge(18);user.setEmail("毛利偵探事務(wù)所");HashMap<String,Object> map = new HashMap<>();map.put("name","Conan");QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("name","毛利小五郎").ge("age",18);userService.count();userService.count();}

Chain

鏈?zhǔn)秸{(diào)用,可以不用條件構(gòu)造器完成 條件設(shè)置和增刪改查。推薦!因?yàn)閮?yōu)雅!

Query

@Test void test(){User user = new User();user.setName("Conan");user.setAge(18);user.setEmail("毛利偵探事務(wù)所");HashMap<String,Object> map = new HashMap<>();map.put("name","Conan");QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("name","毛利小五郎").ge("age",18);List<User> userList = userService.query().eq("name", "工藤新一").gt("age", 17).list();for(User user01: userList) {System.out.println(user);} }

Update

@Test void test(){User user = new User();user.setName("Conan");user.setAge(18);user.setEmail("毛利偵探事務(wù)所");HashMap<String,Object> map = new HashMap<>();map.put("name","Conan");QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("name","毛利小五郎").ge("age",18);userService.update().eq("name", "工藤新一").gt("age", 17).update(); }

總結(jié)

以上是生活随笔為你收集整理的MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。