热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

MybatisPlus使用条件构造器增删改查功能的实现方法

这篇文章主要介绍了Mybatis-Plus使用条件构造器增删改查,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

java后端层级结构


Controller 接口层

接口层比较好理解,它是面向web网络的接口,使用http格式去调用

/**
 * 图文课程管理Controller
 */
@RestController
@RequestMapping("/driver/imageCourse")
public class TImageCourseController extends BaseController {
    
    @Autowired
    private ITImageCourseService tImageCourseService;
    @Autowired
    private TImageCourseMapper tImageCourseMapper;
    
    // 具体接口...
}

Service 业务层

在实际应用中,更复杂的逻辑应该写在 Service 业务层方法中,在业务方法中再调用数据层方法,实现从 接口层-业务层-数据层 的链路调用关系,提高代码的可读性

/**
 * 图文课程管理Service接口
 */
public interface ITImageCourseService extends IService {
}

业务层实现

/**
 * 图文课程管理Service业务层处理
 */
@Service
public class TImageCourseServiceImpl extends ServiceImpl implements ITImageCourseService {
    @Autowired
    private TImageCourseMapper tImageCourseMapper;

}

ServiceImpl 类实现了 IService 接口中的方法;ServiceImpl 中的方法,本质上是对 BaseMapper 方法的封装,同时也增加了一些 BaseMapper 类中没有的特性,例如常用的 list()count() 方法

// Service方法调用了Mapper方法 只是将insert()返回转换成了布尔值
@Override
public boolean save(T entity) {
    return retBool(baseMapper.insert(entity));
}

Mapper 数据层

继承 BaseMapper 接口后,无需编写 mapper.xml 文件,即可获得CRUD功能;例如,insert()deleteById()updateById()selectById() 等方法

如果手动编写数据层的sql,BaseMapper实现者即对应xml中的sql方法

/**
 * 图文课程管理Mapper接口
 */
public interface TImageCourseMapper extends BaseMapper {
}

**mapper.xml **

xml内容例子,该例子自定义了一个根据id的查询方法,无视了删除标志

<&#63;xml version="1.0" encoding="UTF-8" &#63;>



    
        
        
        
        
        
        
        
        
        
        
        
        
        
    

    
        select t_rural_info.id, city_name, county_name, town_name, village_name, check_code, parent_level, parent_id,
        t_rural_info.del_flag, t_rural_info.create_by, t_rural_info.create_time, t_rural_info.update_by, t_rural_info.update_time
        from t_rural_info
    

    

增删改查


新增(C)

使用 mapper 对象的 insert() 方法新增一条记录,成果后会将数据库的id返回给实体

/**
 * 新增图文课程管理
 */
@PostMapping
public AjaxResult add(@RequestBody TImageCourse tImageCourse)
{    
    ...
    return toAjax(tImageCourseMapper.insert(tImageCourse));
}

saveBatch

service 类中提供了 saveBatch() 方法,可实现批量插入,该方法是支持事务

saveOrUpdate

service 类中提供了 saveOrUpdate() 方法,如果id为空则调用 save() 方法保存,反之则调用 updateById() 方法更新

查询(R)

查询多数要借助条件构造器使用才有意义,实现更灵活的查询;

查询实体

常用的方法有 .getOne()getById() ;

.getOne() 接收一个条件构造器作为参数

getById() 根据id进行查询实体

查询集合

常用的查询方法包括 .list()

.list() 方法也可以接收一个条件构造器作为参数

构造器的使用

条件构造器包含 QueryWrapperLambdaQueryWrapper 两个类。

LambdaQueryWrapper 为函数式编程的书写习惯,与 QueryWrapper 表达的意义相同,优点是简化了代码。

此处以 LambdaQueryWrapper 的使用为例,常用的三种方法:

// 1、直接用new创建
// 创建对象的方式会更加灵活,可配合 if()...else 达到更灵活的sql拼接
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TCenterPoint::getPoint, 10.0);

// 2、静态方法创建 Wrappers.<>lambdaQuery()
// 构造器方法多为链式编程 可连写
Wrappers.lambdaQuery().eq(TCenterPoint::getPoint, 10.0)

// 3、静态方法创建 Wrappers.query() 
// query可接受对象 字段不为null则自动拼接.eq()方法
Wrappers.query(tUserDetail)

构造器方法

/**
 * 源码
 * @param condition 执行条件 可省略
 * @param column    字段
 * @param val       值
 */
eq(boolean condition, R column, Object val)
eq 相等 =
ne 不等于 !=
gt 大于 >
ge 大于等于 >=
lt 小于 <
le 小于等于 <=
between BETWEEN 值1 AND 值2
like LIKE ‘%值%'
notLike NOT LIKE ‘%值%'
likeLeft LIKE ‘%值' ; likeRight同理
isNull 字段 IS NULL;
orderByAsc 排序:ORDER BY 字段, … ASC; orderByDesc同理

在sql中使用and和or,逻辑只需写在where中即可,在ORM框架中较为不好理解,总之,其结果是实现一个查询条件和多个条件并列的关系

OR

or(Consumer consumer)
or(boolean condition, Consumer consumer)

OR 嵌套,例如

// or (name = '李白' and status <> '活着')
or(i -> i.eq("name", "李白").ne("status", "活着"))

AND

and(Consumer consumer)
and(boolean condition, Consumer consumer)

AND 嵌套,例如

// and (name = '李白' and status <> '活着')
and(i -> i.eq("name", "李白").ne("status", "活着"))

修改(U)

使用 mapper 对象的 updateById() 方法更新实体,只有字段内容不为空,才会触发字段内容的修改

/**
 * 修改图文课程管理
 */
@PutMapping
public AjaxResult edit(@RequestBody TImageCourse tImageCourse)
{
    return toAjax(tImageCourseMapper.updateById(tImageCourse));
}

删除(D)

删除常用的方法是根据id进行删除,使用 mapper 对象的 deleteById ,框架也支持批量删除的操作 deleteBatchIds

/**
 * 删除图文课程管理
 */
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids) {
    return toAjax(tImageCourseMapper.deleteBatchIds(Arrays.asList(ids)));
}

到此这篇关于Mybatis-Plus使用条件构造器增删改查的文章就介绍到这了,更多相关Mybatis Plus条件构造器增删改查内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 本文详细介绍了如何手动编写兼容IE的Ajax函数,以及探讨了跨域请求的实现方法和原理,包括JSONP和服务器端设置HTTP头部等技术。 ... [详细]
  • BME框架使用中的典型问题解析
    本文主要探讨了BME框架在实际应用中遇到的一些常见问题,包括查询条件为空、动态参数处理及分页查询等场景的解决方案。 ... [详细]
  • 本文详细探讨了 Java 中 Daemon 线程的特点及其应用场景,并深入分析了 Random 类的源代码,帮助开发者更好地理解和使用这些核心组件。 ... [详细]
  • 本文档整理了公司内部常用的网站链接和重要资源路径,包括部门周报、内控报销系统、邮件服务等,同时提供了相关数据库的登录信息。 ... [详细]
  • 本文介绍了jQuery的基本使用方法及AJAX技术的基础知识,包括选择器、事件处理、DOM操作、动画效果等核心功能,以及如何利用AJAX实现页面的部分刷新。 ... [详细]
  • 深入理解Hibernate延迟加载机制
    本文探讨了Hibernate框架中的延迟加载(懒加载)特性,分析其对程序性能的影响及实现原理,同时提供了具体的代码示例来说明如何配置和使用延迟加载。 ... [详细]
  • 睿智汇海教育致力于培养杰出的IT专业人才,确保学员在就业市场上具备竞争力,助其实现职业成功。我们提供的C#/.Net/Asp.Net培训课程,旨在通过系统的教学和丰富的实践机会,帮助学员掌握最新的技术知识。 ... [详细]
  • MyBatis入门指南
    本文详细介绍了MyBatis的基础知识,包括如何整合日志框架(如log4j和logback),使用外部JDBC文件,getMapper()方法的应用,以及别名设置等技巧。 ... [详细]
  • 本文探讨了如何利用 Application 对象在 PHP 应用程序中共享数据,特别是在多用户环境中保持数据的一致性和安全性。文章还介绍了 Application 对象的基本结构、方法和事件,并提供了实际应用示例。 ... [详细]
  • django项目中使用手机号登录
    本文使用聚合数据的短信接口,需要先获取到申请接口的appkey和模板id项目目录下创建ubtils文件夹,定义返回随机验证码和调取短信接口的函数function.py文件se ... [详细]
  • 现在的新手程序猿,动不动就是框架,就连外面培训的也是框架,我就问一句,没了框架是不是就啥也不会了 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • This article explores the process of integrating Promises into Ext Ajax calls for a more functional programming approach, along with detailed steps on testing these asynchronous operations. ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
author-avatar
小屁孩你不懂cl
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有