范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

学会了MybatisPlus,代码开发效率提高了10倍

  1. Mybatis 存在的痛点
  我们知道 MyBatis 是一个基于 java 的持久层框架,它内部封装了 jdbc,极大提高了我们的开发效率。
  但是使用 Mybatis 开发也有很多痛点:每个 Dao 接口都需要自己定义一堆增删改查方法。/**  * @Desc: UserDao 接口  * @Author: 公众号:知否技术  * @date: 下午7:43 2022/5/7  */ public interface UserDao {     // 获取所有用户信息     List getUserList();          // 根绝 id 获取用户信息     User getUserById(int id);          // 新增用户信息     boolean add(User user);          // 更新用户信息     boolean update(User user);          // 删除用户信息     boolean delete(int id); } 复制代码
  2.每个 Mapper 文件都需要写一堆基本的增删改查语句。
  3.如果查询的列表需要分页,我们还需要给查询方法封装成分页对象。
  你可能会说:Mybatis 还能有痛点?用着多方便!
  对于小项目而言,用着确实还行。但是遇到大项目,光 Dao 接口都有几百个,如果还要手动定义一堆增删改查方法和 sql 语句,那也很浪费时间。
  那有没有这样一个框架:
  1.封装了 Mybatis,自带 CRUD 方法,我们不需要自己定义 CRUD 方法。
  2.提供各种查询方法,不需要在 mapper 文件中写一些基础的 sql 语句。
  3.封装了分页功能,让分页查询无比丝滑。
  有的,MybatisPlus 闪亮登场。
  2. 邂逅 MybatisPlus
  官网:https://baomidou.com/ 复制代码
  MybatisPlus 是在 Mybatis 原有功能的基础上进行了封装。它不做改变,而是增强了 Mybatis 的功能。
  我们不用写 mappe.xml ,直接调用它的 API 就能完成 CRUD 和各种查询操作。
  而且它自带分页插件等一些高级功能,极大地提高了我们的开发效率。3. 入门案例
  开发环境:开发工具:IDEA构建工具:Maven数据库:MySQL项目框架:SpringBoot
  1.新建 SpringBoot 项目
  2.引入依赖      com.baomidou     mybatis-plus-boot-starter     3.4.0        mysql     mysql-connector-java     runtime        org.springframework.boot     spring-boot-starter-test     test  复制代码
  3.创建数据库表
  user 表:CREATE TABLE `user` (   `id` bigint NOT NULL AUTO_INCREMENT COMMENT "id",   `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT "姓名",   `age` int DEFAULT NULL COMMENT "年龄",   PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1508421137384648706 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; 复制代码
  4.实体类public class User {     @TableId(value = "id", type = IdType.ASSIGN_ID)     private Long id;     private String name;     private int age;      public User(String name, int age) {         this.name = name;         this.age = age;     }      public Long getId() {         return id;     }      public void setId(Long id) {         this.id = id;     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public int getAge() {         return age;     }      public void setAge(int age) {         this.age = age;     } } 复制代码
  5.修改 application.ymlserver:   port: 8082   servlet:     context-path: /mybatisplus_demo # 数据源配置 spring:   datasource:     username: root     password: 12345678     url: jdbc:mysql://localhost:3306/ssm?allowPublicKeyRetrieval=true&useSSL=false     driver-class-name: com.mysql.cj.jdbc.Driver 复制代码
  6.新建 UserMapper 接口
  注:
  (1)因为 mybatis 规定:mapper.xml 文件的名字要和接口名字一样,所以很多人习惯将 Dao 接口命名为 xxxMapper。
  (2)BaseMapper 是 MybatisPlus 内置的接口,它包含基本的 CRUD 方法。
  7.启动类添加 @MapperScan 注解
  8.测试@SpringBootTest public class MybatisPlusDemoApplicationTests {      @Resource     private UserMapper userMapper;      @Test     void testMybatisPlus() {         for (int i = 18; i < 20; i++) {             User user = new User("王小波" + i, i);             userMapper.insert(user);         }     } }
  9.总结
  我们发现只要继承 MybatisPlus 的BaseMapper,就能完成基本的增删改查操作,非常方便。
  4. 基本增删改查
  1.新增User user = new User("王小波", 19); userMapper.insert(user); 复制代码
  2.编辑
  根据 id 更新数据int rows = userMapper.updateById(user); if(rows>0){     System.out.println("更新成功");  } 复制代码
  3.删除
  根据主键删除信息userMapper.deleteById("152635612"); 复制代码
  根据 map 条件删除信息Map param = new HashMap<>(); param.put("age", 18); int rows = userMapper.deleteByMap(param); if (rows > 0) {     System.out.println("删除成功!"); } 复制代码
  根据 id 集合批量删除List ids = Stream.of(110, 112, 113, 115).collect(Collectors.toList()); int rows = userMapper.deleteBatchIds(ids); if (rows > 0) {   System.out.println("删除成功!"); } 复制代码
  4.查询
  根据 id 查询User user = userMapper.selectById(152382374); 复制代码
  根据 map 条件查询Map param = new HashMap<>(); param.put("age", 18); List userList = userMapper.selectByMap(param); 复制代码
  根据 id 集合批量查询List ids = Stream.of(110, 112, 113, 115).collect(Collectors.toList()); List userList = userMapper.selectBatchIds(ids); 复制代码5. 构造器
  MybatisPlus 提供了查询构造器和更新构造器用来生成带有 where 条件的 sql 语句。
  (1)封装查询条件的构造器:QueryWrapper 复制代码
  常用查询条件:
  等于:eqQueryWrapper userWrapper = new QueryWrapper<>(); // 查询名字是张三的用户 userWrapper.eq("name","张三"); List userList = userMapper.selectList(userWrapper); 复制代码
  不等于:neQueryWrapper userWrapper = new QueryWrapper<>(); userWrapper.ne("name","张三"); // 查询名字不是张三的用户 List userList = userMapper.selectList(userWrapper); 复制代码
  模糊查询:likeQueryWrapper userWrapper = new QueryWrapper<>(); // 模糊查询 userWrapper.like("name","张"); List userList = userMapper.selectList(userWrapper); 复制代码
  降序:orderByDescQueryWrapper userWrapper = new QueryWrapper<>(); // 模糊查询并根据 number 倒序 userWrapper.like("name","张").orderByDesc("number"); List userList = userMapper.selectList(userWrapper); 复制代码
  升序:orderByAscQueryWrapper userWrapper = new QueryWrapper<>(); // 模糊查询并根据 number 降序 userWrapper.like("name","张").orderByAsc("number"); List userList = userMapper.selectList(userWrapper); 复制代码
  其他常用的条件可以去官网查看相关文档,这里不再过多赘述:https://baomidou.com/pages/10c804/#in 复制代码
  (2)封装更新条件的构造器:UpdateWrapper 复制代码
  UpdateWrapper 的 where 条件和 QueryWrapper 的一样,只不过需要 set 值。UpdateWrapper userWrapper = new UpdateWrapper<>(); userWrapper.set("name","王小波").set("age",22)     .eq("name","张三"); 复制代码6. 通用 Service
  MybatisPlus 中有一个通用的接口 Iservice 和实现类,封装了常用的增删改查等操作。
  1.新建 service 和 实现类
  UserService/**  * @Desc:  * @Author: 公众号:知否技术  * @date: 下午9:57 2022/5/11  */ public interface UserService extends IService {  } 复制代码
  UserServiceImpl/**  * @Desc:  * @Author: 公众号:知否技术  * @date: 下午9:57 2022/5/11  */ @Service public class UserServiceImpl extends ServiceImpl implements UserService {  } 复制代码
  2.测试
  我们发现该 IService 接口封装了一些常用的方法,极大地提高了我们的开发效率。7. 常用注解
  1.@TableId
  MybatisPlus 会默认将实体类中的 id 作为主键。
  @TableId 表示 id 的生成策略,常用的有两种:
  (1) 基于数据库的自增策略
  (2) 使用雪花算法策略随机生成
  2.@TableName
  如果实体类和数据库的表名不一致,可以使用这个注解做映射
  例如:
  3.@TableField
  当表属性和实体类中属性名不一致时,可以使用这个注解做映射:
  8. 分页
  MybatisPlus 内部封装了分页插件,只用简单配置一下就能实现分页功能。
  1.配置类/**  * @Desc:  * @Author: 公众号:知否技术  * @date: 下午9:31 2022/5/11  */ @Configuration @MapperScan("com.zhifou.mapper") public class MybatisPlusConfig {      @Bean     public MybatisPlusInterceptor mybatisPlusInterceptor() {         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();         interceptor.addInnerInterceptor(new                 PaginationInnerInterceptor(DbType.MYSQL));         return interceptor;     } } 复制代码
  2.测试@Test void testMybatisPlus() {     int current = 1;     int size = 10;     Page userPage = new Page<>(current, size);     //获取分页数据     List list = userPage.getRecords();     list.forEach(user->{         System.out.println(user);     });     Page page = userMapper.selectPage(userPage, null);     System.out.println("当前页:" + page.getCurrent());     System.out.println("每页条数:" + page.getSize());     System.out.println("总记录数:" + page.getTotal());     System.out.println("总页数:" + page.getPages()); } 复制代码9. 代码生成器
  MybatisPlus 可以帮助我们自动生成 controller、service、dao、model、mapper.xml 等文件,极大地提高了我们的开发效率。
  1.引入依赖    com.baomidou   mybatis-plus-generator   3.5.1     org.freemarker   freemarker  复制代码
  2.代码生成器工具类public class CodeGenerator { public static void main(String[] args) { // 连接数据库 FastAutoGenerator.create("jdbc:mysql://localhost:3306/ssm?allowPublicKeyRetrieval=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC", "root", "123456")     .globalConfig(builder -> {         builder.author("知否技术") // 设置作者                 .fileOverride() // 覆盖已生成文件                 // 设置日期时间                 .dateType(DateType.ONLY_DATE)                 .outputDir("D:WorkSpaceideamybatisplus_demosrcmainjava"); // 指定输出目录     })     .packageConfig(builder -> {         builder.parent("com.zhifou") // 设置父包名                 .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D:WorkSpaceideamybatisplus_demosrcmainresourcesmapper")); // 设置mapperXml生成路径     })     .strategyConfig(builder -> {         builder.addInclude("t_user") // 设置需要生成的表名                 .addTablePrefix("t_"); // 设置过滤表前          // 新增数据,自动为创建时间赋值         IFill createFill = new Column("created_date", FieldFill.INSERT);         IFill updateFill = new Column("updated_date", FieldFill.UPDATE);         builder.entityBuilder()                 // 设置id类型                 .idType(IdType.ASSIGN_ID)                 // 开启 Lombok                 .enableLombok()                 // 开启连续设置模式                 .enableChainModel()                 // 驼峰命名模式                 .naming(NamingStrategy.underline_to_camel)                 .columnNaming(NamingStrategy.underline_to_camel)                 // 自动为创建时间、修改时间赋值                 .addTableFills(createFill).addTableFills(updateFill)                 // 逻辑删除字段                 .logicDeleteColumnName("is_deleted");          // Restful 风格         builder.controllerBuilder().enableRestStyle();         // 去除 Service 前缀的 I         builder.serviceBuilder().formatServiceFileName("%sService");         // mapper 设置         builder.mapperBuilder()                 .enableBaseResultMap()                 .enableBaseColumnList();     })     // 固定     .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板     .execute();   } } 复制代码
  关键点:
  (1)配置数据库连接信息。
  自动生成代码需要连接数据库
  (2)指定输出目录,这里直接设置你项目的目录,到时候不用赋值粘贴了。
  (3)设置父包名。
  (4)设置表名
  然后右键运行,代码就会自动生成。10. application.yml 配置# MybatisPlus mybatis-plus:   global-config:     db-config:       column-underline: true # 驼峰形式       logic-delete-field: isDeleted # 全局逻辑删除的实体字段名       logic-delete-value: 1 # 逻辑已删除值(默认为 1)       logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)       db-type: mysql       id-type: assign_id # id策略       table-prefix: t_ # 配置表的默认前缀    mapper-locations: classpath*:/mapper/**Mapper.xml # mapper 文件位置   type-aliases-package: com.zhifou.entity # 实体类别名   configuration:     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 日志:打印sql 语句 复制代码11. 完整代码链接: https://pan.baidu.com/s/1nlRjKOWs3ON53Dh1XXLKGw  提取码: 9un7  复制代码12. 遇到的坑
  1.传参为 0 时,查询语句失效。
  例如传递的 age 为 0,查询就会失效 复制代码
  原因:判断 int 是否为空只要 !=null 就行了,如果加上 type != "",0 会被转为 null。
  2.MybatisPlus 更新字段为 null 失败
  解决办法:@TableField(updateStrategy = FieldStrategy.IGNORED) private String name; 复制代码
  该注解会忽略为空的判断,

苏木杰反应,跟这些行为有直接关系,一定要避免前面讲了,苏木杰反应是夜间发生了低血糖,导致空腹血糖反射性升高。夜间低血糖是非常危险的,很容易直接进入昏迷状态,甚至心梗猝死。哪些行为会导致夜间低血糖呢?1晚餐前正常注射胰岛素或吃健脾祛湿的参苓白术散,还可以治疗哪些病?胃主纳,脾主运,一纳一运,密切配合,则消化功能正常,胃不能受纳腐熟水谷,则食欲减退,嘈杂易饥。脾失健运,则消化不良食后饱胀大便溏泄。导致这一系列证候的根源就是脾虚湿盛,脾胃虚弱,纳督查走访促提升实地指导促规范华声在线讯(通讯员阳冬萍颜敏)2月17日,衡阳市学前教育事务中心主任陈跃文一行深入衡东县幼儿园进行督查和走访。督查走访中,陈跃文高度赞扬了衡东县学前教育实现内涵发展,勉励了幼儿园重灞桥区邵平店幼儿园开展预防春季传染病系列活动阳光讯(闫礼杰记者张允铎)随着春季的来临,很多传染病进入高发季节,为了全体师生的健康和安全,严防传染病的传播与发生,维护全园正常的教育教学秩序。2023年2月20日,西安市灞桥区邵20222023赛季CBA联赛常规赛第三阶段恢复主客场赛制!3月3日,山西男篮重回主场作战!你有多久没在主场听到熟悉的闹他?告别三年的赛会制,山西球迷终于可以在家门口迎来熟悉的面孔和激动人心的比赛了!20222023赛季CBA联赛常规赛第三阶段即将开赛并恢复主客场制,山西陈戌源被抓重大突破!女足热身赛回国,名记亲口揭晓孙雯被查悬念大家好,我是詹妹,我们一起来关注中国足坛,目前女足已经完成了4场热身赛回到国内,在此前中国女足也作为亚洲杯的冠军,面对爱尔兰瑞典女足,从目前的情况来看,面对欧美强队,中国女足还是爆盘点2022我去过的宝藏景点,比国外美太多自从疫情之后不能出国我开始探索国内每个地方的独特景色发现祖国的大好河山真的比国外美多了清晨黄昏,山野过境下面这9个地方想分享给你这是我眼中不一样的中国福建奇达村这是中国版的里约热内神秘的望仙峽谷作者陈辉林如诗如画望仙谷2月12日,从上饶德兴市返程回昌路上,顺道去了一趟望仙谷景区,仙境般的风光美景,让人眼前一亮,叹为观止,手机拍拍,揭开望仙谷神秘的面纱。望仙谷位于江西省上饶全国象棋男子甲级联赛季后赛第三轮结束福建日报新福建客户端2月21日讯(记者陈挺)全国象棋男子甲级联赛今晚在江西万载结束季后赛第三轮争夺,厦门象屿象棋队后来居上,在关键的第四盘中主帅郑一泓出马力克京冀联队小将王禹博,以春笋的3种美味吃法,腌笃鲜滋润,凉拌笋脆嫩,肉片炒笋最下饭春笋有春季第一鲜的美称,其味道清甜鲜嫩,含丰富的水分植物蛋白质钙磷铁等人体必需的营养成分和微量元素,低脂肪多粗纤维,有助消化促进肠胃蠕动的功能。其丰富的维生素A对眼睛和皮肤也有好处中国摄影师游历70个国家,被柬埔寨深深吸引我先后两次来柬埔寨旅行,第一次是背包客穷游,第二次是托当地朋友租了台车,自驾环游一整个大圈。这个国家给我的最大印象是,充满了矛盾之感。丁逸峰,90后中国摄影师,环球旅拍70个国家。
2022智能手表该怎么选?本篇推荐三选一就行近年疫情带动了智能手表和智能手环的消费市场,市面上的智能手表手环也层出不穷,功能从一开始的计步发展到了有各种健康运动监测甚至天气指南针GPS等功能,往往一只手表搭载了上百种功能,着摩托罗拉4nm新机曝光,2亿像素主摄16G大运存,依旧不会贵相比其它手机品牌,虽说摩托罗拉的知名度以及热度都并不高,但它却能推出很多极具诚意的产品。比如去年推出的摩托罗拉edgeX30就凭借着极高的性价比狠狠火了一把,它不仅价格经济实惠,而三星Note10炒冷饭评测经典永不过时,2022还能再战2019年,作为三星10代目的收官之作,三星Note10横空出世,它的配置正是按照当年安卓旗舰的最高规格打造2K超清屏幕旗舰芯骁龙8555G独具一时的超视觉三摄系统纤薄的机身和极高带上这三台手机,想去哪拍,咱就去哪拍最近露营特别的火,今年夏天甚至被网友称作是露营季(就是热了点)。露营,当然是走南闯北,将自己想去的地方都去个遍。这个时候,我们会被大自然的美丽风光所吸引,都纷纷拿出自己的手机,想记明明它完全不输给生化危机,但为什么说没就没了?如果你是十多年前就开始接触单机游戏的玩家,那么对于寄生前夜第三次生日这款作品一定不会感到陌生。此作是由SquareEnix发行,同时也是FF7制作人北濑佳范操刀的作品,想当然也是名80后的游戏故事10(小游戏和大游戏)对于一般玩家来说,接触游戏都应该是从小游戏开始的。尤其是现在的孩子们,上互联网玩一玩小程序上的游戏(我们小时候是Flash游戏,现在基本已经绝迹了),估计不少人都这么做过,而对小游鸿蒙系统3。0已发布,还在质疑它是安卓系统的套壳?鸿蒙系统3。0的发布会已过了两天,对于鸿蒙系统的争议却一直不绝于耳。究其原因,IT微课程认为主要有下面几点一是认为外国月亮始终是最圆的人他们的观点就是,什么东西都是国外的好,国产的数化万物惠民生第五届数字中国建设峰会回眸之三这里,有一码畅行开启的数字化体验,还有指尖可达的云上逛,更有R(真实场景)AR技术打造的福元宇宙数字秀这里,有带来新奇体验的元宇宙体验馆,还有全国首家福州鱼丸数字餐厅,更有穿越古今易建联前往美国特训要花多少钱?数字惊人,杜锋果然没看错人近日有消息称易建联这位球星正在美国进行集训,对于易建联的努力,很多球迷都非常的欣慰和心疼,这位老将在遭遇跟腱断裂的伤病之后,一直都没有得到很好的恢复,虽然休战了一整个赛季,可是在上迷失评测你想在赛博朋克世界做一只可爱猫猫吗?文Along省流助手如果存在所谓的轻度游戏,迷失(Stray)应该十分符合其定义。本作流程不算长立意简洁易懂玩法也不复杂,在可爱猫猫加持下,它成为了一款适合绝大多数人的冒险解谜游戏理解男孩,优秀母亲的四个黄金法则文碧心儿熟悉我和母亲的人说,无论是从相貌上,还是就气质与心性上说,我都比较像母亲。的确,母亲是我从小到大最敬爱最珍视的人。从懂事起,我就下定决心,一定要让母亲为我骄傲,我一定要让母