温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Mybatis Plus使用条件构造器增删改查功能的示例分析

发布时间:2021-05-12 11:43:33 来源:亿速云 阅读:213 作者:小新 栏目:开发技术

这篇文章主要介绍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<TImageCourse> {
}

业务层实现

/**
 * 图文课程管理Service业务层处理
 */
@Service
public class TImageCourseServiceImpl extends ServiceImpl<TImageCourseMapper, TImageCourse> 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<TImageCourse> {
}

**mapper.xml **

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

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.mapper.TRuralInfoMapper">

    <resultMap type="TRuralInfo" id="RuralInfoResult">
        <id     property="id"             column="id"           />
        <result property="cityName"       column="city_name"    />
        <result property="countyName"     column="county_name"  />
        <result property="townName"       column="town_name"    />
        <result property="villageName"    column="village_name" />
        <result property="checkCode"      column="check_code"   />
        <result property="parentLevel"    column="parent_level" />
        <result property="parentId"       column="parent_id"    />
        <result property="delFlag"        column="del_flag"     />
        <result property="createBy"       column="create_by"    />
        <result property="createTime"     column="create_time"  />
        <result property="updateBy"       column="update_by"    />
        <result property="updateTime"     column="update_time"  />
    </resultMap>

    <sql id="selectRuralInfoVo">
        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
    </sql>

    <select id="getRuralInfoById" parameterType="Long" resultMap="RuralInfoResult">
        <include refid="selectRuralInfoVo"/>
        where id = #{id}
    </select>
</mapper>

增删改查


新增(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<TCenterPoint> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TCenterPoint::getPoint, 10.0);

// 2、静态方法创建 Wrappers.<>lambdaQuery()
// 构造器方法多为链式编程 可连写
Wrappers.<TCenterPoint>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小于等于<=
betweenBETWEEN 值1 AND 值2
likeLIKE ‘%值%'
notLikeNOT LIKE ‘%值%'
likeLeftLIKE ‘%值' ;likeRight同理
isNull字段 IS NULL;
orderByAsc排序:ORDER BY 字段, … ASC;orderByDesc同理

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

OR

or(Consumer<Param> consumer)
or(boolean condition, Consumer<Param> consumer)

OR 嵌套,例如

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

AND

and(Consumer<Param> consumer)
and(boolean condition, Consumer<Param> 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使用条件构造器增删改查功能的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI