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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

條件構造器

一般都是用service層的方法,因為比mapper層的全。十分重要:Wrapper?記住查看輸出的SQL進行分析

相當于創建一個構造器對象,然后講需要查詢or更新的條件寫在里面,最后打包給mapper?or?service層的插入、更新方法

下圖是Wapper的子類,QueryWrapper和UpdateWrapper是一般的Wrapper,AbstractLambdaWrapper?是lambda語法糖的鏈式操作(兩者選擇一種使用即可)

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

1、測試一?

@Test public void testWrapper1() {//參數是一個wrapper ,條件構造器,和剛才的map對比學習!//查詢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); }

測試二

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

測試三

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

測試四

@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); }

測試五

@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); }

測試六

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

CRUD接口

基本配置:

0、創建數據庫

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 '樂觀鎖版本號',DELETED INT(10) NOT NULL DEFAULT 0 COMMIT '邏輯刪除',CREATE_TIME DATE COMMIT '創建時間',modify_time DATE COMMIT '更新時間',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、創建項目,導入依賴

<!--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 驅動--><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

#設置開發環境 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:日志實現 mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3、創建實體類

@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接口和實現類

//Service接口 public interface UserService extends IService<User> { //別忘了繼承這個父類}//實現類 @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { //記得繼承父類}

6、之后就可以測試了

Mapper CRUD接口

顧名思義這個只有mapper層對象才有的方法

Insert

寫數據庫的時候id設置了主鍵自增的話,插入的時候不需要加入id,因為MP會自動添加并且自增的。

注:數據庫寫了id自增的話,在實體類設置主鍵生成策略是沒用的,因為數據庫設置了自增,數據庫優先級高于代碼

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

數據庫插入的id的默認值為:全局的唯—id

Update

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

Select

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

  • 通過id查詢多個用戶
@Test//通過id查詢多個用戶 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,相當于where后面的 name="conan"等條件) public void testMap(){HashMap<String, Object> map = new HashMap<>();//自定義要查詢的map.put("name","www"); //查詢名字是www的數據map.put("name","111"); //查詢名字是111的數據 最后的結果是取兩者交集map.put("age",18);List<User> users = userMapper.selectByMap(map);users.forEach(System.out::println); }

?

Delete

基本的刪除任務:

?

@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

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

@Test void test(){User user = new User();user.setName("Conan");user.setAge(18);user.setEmail("毛利偵探事務所");//插入單條數據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("毛利偵探事務所");HashMap<String,Object> map = new HashMap<>();map.put("name","Conan");QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("name","毛利小五郎");userService.remove(wrapper); //根據條件構造器刪除數據userService.removeById(16L); //根據id刪除數據,也可以根據實體類對象刪除數據userService.removeByMap(map); //根據map的條件刪除記錄userService.removeBatchByIds(Arrays.asList(user)); //批量刪除 }

Update

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

Get

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

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

List

查詢多條數據

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

SaveOrUpdate

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

有傳入id的情況會優先更新,如果更新不了,則會插入新的數據

記得在實體類寫上@TableId!!!

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

Count

統計符合條件的數據的數量

@Testvoid test(){User user = new User();user.setName("Conan");user.setAge(18);user.setEmail("毛利偵探事務所");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

鏈式調用,可以不用條件構造器完成 條件設置和增刪改查。推薦!因為優雅!

Query

@Test void test(){User user = new User();user.setName("Conan");user.setAge(18);user.setEmail("毛利偵探事務所");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("毛利偵探事務所");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(); }

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。