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

网友投稿 788 2023-01-21

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

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内容http://例子,该例子自定义了一个根据id的查询方法,无视了删除标志

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

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

where id = #{id}

增删改查

新增(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() 方法也可以接收一个条件构造器作为参数

构造器的使用

条件构造器包含 QueryWrapper 和 LambdaQueryWrapper 两个类。

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

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:移动应用开发专业的课程(移动应用开发专业课程设置)
下一篇:快应用开发(快应用开发车机快应用)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~