热门标签 | 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条件构造器增删改查内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了使用FormData对象上传文件同时附带其他参数的方法。通过创建一个表单,将文件和参数添加到FormData对象中,然后使用ajax发送POST请求进行文件上传。在发送请求时,需要设置processData为false,告诉jquery不要处理发送的数据;同时设置contentType为false,告诉jquery不要设置content-Type请求头。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 查询单个functionquery(id){$.ajax({url:smallproductServlet,async:true,type:POST,data:{typ ... [详细]
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社区 版权所有