龙空技术网

通用增删改查 Mybatis-Plus

高级java奶爸 65

前言:

眼前小伙伴们对“分页显示所有性别为男的记录信息”大体比较关注,兄弟们都需要学习一些“分页显示所有性别为男的记录信息”的相关资讯。那么小编同时在网上网罗了一些关于“分页显示所有性别为男的记录信息””的相关文章,希望姐妹们能喜欢,姐妹们一起来学习一下吧!

推荐一个工具Mybatis-Plus,特别好使,告别繁琐。

Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

特性无侵入:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作预防Sql注入:内置Sql注入剥离器,有效预防Sql注入攻击通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题支持热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!)支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )支持关键词自动转义:支持数据库关键词(order、key......)自动转义,还可自定义关键词内置分页插件:基于Mybatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询内置性能分析插件:可输出Sql语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作

简单示例(传统)

假设我们已存在一张 User 表,且已有对应的实体类 User,实现 User 表的 CRUD 操作我们需要做什么呢?

/** User 对应的 Mapper 接口 */ public interface UserMapper extends BaseMapper<User> { }

以上就是您所需的所有操作,甚至不需要您创建XML文件,我们如何使用它呢?

基本CRUD

// 初始化 影响行数 int result = 0; // 初始化 User 对象 User user = new User(); // 插入 User (插入成功会自动回写主键到实体类) user.setName("Tom"); result = userMapper.insert(user); // 更新 User user.setAge(18); result = userMapper.updateById(user); // 查询 User User exampleUser = userMapper.selectById(user.getId()); // 查询姓名为‘张三’的所有用户记录 List<User> userList = userMapper.selectList( new EntityWrapper<User>().eq("name", "张三") ); // 删除 User result = userMapper.deleteById(user.getId());

以上是基本的 CRUD 操作,当然我们可用的 API 远不止这几个,我们提供了多达 17 个方法给大家使用,可以极其方便的实现单一、批量、分页等操作,接下来我们就来看看 MP 是如何使用分页的。

分页操作

// 分页查询 10 条姓名为‘张三’的用户记录 List<User> userList = userMapper.selectPage( new Page<User>(1, 10), new EntityWrapper<User>().eq("name", "张三") );

如您所见,我们仅仅需要继承一个 BaseMapper 即可实现大部分单表 CRUD 操作,极大的减少的开发负担。

有人也许会质疑:这难道不是通用 Mapper 么?别急,咱们接着往下看。

现有一个需求,我们需要分页查询 User 表中,年龄在18~50之间性别为男且姓名为张三的所有用户,这时候我们该如何实现上述需求呢?

传统做法是 Mapper 中定义一个方法,然后在 Mapper 对应的 XML 中填写对应的 SELECT 语句,且我们还要集成分页,实现以上一个简单的需求,往往需要我们做很多重复单调的工作,普通的通用 Mapper 能够解决这类痛点么?

用 MP 的方式打开以上需求

// 分页查询 10 条姓名为‘张三’、性别为男,且年龄在18至50之间的用户记录 List<User> userList = userMapper.selectPage( new Page<User>(1, 10), new EntityWrapper<User>().eq("name", "张三") .eq("sex", 0) .between("age", "18", "50") );

以上操作,等价于

SELECT * FROM sys_user WHERE (name='张三' AND sex=0 AND age BETWEEN '18' AND '50') LIMIT 0,10

Mybatis-Plus 通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者 Condition(与EW类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担,能够有效提高开发效率。

简单示例(ActiveRecord)

ActiveRecord 一直广受动态语言( PHP 、 Ruby 等)的喜爱,而 Java 作为准静态语言,对于 ActiveRecord 往往只能感叹其优雅,所以我们也在 AR 道路上进行了一定的探索,喜欢大家能够喜欢,也同时欢迎大家反馈意见与建议。

我们如何使用 AR 模式?

@TableName("sys_user") // 注解指定表名 public class User extends Model<User> { ... // fields ... // getter and setter /** 指定主键 */  @Override protected Serializable pkVal() { return this.id; } }

我们仅仅需要继承 Model 类且实现主键指定方法 即可让实体开启 AR 之旅,开启 AR 之路后,我们如何使用它呢?

基本CRUD

// 初始化 成功标识 boolean result = false; // 初始化 User User user = new User(); // 保存 User user.setName("Tom"); result = user.insert(); // 更新 User user.setAge(18); result = user.updateById(); // 查询 User User exampleUser = t1.selectById(); // 查询姓名为‘张三’的所有用户记录 List<User> userList1 = user.selectList( new EntityWrapper<User>().eq("name", "张三") ); // 删除 User result = t2.deleteById();

分页操作

// 分页查询 10 条姓名为‘张三’的用户记录 List<User> userList = user.selectPage( new Page<User>(1, 10), new EntityWrapper<User>().eq("name", "张三") ).getRecords();

复杂操作

// 分页查询 10 条姓名为‘张三’、性别为男,且年龄在18至50之间的用户记录 List<User> userList = user.selectPage( new Page<User>(1, 10), new EntityWrapper<User>().eq("name", "张三") .eq("sex", 0) .between("age", "18", "50") ).getRecords();

AR 模式提供了一种更加便捷的方式实现 CRUD 操作,其本质还是调用的 Mybatis 对应的方法,类似于语法糖。

通用 CRUD

简单介绍

TODO

实体无注解化设置,表字段如下规则,主键叫 id 可无注解大写小如下规则。

1、驼峰命名 【 无需处理 】

2、全局配置: 下划线命名 dbColumnUnderline 设置 true , 大写 isCapitalMode 设置 true

注解说明

表名注解 @TableName

com.baomidou.mybatisplus.annotations.TableName

值描述value表名( 默认空 )resultMapxml 字段映射 resultMap ID

主键注解 @TableId

com.baomidou.mybatisplus.annotations.TableId

值描述value字段值(驼峰命名方式,该值可无)type主键 ID 策略类型( 默认 INPUT ,全局开启的是 ID_WORKER )

暂不支持组合主键

字段注解 @TableField

com.baomidou.mybatisplus.annotations.TableField

值描述value字段值(驼峰命名方式,该值可无)el详看注释说明exist是否为数据库表字段( 默认 true 存在,false 不存在 )strategy字段验证 ( 默认 非 null 判断,查看 com.baomidou.mybatisplus.enums.FieldStrategy )fill字段填充标记 ( 配合自动填充使用 )

序列主键策略 注解 @KeySequence

com.baomidou.mybatisplus.annotations.KeySequence

值描述value序列名clazzid的类型

乐观锁标记注解 @Version

com.baomidou.mybatisplus.annotations.Version

排除非表字段、查看文档常见问题部分!

以上都是简单介绍,取自官方文档。

官网:

标签: #分页显示所有性别为男的记录信息