有天上飞的概念,就要有落地的实现html
- 概念十遍不如代码一遍,朋友,但愿你把文中全部的代码案例都敲一遍
- 先赞后看,养成习惯
SpringBoot 图文教程系列文章目录java
在使用Mybatis进行项目开发的时候,最繁琐的事情就是实体类,dao接口,mapper.xml文件的编写,几乎每一个表都须要对应写一套,而且大部分的工做量都在最基本的增删改查上。若是表中的字段进行了修改,那么实体类,mapper文件甚至dao接口都要进行修改。git
在以前的文章中介绍了 MBG(Mybatis 代码生成器) 的使用,今天带来更进一步的简化Mybatis开发的工具 MybatisPlus,后续还会有 通用Mapper,总有一款适合你。github
MybatisPlus 能够认为一个Mybatis的外挂,用了这个技术以后 能够不写mapper文件 能够不写dao接口中的方法 而后实现增删改查 分页查询 条件查询 等等
MyBatis-Plus(简称 MP)是一个 MyBatis 的加强工具,在 MyBatis 的基础上只作加强不作改变,为简化开发、提升效率而生。sql
在 MyBatis 的基础上只作加强不作改变意味着 若是你导入了Mybatisplus的依赖 可是不想用Mybatisplus的方法 ,那么 不会影响到Mybatis的正常使用数据库
官方文档:https://mp.baomidou.com/guide...segmentfault
导入Mybatisplus的依赖mybatis
注意:要首先删除Mybatis的依赖,由于Mybatisplus中包含有Mybatis的依赖 不须要独立导入 容易jar包冲突
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.1.tmp</version> </dependency>
教程新手向,只讲解Mybatis最经常使用,最基本的API,更多的操做请参考官方文档
demo使用到的数据库库表以下
![]()
给要数据库操做的实体类加Mybatisplus的注解app
由于Mybatisplus不须要写mapper文件 不须要写sql 那么Mybatisplus怎么知道实体类和数据库表映射关系(ORM) 经过注解代表这种关系
/** * @TableName("cmfz_admin") 将当前的实体类和数据库的表创建联系 * 注解参数:表名 */ @TableName("cmfz_admin") @Data public class CmfzAdmin implements Serializable { /** * 主键属性 @TableId * * value 该属性对应的数据库表中的字段名 * type 主键自增的类型 AUTO 表明自动递增 */ @TableId(value = "id",type = IdType.AUTO) private Integer id; /** * 非主键属性 @TableField * @TableField("username") 参数为该属性对应的数据库表中的字段名 * */ @TableField("username") private String username; @TableField("password") private String password; }
建立dao接口ide
import com.baizhi.entity.CmfzAdmin; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * 注意: * 1.接口中不须要写方法
*/
public interface CmfzAdminDao extends BaseMapper<CmfzAdmin> {
}
3. 直接使用Mybatisplus的方法 开始增删改查
@Test public void contextLoads() {
// 根据id查询
CmfzAdmin cmfzAdmin = cmfzAdminDao.selectById(1);
// System.out.println(cmfzAdmin);
// 查询全部 selectList(null);
List<CmfzAdmin> cmfzAdmins = cmfzAdminDao.selectList(null); for (CmfzAdmin admin : cmfzAdmins) { System.out.println(admin); } } /** * 添加 */ @Test public void test1(){
// 建立一个对象
CmfzAdmin cmfzAdmin = new CmfzAdmin(); cmfzAdmin.setUsername("hhhh"); cmfzAdmin.setPassword("123456");
// 添加 返回值是成功的条数
int insert = cmfzAdminDao.insert(cmfzAdmin); System.out.println(insert); } /** * 将id为5的管理员名字修改成lisi */ @Test public void test2(){ CmfzAdmin cmfzAdmin = new CmfzAdmin(); cmfzAdmin.setId(5); cmfzAdmin.setUsername("lisi");
// 根据id更新数据
int i = cmfzAdminDao.updateById(cmfzAdmin);
// 删除
/** * deleteById() 根据id删除 * deleteBatchIds() 批量删除 参数是要删除的id的集合 */ }
#### 实现条件查询 (条件构造器的使用)
/**
* 要查询名字有zhangsan的管理员的信息 */ @Test public void test4(){ /** * selectOne 查询一个方法 * * selectOne 须要一个Wrapper对象 其实是须要一个条件 * * 条件是 查询名字为zhangsan管理员 * sql where username = zhangsan * 须要 把 sql的条件 封装到 Wrapper对象 对象中 * 将封装了条件的对象 给 selectOne * * Wrapper对象 条件构造器 将sql的条件 写入到Java对象中 * QueryWrapper 查询条件构造器 * UpdateWrapper 更新的条件构造器 */
// 1.建立一个条件构造器 泛型 为要查询数据的实体类类型
QueryWrapper<CmfzAdmin> queryWrapper = new QueryWrapper<>();
// 2.将 where username = zhangsan 等值查询 这个条件封装到 条件构造器
// username = zhangsan ---》 eq("username","zhangsan") 参数1 字段名 参数2 要查询的值 queryWrapper.eq("username","zhangsan");
// 3.经过条件构造器 查询
CmfzAdmin cmfzAdmin = cmfzAdminDao.selectOne(queryWrapper); System.out.println(cmfzAdmin); } /** * 查询 名字为 lisi 或者 密码为 123456 的管理员 * * sql username = lisi or password = 123456 * * or 和 and 怎么构建? * eq("id",1).or().eq("name","老王")--->id = 1 or name = '老王' */ @Test public void test5(){
// 1.建立条件构造器
QueryWrapper<CmfzAdmin> queryWrapper = new QueryWrapper<>();
// 2.构造条件 条件构造器的方法的第一个参数基本上都是字段名
queryWrapper.eq("username","lisi").or().eq("password","123456");
// 3.查询
/** * 批量查询 selectList() 方法中若是参数是null 就是查询全部 */ List<CmfzAdmin> cmfzAdmins = cmfzAdminDao.selectList(queryWrapper); for (CmfzAdmin cmfzAdmin : cmfzAdmins) { System.out.println(cmfzAdmin); } }
条件修改:把用户名为zhangsan的管理员密码修改成123456
/**
* 用法和查询相似 * 把用户名为zhangsan的管理员密码修改成123456 * */ @Test public void test6(){
// 1.建立条件构造器
UpdateWrapper<CmfzAdmin> updateWrapper = new UpdateWrapper<>();
// 2.构造条件
// where username = zhangsan
// set password = 123456
updateWrapper.set("password","123123"); updateWrapper.eq("username","zhangsan");
// 3.使用方法修改
/** * update * 参数1 一个管理员对象 能够直接写null * 参数2 条件构造器 */ cmfzAdminDao.update(null,updateWrapper); }
#### 实现分页查询 1. 配置分页插件 配置在启动类中便可
@Bean
public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // 设置请求的页面大于最大页后操做, true调回到首页,false 继续请求 默认false // paginationInterceptor.setOverflow(false); // 设置最大单页限制数量,默认 500 条,-1 不受限制 // paginationInterceptor.setLimit(500); // 开启 count 的 join 优化,只针对部分 left join paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true)); return paginationInterceptor; }
2. 直接在代码可使用分页查询
/**
* 测试分页查询 * * 获取第二页的数据(页码) 每页显示两条(size) */ @Test public void test7(){
// 1.建立一个page对象 封装分页数据
/** * 建立对象的时候 直接写入分页数据 * 参数1 页码 * 参数2 每页条数 */ Page<CmfzAdmin> adminPage = new Page<>(2,2);
// 2.使用分页查询的方法
/** * 分页查询的方法 selectPage() * 参数1 IPage 分页对象 封装分页信息 封装获取第二页的数据(页码) 每页显示两条(size) * 参数2 条件构造器 能够直接写null */ Page<CmfzAdmin> cmfzAdminPage = cmfzAdminDao.selectPage(adminPage, null);
// 3.从Page对象中获取查询到的数据
/** * getRecords() 获取查询结果 * getTotal() 总条数 */ System.out.println("总条数:"+cmfzAdminPage.getTotal()); List<CmfzAdmin> adminList = cmfzAdminPage.getRecords(); for (CmfzAdmin cmfzAdmin : adminList) { System.out.println(cmfzAdmin); } }
## 总结 > Tips:关于在SpringBoot项目中简化Mybatis的开发,本教程提供三个技术 MBG,MybatisPlus,通用Mapper,总有一款适合你。 **恭喜你完成了本章的学习,为你鼓掌!若是本文对你有帮助,请帮忙点赞,评论,转发,这对做者很重要,谢谢。**  让咱们再次回顾本文的学习目标 > * 掌握SpringBoot中MybatisPlus的使用 要掌握SpringBoot更多的用法,请持续关注本系列教程。 ## 求关注,求点赞,求转发