Mybatis_Plus中常用的IService方法

打印 上一主题 下一主题

主题 1735|帖子 1735|积分 5205

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
查询

方法名 查询记录总数

  1.     /**
  2.      * 查询总记录数
  3.      *
  4.      * @see Wrappers#emptyWrapper()
  5.      */
  6.     default long count() {
  7.         return count(Wrappers.emptyWrapper());
  8.     }
复制代码
方法实现
  1. @Test
  2.     public void testGetCount(){
  3.         long count = userService.count();
  4.         System.out.println("总记录数:" + count);
  5.     }
复制代码
实现的sql
  1. ==>  Preparing: SELECT COUNT( * ) FROM t_user WHERE is_deleted=0
  2. ==> Parameters:
  3. <==    Columns: COUNT( * )
  4. <==        Row: 12
  5. <==      Total: 1
  6. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@329a1f8d]
  7. 总记录数:12
复制代码
根据ID查询

  1.     /**
  2.      * 根据 ID 查询
  3.      *
  4.      * @param id 主键ID
  5.      */
  6.     default T getById(Serializable id) {
  7.         return getBaseMapper().selectById(id);
  8.     }
复制代码
方法实现
  1. @Test
  2.     public void testGetById() {
  3.         // 假设这里有一个有效的用户 ID,你可以根据实际情况修改
  4.         Long validUserId = 6L;
  5.         User user = userService.getById(validUserId);
  6.         System.out.println("查询到的用户信息: " + user);
  7.     }
复制代码
sql的实现
  1. ==>  Preparing: SELECT uid AS id,name,age,email,is_deleted,sex FROM t_user WHERE uid=? AND is_deleted=0
  2. ==> Parameters: 6(Long)
  3. <==    Columns: id, name, age, email, is_deleted, sex
  4. <==        Row: 6, dadaw, 18, user@qcby.com, 0, null
  5. <==      Total: 1
  6. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@474c9131]
  7. 查询到的用户信息: User{id=6, name='dadaw', age=18, email='user@qcby.com', isDeleted=0, sex=null}
复制代码
批量查询

  1.     /**
  2.      * 查询(根据ID 批量查询)
  3.      *
  4.      * @param idList 主键ID列表
  5.      */
  6.     default List<T> listByIds(Collection<? extends Serializable> idList) {
  7.         return getBaseMapper().selectBatchIds(idList);
  8.     }
复制代码
方法实现
  1. @Test
  2.     public void testListByIds() {
  3.         // 准备要查询的主键 ID 列表
  4.         List<Long> idList = Arrays.asList(1L, 2L); // 假设这些是有效的主键值
  5.         // 调用 listByIds 方法查询用户列表
  6.         List<User> userList = userService.listByIds(idList);
  7.         // 输出结果
  8.         System.out.println("根据 ID 列表查询到的用户列表:");
  9.         userList.forEach(System.out::println);
  10.     }
复制代码
sql的实现
  1. ==>  Preparing: SELECT uid AS id,name,age,email,is_deleted,sex FROM t_user WHERE uid IN ( ? , ? ) AND is_deleted=0
  2. ==> Parameters: 1(Long), 2(Long)
  3. <==      Total: 0
  4. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c0bbc9f]
  5. 根据 ID 列表查询到的用户列表:
复制代码
根据条件举行查询

  1.     /**
  2.      * 查询(根据 columnMap 条件)
  3.      *
  4.      * @param columnMap 表字段 map 对象
  5.      */
  6.     default List<T> listByMap(Map<String, Object> columnMap) {
  7.         return getBaseMapper().selectByMap(columnMap);
  8.     }
复制代码
实现方法
  1. @Test
  2.     public void testListByMap() {
  3.         // 准备查询条件
  4.         Map<String, Object> columnMap = new HashMap<>();
  5.         columnMap.put("age", 22);
  6.         columnMap.put("name", "admin");
  7.         // 调用 listByMap 方法查询用户列表
  8.         List<User> userList = userService.listByMap(columnMap);
  9.         // 输出结果
  10.         System.out.println("根据 Map 条件查询到的用户列表:");
  11.         userList.forEach(System.out::println);
  12.     }
复制代码
sql
  1. ==>  Preparing: SELECT uid AS id,name,age,email,is_deleted,sex FROM t_user WHERE name = ? AND age = ? AND is_deleted=0
  2. ==> Parameters: admin(String), 22(Integer)
  3. <==      Total: 0
  4. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3cb8c8ce]
  5. 根据 Map 条件查询到的用户列表:
复制代码
查询并封装Map

  1.     /**
  2.      * 根据 Wrapper,查询一条记录
  3.      *
  4.      * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  5.      */
  6.     Map<String, Object> getMap(Wrapper<T> queryWrapper);
复制代码
实现
  1.     @Test
  2.     public void testGetMap() {
  3.         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  4.         queryWrapper.eq("name", "admin"); // 假设数据库中有 name 为 admin 的记录
  5.         Map<String, Object> map = userService.getMap(queryWrapper);
  6.         System.out.println("查询到的 Map 信息: " + map);
  7.     }
复制代码
 sql
  1. ==>  Preparing: SELECT uid,name,age,email,is_deleted,sex FROM t_user WHERE is_deleted=0 AND (name = ?)
  2. ==> Parameters: admin(String)
  3. <==    Columns: uid, name, age, email, is_deleted, sex
  4. <==        Row: 4, admin, 25, user@qcby.com, 0, null
  5. <==      Total: 1
  6. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2af4129d]
  7. 查询到的 Map 信息: {uid=4, is_deleted=false, name=admin, age=25, email=user@qcby.com}
复制代码
 

根据Wraper查询一条记录

  1.     /**
  2.      * 根据 Wrapper,查询一条记录 <br/>
  3.      * <p>结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")</p>
  4.      *
  5.      * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  6.      */
  7.     default T getOne(Wrapper<T> queryWrapper) {
  8.         return getOne(queryWrapper, true);
  9.     }
复制代码
方法实现
  1. @Test
  2.     public void testGetOne() {
  3.         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  4.         queryWrapper.eq("name", "admin"); // 假设数据库中有 name 为 admin 的记录
  5.         User user = userService.getOne(queryWrapper);
  6.         System.out.println("查询到的用户信息: " + user);
  7.     }
复制代码
sql执行
  1. ==>  Preparing: SELECT uid AS id,name,age,email,is_deleted,sex FROM t_user WHERE is_deleted=0 AND (name = ?)
  2. ==> Parameters: admin(String)
  3. <==    Columns: id, name, age, email, is_deleted, sex
  4. <==        Row: 4, admin, 25, user@qcby.com, 0, null
  5. <==      Total: 1
  6. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b289ac9]
  7. 查询到的用户信息: User{id=4, name='admin', age=25, email='user@qcby.com', isDeleted=0, sex=null}
复制代码
 查询一条,有多个抛出非常

  1.     /**
  2.      * 根据 Wrapper,查询一条记录
  3.      *
  4.      * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  5.      * @param throwEx      有多个 result 是否抛出异常
  6.      */
  7.     T getOne(Wrapper<T> queryWrapper, boolean throwEx);
复制代码
实现
  1. @Test
  2.     public void testGetOneWithThrowEx() {
  3.         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  4.         queryWrapper.eq("name", "admin"); // 假设数据库中有 name 为 admin 的记录
  5.         User user = userService.getOne(queryWrapper, true);
  6.         System.out.println("查询到的用户信息: " + user);
  7.     }
复制代码
 sql
  1. ==>  Preparing: SELECT uid,name,age,email,is_deleted,sex FROM t_user WHERE is_deleted=0 AND (name = ?)
  2. ==> Parameters: admin(String)
  3. <==    Columns: uid, name, age, email, is_deleted, sex
  4. <==        Row: 4, admin, 25, user@qcby.com, 0, null
  5. <==      Total: 1
  6. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@36c0d0bd]
  7. 查询到的用户信息: User{uid=4, name='admin', age=25, email='user@qcby.com', isDeleted=0, sex=null}
复制代码
查询全部

  1.     /**
  2.      * 查询所有
  3.      *
  4.      * @see Wrappers#emptyWrapper()
  5.      */
  6.     default List<T> list() {
  7.         return list(Wrappers.emptyWrapper());
  8.     }
复制代码
实现方法
  1. @Test
  2.     public void testList() {
  3.         List<User> userList = userService.list();
  4.         System.out.println("查询到的用户列表信息: " + userList);
  5.     }
复制代码
sql
  1. ==>  Preparing: SELECT uid AS id,name,age,email,is_deleted,sex FROM t_user WHERE is_deleted=0
  2. ==> Parameters:
  3. <==    Columns: id, name, age, email, is_deleted, sex
  4. <==        Row: 3, Tom, 35, new_email@example.com, 0, null
  5. <==        Row: 4, admin, 25, user@qcby.com, 0, null
  6. <==        Row: 5, Billie, 24, test5@baomidou.com, 0, null
  7. <==        Row: 6, dadaw, 18, user@qcby.com, 0, null
  8. <==        Row: 7, bygnyn, 43, frefr@cweew.com, 0, null
  9. <==        Row: 10, 更新后的新用户, 29, updatednewuser@example.com, 0, null
  10. <==        Row: 13, szy0, 20, null, 0, null
  11. <==        Row: 14, szy1, 21, null, 0, null
  12. <==        Row: 15, szy2, 22, null, 0, null
  13. <==        Row: 16, szy3, 23, null, 0, null
  14. <==        Row: 17, szy4, 24, null, 0, null
  15. <==        Row: 18, 张三, 23, zhangsan@qcby.com, 0, null
  16. <==      Total: 12
  17. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@407873d3]
  18. 查询到的用户列表信息: [User{id=3, name='Tom', age=35, email='new_email@example.com', isDeleted=0, sex=null}, User{id=4, name='admin', age=25, email='user@qcby.com', isDeleted=0, sex=null}, User{id=5, name='Billie', age=24, email='test5@baomidou.com', isDeleted=0, sex=null}, User{id=6, name='dadaw', age=18, email='user@qcby.com', isDeleted=0, sex=null}, User{id=7, name='bygnyn', age=43, email='frefr@cweew.com', isDeleted=0, sex=null}, User{id=10, name='更新后的新用户', age=29, email='updatednewuser@example.com', isDeleted=0, sex=null}, User{id=13, name='szy0', age=20, email='null', isDeleted=0, sex=null}, User{id=14, name='szy1', age=21, email='null', isDeleted=0, sex=null}, User{id=15, name='szy2', age=22, email='null', isDeleted=0, sex=null}, User{id=16, name='szy3', age=23, email='null', isDeleted=0, sex=null}, User{id=17, name='szy4', age=24, email='null', isDeleted=0, sex=null}, User{id=18, name='张三', age=23, email='zhangsan@qcby.com', isDeleted=0, sex=null}]
复制代码
链式查询

  1.     /**
  2.      * 链式查询 普通
  3.      *
  4.      * @return QueryWrapper 的包装类
  5.      */
  6.     default QueryChainWrapper<T> query() {
  7.         return ChainWrappers.queryChain(getBaseMapper());
  8.     }
复制代码
实现方法
  1. //链式查询
  2.     @Test
  3.     public void testQuery() {
  4.         QueryChainWrapper<User> queryChainWrapper = userService.query();
  5.         List<User> userList = queryChainWrapper.list();
  6.         System.out.println("链式查询结果: " + userList);
  7.     }
复制代码
sql
  1. ==>  Preparing: SELECT uid AS id,name,age,email,is_deleted,sex FROM t_user WHERE is_deleted=0
  2. ==> Parameters:
  3. <==    Columns: id, name, age, email, is_deleted, sex
  4. <==        Row: 3, Tom, 35, new_email@example.com, 0, null
  5. <==        Row: 4, admin, 25, user@qcby.com, 0, null
  6. <==        Row: 5, Billie, 24, test5@baomidou.com, 0, null
  7. <==        Row: 6, dadaw, 18, user@qcby.com, 0, null
  8. <==        Row: 7, bygnyn, 43, frefr@cweew.com, 0, null
  9. <==        Row: 10, 更新后的新用户, 29, updatednewuser@example.com, 0, null
  10. <==        Row: 13, szy0, 20, null, 0, null
  11. <==        Row: 14, szy1, 21, null, 0, null
  12. <==        Row: 15, szy2, 22, null, 0, null
  13. <==        Row: 16, szy3, 23, null, 0, null
  14. <==        Row: 17, szy4, 24, null, 0, null
  15. <==        Row: 18, 张三, 23, zhangsan@qcby.com, 0, null
  16. <==      Total: 12
  17. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4743a322]
  18. 链式查询结果: [User{id=3, name='Tom', age=35, email='new_email@example.com', isDeleted=0, sex=null}, User{id=4, name='admin', age=25, email='user@qcby.com', isDeleted=0, sex=null}, User{id=5, name='Billie', age=24, email='test5@baomidou.com', isDeleted=0, sex=null}, User{id=6, name='dadaw', age=18, email='user@qcby.com', isDeleted=0, sex=null}, User{id=7, name='bygnyn', age=43, email='frefr@cweew.com', isDeleted=0, sex=null}, User{id=10, name='更新后的新用户', age=29, email='updatednewuser@example.com', isDeleted=0, sex=null}, User{id=13, name='szy0', age=20, email='null', isDeleted=0, sex=null}, User{id=14, name='szy1', age=21, email='null', isDeleted=0, sex=null}, User{id=15, name='szy2', age=22, email='null', isDeleted=0, sex=null}, User{id=16, name='szy3', age=23, email='null', isDeleted=0, sex=null}, User{id=17, name='szy4', age=24, email='null', isDeleted=0, sex=null}, User{id=18, name='张三', age=23, email='zhangsan@qcby.com', isDeleted=0, sex=null}]
复制代码
链式查询Wrapper

  1.     /**
  2.      * 链式查询 lambda 式
  3.      * <p>注意:不支持 Kotlin </p>
  4.      *
  5.      * @return LambdaQueryWrapper 的包装类
  6.      */
  7.     default LambdaQueryChainWrapper<T> lambdaQuery() {
  8.         return ChainWrappers.lambdaQueryChain(getBaseMapper());
  9.     }
复制代码
实现方法
  1. @Test
  2.     public void testLambdaQuery() {
  3.         LambdaQueryChainWrapper<User> lambdaQueryChainWrapper = userService.lambdaQuery();
  4.         List<User> userList = lambdaQueryChainWrapper.list();
  5.         System.out.println("Lambda 链式查询结果: " + userList);
  6.     }
复制代码
sql
  1. =>  Preparing: SELECT uid AS id,name,age,email,is_deleted,sex FROM t_user WHERE is_deleted=0
  2. ==> Parameters:
  3. <==    Columns: id, name, age, email, is_deleted, sex
  4. <==        Row: 3, Tom, 35, new_email@example.com, 0, null
  5. <==        Row: 4, admin, 25, user@qcby.com, 0, null
  6. <==        Row: 5, Billie, 24, test5@baomidou.com, 0, null
  7. <==        Row: 6, dadaw, 18, user@qcby.com, 0, null
  8. <==        Row: 7, bygnyn, 43, frefr@cweew.com, 0, null
  9. <==        Row: 10, 更新后的新用户, 29, updatednewuser@example.com, 0, null
  10. <==        Row: 13, szy0, 20, null, 0, null
  11. <==        Row: 14, szy1, 21, null, 0, null
  12. <==        Row: 15, szy2, 22, null, 0, null
  13. <==        Row: 16, szy3, 23, null, 0, null
  14. <==        Row: 17, szy4, 24, null, 0, null
  15. <==        Row: 18, 张三, 23, zhangsan@qcby.com, 0, null
  16. <==      Total: 12
  17. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4743a322]
  18. Lambda 链式查询结果: [User{id=3, name='Tom', age=35, email='new_email@example.com', isDeleted=0, sex=null}, User{id=4, name='admin', age=25, email='user@qcby.com', isDeleted=0, sex=null}, User{id=5, name='Billie', age=24, email='test5@baomidou.com', isDeleted=0, sex=null}, User{id=6, name='dadaw', age=18, email='user@qcby.com', isDeleted=0, sex=null}, User{id=7, name='bygnyn', age=43, email='frefr@cweew.com', isDeleted=0, sex=null}, User{id=10, name='更新后的新用户', age=29, email='updatednewuser@example.com', isDeleted=0, sex=null}, User{id=13, name='szy0', age=20, email='null', isDeleted=0, sex=null}, User{id=14, name='szy1', age=21, email='null', isDeleted=0, sex=null}, User{id=15, name='szy2', age=22, email='null', isDeleted=0, sex=null}, User{id=16, name='szy3', age=23, email='null', isDeleted=0, sex=null}, User{id=17, name='szy4', age=24, email='null', isDeleted=0, sex=null}, User{id=18, name='张三', age=23, email='zhangsan@qcby.com', isDeleted=0, sex=null}]
复制代码


批量插入

  1.     /**
  2.      * 插入(批量)
  3.      *
  4.      * @param entityList 实体对象集合
  5.      */
  6.     @Transactional(rollbackFor = Exception.class)
  7.     default boolean saveBatch(Collection<T> entityList) {
  8.         return saveBatch(entityList, DEFAULT_BATCH_SIZE);
  9.     }
复制代码
方法实现
  1. @Test
  2.     public void testSaveBatch(){
  3.         // SQL长度有限制,海量数据插入单条SQL无法实行,
  4.         // 因此MP将批量插入放在了通用Service中实现,而不是通用Mapper
  5.         ArrayList<User> users = new ArrayList<>();
  6.         for (int i = 0; i < 5; i++) {
  7.             User user = new User();
  8.             user.setName("szy" + i);
  9.             user.setAge(20 + i);
  10.             users.add(user);
  11.         }
  12.         //SQL:INSERT INTO t_user ( username, age ) VALUES ( ?, ? )
  13.         userService.saveBatch(users);
  14.     }
复制代码
sql
  1. Preparing: INSERT INTO t_user ( name, age ) VALUES ( ?, ? )
  2. ==> Parameters: szy0(String), 20(Integer)
  3. ==> Parameters: szy1(String), 21(Integer)
  4. ==> Parameters: szy2(String), 22(Integer)
  5. ==> Parameters: szy3(String), 23(Integer)
  6. ==> Parameters: szy4(String), 24(Integer)
复制代码
插入单条数据
 


  1.     /**
  2.      * 插入一条记录(选择字段,策略插入)
  3.      *
  4.      * @param entity 实体对象
  5.      */
  6.     default boolean save(T entity) {
  7.         return SqlHelper.retBool(getBaseMapper().insert(entity));
  8.     }
复制代码
方法实现
  1.     @Test
  2. //    插入一条数据
  3.     public void addUser(){
  4.             User user = new User();
  5.             user.setName("老王");
  6.             user.setAge(45);
  7.         userService.save(user);
  8.     }
复制代码
sql
  1. ==>  Preparing: INSERT INTO t_user ( name, age ) VALUES ( ?, ? )
  2. ==> Parameters: 老王(String), 45(Integer)
  3. <==    Updates: 1
复制代码
批量插入修改

  1.     /**
  2.      * 批量修改插入
  3.      *
  4.      * @param entityList 实体对象集合
  5.      * @param batchSize  每次的数量
  6.      */
  7.     boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
复制代码
方法使用
 
  1. @Test
  2.     public void updateBatch(){
  3.         ArrayList<User> users = new ArrayList<>();
  4.         // 修改已有的用户数据
  5.         User user1 = new User();
  6.         user1.setName("Updated Name 1");
  7.         user1.setAge(25);
  8.         users.add(user1);
  9.         User user2 = new User();
  10.         user2.setName("Updated Name 2");
  11.         user2.setAge(22);
  12.         users.add(user2);
  13.         userService.saveOrUpdateBatch(users,5);
  14.     }
复制代码
sql
  1. ==>  Preparing: INSERT INTO t_user ( name, age ) VALUES ( ?, ? )
  2. ==> Parameters: Updated Name 1(String), 25(Integer)
  3. ==> Parameters: Updated Name 2(String), 22(Integer)
复制代码
假如有修改,没有则插入

  1.     /**
  2.      * TableId 注解存在更新记录,否插入一条记录
  3.      *
  4.      * @param entity 实体对象
  5.      */
  6.     boolean saveOrUpdate(T entity);
复制代码
实现
  1. @Test
  2.     public void testSaveOrUpdateEntity() {
  3.         // 测试插入操作,创建一个没有设置 id 的 User 对象
  4.         User insertUser = new User(null, "新用户", 28, "newuser@example.com");
  5.         boolean insertResult = userService.saveOrUpdate(insertUser);
  6.         System.out.println("插入新用户操作是否成功:" + insertResult);
  7.         // 测试更新操作,创建一个设置了 id 的 User 对象(假设该 id 存在于数据库中)
  8.         Long newUid = 7L;
  9.         // 先设置 insertUser 的 uid
  10.         insertUser.setUid(newUid);
  11.         // 使用 insertUser 修改后的属性创建新对象
  12.         User updateUser = new User(insertUser.getUid(), "更新后的新用户", 29, "updatednewuser@example.com");
  13.         boolean updateResult = userService.saveOrUpdate(updateUser);
  14.         System.out.println("更新用户操作是否成功:" + updateResult);
  15.     }
复制代码
sql
  1. INSERT INTO t_user ( name, age, email ) VALUES ( ?, ?, ? )
  2. ==> Parameters: 新用户(String), 28(Integer), newuser@example.com(String)
  3. <==    Updates: 1
  4. Preparing: SELECT uid,name,age,email,is_deleted,sex FROM t_user WHERE uid=? AND is_deleted=0
  5. ==> Parameters: 7(Long)
  6. <==    Columns: uid, name, age, email, is_deleted, sex
  7. <==        Row: 7, 更新后的新用户, 29, updatednewuser@example.com, 0, null
  8. <==      Total: 1
复制代码


根据Warpper更改

  1.     /**
  2.      * 根据 whereEntity 条件,更新记录
  3.      *
  4.      * @param entity        实体对象
  5.      * @param updateWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper}
  6.      */
  7.     default boolean update(T entity, Wrapper<T> updateWrapper) {
  8.         return SqlHelper.retBool(getBaseMapper().update(entity, updateWrapper));
  9.     }
复制代码
实现
  1. @Test
  2.     public void testUpdateWithWrapper() {
  3.         // 创建更新对象
  4.         User user = new User();
  5.         user.setAge(35);
  6.         user.setEmail("new_email@example.com");
  7.         // 创建更新条件
  8.         UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
  9.         updateWrapper.eq("name", "Tom");
  10.         // 调用 update 方法
  11.         boolean result = userService.update(user, updateWrapper);
  12.         // 输出结果
  13.         System.out.println("更新操作是否成功:" + result);
  14.         assertEquals(true, result);
  15.     }
复制代码
sql
  1. ==>  Preparing: UPDATE t_user SET age=?, email=? WHERE is_deleted=0 AND (name = ?)
  2. ==> Parameters: 35(Integer), new_email@example.com(String), Tom(String)
  3. <==    Updates: 1
  4. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@76db540e]
  5. 更新操作是否成功:true
复制代码
链式修改

  1.     /**
  2.      * 更新数据
  3.      *
  4.      * @return 是否成功
  5.      */
  6.     default boolean update() {
  7.         return update(null);
  8.     }
复制代码
实现
  1. //Lambda 链式更新
  2.     @Test
  3.     public void testLambdaUpdate() {
  4.         LambdaUpdateChainWrapper<User> lambdaUpdateChainWrapper = userService.lambdaUpdate();
  5.         boolean result = lambdaUpdateChainWrapper.set(User::getAge, 25).eq(User::getName, "admin").update();
  6.         System.out.println("Lambda 链式更新操作是否成功: " + result);
  7.     }
复制代码
sql
  1. ==>  Preparing: UPDATE t_user SET age=? WHERE is_deleted=0 AND (name = ?)
  2. ==> Parameters: 25(Integer), admin(String)
  3. <==    Updates: 1
  4. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@760245e1]
  5. Lambda 链式更新操作是否成功: true
复制代码
实现
  1. //Lambda 链式更新
  2.     @Test
  3.     public void testLambdaUpdate() {
  4.         LambdaUpdateChainWrapper<User> lambdaUpdateChainWrapper = userService.lambdaUpdate();
  5.         boolean result = lambdaUpdateChainWrapper.set(User::getAge, 25).eq(User::getName, "admin").update();
  6.         System.out.println("Lambda 链式更新操作是否成功: " + result);
  7.     }
复制代码
 sql
  1. ==>  Preparing: UPDATE t_user SET age=? WHERE is_deleted=0 AND (name = ?)
  2. ==> Parameters: 25(Integer), admin(String)
  3. <==    Updates: 1
  4. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4487c0c2]
  5. Lambda 链式更新操作是否成功: true
复制代码


删除多个字段

  1.     /**
  2.      * 删除(根据ID 批量删除)
  3.      *
  4.      * @param list 主键ID或实体列表
  5.      */
  6.     default boolean removeByIds(Collection<?> list) {
  7.         if (CollectionUtils.isEmpty(list)) {
  8.             return false;
  9.         }
  10.         return SqlHelper.retBool(getBaseMapper().deleteBatchIds(list));
  11.     }
复制代码
实现方法
  1. //删除多个id字段
  2.     @Test
  3.     public void removeByIds(){
  4.         List<Long> idList = Arrays.asList(1903624308889583619L, 1903624308889583618L, 1903624308776337410L);
  5.         userService.removeByIds(idList);
  6.     }
复制代码
sql
  1. ==>  Preparing: UPDATE t_user SET is_deleted=1 WHERE uid IN ( ? , ? , ? ) AND is_deleted=0
  2. ==> Parameters: 1903624308889583619(Long), 1903624308889583618(Long), 1903624308776337410(Long)
  3. <==    Updates: 0
复制代码
删除单个字段

  1.     /**
  2.      * 根据 ID 删除
  3.      *
  4.      * @param id 主键ID
  5.      */
  6.     default boolean removeById(Serializable id) {
  7.         return SqlHelper.retBool(getBaseMapper().deleteById(id));
  8.     }
复制代码
实现
  1.     @Test
  2.     public void removeById(){
  3.         boolean result = userService.removeById(28L);
  4.         //assertEquals 方法来判定 result 是否为 true。要是 result 的值为 true,测试就会通过;
  5.         // 若为 false,测试则会失败,同时会抛出 AssertionError 异常。
  6.         assertEquals(true, result);
  7.     }
复制代码
sql
  1. ==>  Preparing: UPDATE t_user SET is_deleted=1 WHERE uid=? AND is_deleted=0
  2. ==> Parameters: 28(Long)
  3. <==    Updates: 1
复制代码
根据实体删除

  1.     /**
  2.      * 根据实体(ID)删除
  3.      *
  4.      * @param entity 实体
  5.      * @since 3.4.4
  6.      */
  7.     default boolean removeById(T entity) {
  8.         return SqlHelper.retBool(getBaseMapper().deleteById(entity));
  9.     }
复制代码
实现
  1. @Test
  2.     public void testRemoveByIdWithEntity() {
  3.         // 创建一个 User 实体对象
  4.         User user = new User();
  5.         user.setUid(24L);
  6.         // 调用 removeById 方法
  7.         boolean result = userService.removeById(user);
  8.         // 验证结果
  9.         assertEquals(true, result);
  10.     }
复制代码
sql
  1. ==>  Preparing: UPDATE t_user SET is_deleted=1 WHERE uid=? AND is_deleted=0
  2. ==> Parameters: 24(Long)
  3. <==    Updates: 1
复制代码
根据queryWrapper条件删除

  1.     /**
  2.      * 根据 entity 条件,删除记录
  3.      *
  4.      * @param queryWrapper 实体包装类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  5.      */
  6.     default boolean remove(Wrapper<T> queryWrapper) {
  7.         return SqlHelper.retBool(getBaseMapper().delete(queryWrapper));
  8.     }
复制代码
实现方法
  1.     @Test
  2.     public void testRemoveByWrapper() {
  3.         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  4.         queryWrapper.gt("age", 25).eq("email", "test@example.com");
  5.         boolean result = userService.remove(queryWrapper);
  6.         System.out.println("删除操作是否成功:" + result);
  7.         assertEquals(true, result);
  8.     }
复制代码
sql
  1. ==>  Preparing: UPDATE t_user SET is_deleted=1 WHERE is_deleted=0 AND (age > ? AND email = ?)
  2. ==> Parameters: 25(Integer), test@example.com(String)
  3. <==    Updates: 0
  4. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2042ccce]
  5. 删除操作是否成功:false
复制代码
逻辑删除

true是逻辑删除,false实体删除
  1.     /**
  2.      * 根据 ID 删除
  3.      *
  4.      * @param id      主键(类型必须与实体类型字段保持一致)
  5.      * @param useFill 是否启用填充(为true的情况,会将入参转换实体进行delete删除)
  6.      * @return 删除结果
  7.      * @since 3.5.0
  8.      */
  9.     default boolean removeById(Serializable id, boolean useFill) {
  10.         throw new UnsupportedOperationException("不支持的方法!");
  11.     }
复制代码
分页

  1.     /**
  2.      * 翻页查询
  3.      *
  4.      * @param page         翻页对象
  5.      * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
  6.      */
  7.     default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper) {
  8.         return getBaseMapper().selectPage(page, queryWrapper);
  9.     }
复制代码
实现
  1.     @Test
  2.     public void testPageWithWrapper() {
  3.         // 创建分页对象,查询第 1 页,每页 2 条记录
  4.         Page<User> page = new Page<>(1, 2);
  5.         // 创建查询条件
  6.         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  7.         queryWrapper.gt("age", 20);
  8.         IPage<User> userPage = userService.page(page, queryWrapper);
  9.         System.out.println("总记录数: " + userPage.getTotal());
  10.         System.out.println("当前页记录: " + userPage.getRecords());
  11.     }
复制代码
sql
  1. ==> Parameters: 20(Integer), 2(Long)
  2. <==    Columns: uid, name, age, email, is_deleted, sex
  3. <==        Row: 3, Tom, 35, new_email@example.com, 0, null
  4. <==        Row: 4, admin, 25, user@qcby.com, 0, null
  5. <==      Total: 2
  6. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5e1fc2aa]
  7. 总记录数: 17
  8. 当前页记录: [User{uid=3, name='Tom', age=35, email='new_email@example.com', isDeleted=0, sex=null}, User{uid=4, name='admin', age=25, email='user@qcby.com', isDeleted=0, sex=null}]
复制代码
获取mapper

  1. //获取mapper
  2.     @Test
  3.     public void testGetBaseMapper() {
  4.         BaseMapper<User> baseMapper = userService.getBaseMapper();
  5.         System.out.println("获取到的 BaseMapper: " + baseMapper);
  6.     }
  7. //获取cl
复制代码
获取class

  1.     @Test
  2.     public void testGetEntityClass() {
  3.         Class<User> entityClass = userService.getEntityClass();
  4.         System.out.println("获取到的实体类 Class: " + entityClass);
  5.     }
复制代码

 



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表