游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

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

  1。Mybatis存在的痛点
  我们知道MyBatis是一个基于java的持久层框架,它内部封装了jdbc,极大提高了我们的开发效率。
  但是使用Mybatis开发也有很多痛点:每个Dao接口都需要自己定义一堆增删改查方法。Desc:UserDao接口Author:公众号:知否技术date:下午7:43202257publicinterfaceUserDao{获取所有用户信息ListUsergetUserList();根绝id获取用户信息UsergetUserById(intid);新增用户信息booleanadd(Useruser);更新用户信息booleanupdate(Useruser);删除用户信息booleandelete(intid);}
  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。引入依赖!mybatisplus依赖dependencygroupIdcom。baomidougroupIdmybatisplusbootstarterartifactIdversion3。4。0versiondependency!mysql驱动dependencygroupIdmysqlgroupIdmysqlconnectorjavaartifactIdscoperuntimescopedependency!testdependencygroupIdorg。springframework。bootgroupIdspringbootstartertestartifactIdscopetestscopedependency
  3。创建数据库表
  user表:CREATETABLEuser(idbigintNOTNULLAUTOINCREMENTCOMMENTid,namevarchar(20)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT姓名,ageintDEFAULTNULLCOMMENT年龄,PRIMARYKEY(id)USINGBTREE)ENGINEInnoDBAUTOINCREMENT1508421137384648706DEFAULTCHARSETutf8mb4COLLATEutf8mb4generalciROWFORMATDYNAMIC;
  4。实体类publicclassUser{TableId(valueid,typeIdType。ASSIGNID)privateLongid;privateStringname;privateintage;publicUser(Stringname,intage){this。namename;this。ageage;}publicLonggetId(){returnid;}publicvoidsetId(Longid){this。idid;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this。namename;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this。ageage;}}
  5。修改application。ymlserver:port:8082servlet:contextpath:mybatisplusdemo数据源配置spring:datasource:username:rootpassword:12345678url:jdbc:mysql:localhost:3306ssm?allowPublicKeyRetrievaltrueuseSSLfalsedriverclassname:com。mysql。cj。jdbc。Driver
  6。新建UserMapper接口
  注:
  (1)因为mybatis规定:mapper。xml文件的名字要和接口名字一样,所以很多人习惯将Dao接口命名为xxxMapper。
  (2)BaseMapper是MybatisPlus内置的接口,它包含基本的CRUD方法。
  7。启动类添加MapperScan注解
  8。测试SpringBootTestpublicclassMybatisPlusDemoApplicationTests{ResourceprivateUserMapperuserMapper;TestvoidtestMybatisPlus(){for(inti18;i20;i){UserusernewUser(王小波i,i);userMapper。insert(user);}}}
  9。总结
  我们发现只要继承MybatisPlus的BaseMapper,就能完成基本的增删改查操作,非常方便。
  4。基本增删改查
  1。新增UserusernewUser(王小波,19);userMapper。insert(user);
  2。编辑
  根据id更新数据introwsuserMapper。updateById(user);if(rows0){System。out。println(更新成功);}
  3。删除
  根据主键删除信息userMapper。deleteById(152635612);
  根据map条件删除信息MapString,ObjectparamnewHashMap();param。put(age,18);introwsuserMapper。deleteByMap(param);if(rows0){System。out。println(删除成功!);}
  根据id集合批量删除ListIntegeridsStream。of(110,112,113,115)。collect(Collectors。toList());introwsuserMapper。deleteBatchIds(ids);if(rows0){System。out。println(删除成功!);}
  4。查询
  根据id查询UseruseruserMapper。selectById(152382374);
  根据map条件查询MapString,ObjectparamnewHashMap();param。put(age,18);ListUseruserListuserMapper。selectByMap(param);
  根据id集合批量查询ListIntegeridsStream。of(110,112,113,115)。collect(Collectors。toList());ListUseruserListuserMapper。selectBatchIds(ids);5。构造器
  MybatisPlus提供了查询构造器和更新构造器用来生成带有where条件的sql语句。
  (1)封装查询条件的构造器:QueryWrapper
  常用查询条件:
  等于:eqQueryWrapperUseruserWrappernewQueryWrapper();查询名字是张三的用户userWrapper。eq(name,张三);ListUseruserListuserMapper。selectList(userWrapper);
  不等于:neQueryWrapperUseruserWrappernewQueryWrapper();userWrapper。ne(name,张三);查询名字不是张三的用户ListUseruserListuserMapper。selectList(userWrapper);
  模糊查询:likeQueryWrapperUseruserWrappernewQueryWrapper();模糊查询userWrapper。like(name,张);ListUseruserListuserMapper。selectList(userWrapper);
  降序:orderByDescQueryWrapperUseruserWrappernewQueryWrapper();模糊查询并根据number倒序userWrapper。like(name,张)。orderByDesc(number);ListUseruserListuserMapper。selectList(userWrapper);
  升序:orderByAscQueryWrapperUseruserWrappernewQueryWrapper();模糊查询并根据number降序userWrapper。like(name,张)。orderByAsc(number);ListUseruserListuserMapper。selectList(userWrapper);
  其他常用的条件可以去官网查看相关文档,这里不再过多赘述:https:baomidou。compages10c804in
  (2)封装更新条件的构造器:UpdateWrapper
  UpdateWrapper的where条件和QueryWrapper的一样,只不过需要set值。UpdateWrapperUseruserWrappernewUpdateWrapper();userWrapper。set(name,王小波)。set(age,22)。eq(name,张三);6。通用Service
  MybatisPlus中有一个通用的接口Iservice和实现类,封装了常用的增删改查等操作。
  1。新建service和实现类
  UserServiceDesc:Author:公众号:知否技术date:下午9:572022511publicinterfaceUserServiceextendsIServiceUser{}
  UserServiceImplDesc:Author:公众号:知否技术date:下午9:572022511ServicepublicclassUserServiceImplextendsServiceImplUserMapper,UserimplementsUserService{}
  2。测试
  我们发现该IService接口封装了一些常用的方法,极大地提高了我们的开发效率。7。常用注解
  1。TableId
  MybatisPlus会默认将实体类中的id作为主键。
  TableId表示id的生成策略,常用的有两种:
  (1)基于数据库的自增策略
  (2)使用雪花算法策略随机生成
  2。TableName
  如果实体类和数据库的表名不一致,可以使用这个注解做映射
  例如:
  3。TableField
  当表属性和实体类中属性名不一致时,可以使用这个注解做映射:
  8。分页
  MybatisPlus内部封装了分页插件,只用简单配置一下就能实现分页功能。
  1。配置类Desc:Author:公众号:知否技术date:下午9:312022511ConfigurationMapperScan(com。zhifou。mapper)publicclassMybatisPlusConfig{BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptornewMybatisPlusInterceptor();interceptor。addInnerInterceptor(newPaginationInnerInterceptor(DbType。MYSQL));returninterceptor;}}
  2。测试TestvoidtestMybatisPlus(){intcurrent1;intsize10;PageUseruserPagenewPage(current,size);获取分页数据ListUserlistuserPage。getRecords();list。forEach(user{System。out。println(user);});PageUserpageuserMapper。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。引入依赖!代码生成器dependencygroupIdcom。baomidougroupIdmybatisplusgeneratorartifactIdversion3。5。1versiondependencydependencygroupIdorg。freemarkergroupIdfreemarkerartifactIddependency
  2。代码生成器工具类publicclassCodeGenerator{publicstaticvoidmain(String〔〕args){连接数据库FastAutoGenerator。create(jdbc:mysql:localhost:3306ssm?allowPublicKeyRetrievaltrueuseSSLfalseuseUnicodetruecharacterEncodingUTF8serverTimezoneUTC,root,123456)。globalConfig(builder{builder。author(知否技术)设置作者。fileOverride()覆盖已生成文件设置日期时间。dateType(DateType。ONLYDATE)。outputDir(D:WorkSpaceideamybatisplusdemosrcmainjava);指定输出目录})。packageConfig(builder{builder。parent(com。zhifou)设置父包名。pathInfo(Collections。singletonMap(OutputFile。mapperXml,D:WorkSpaceideamybatisplusdemosrcmainresourcesmapper));设置mapperXml生成路径})。strategyConfig(builder{builder。addInclude(tuser)设置需要生成的表名。addTablePrefix(t);设置过滤表前新增数据,自动为创建时间赋值IFillcreateFillnewColumn(createddate,FieldFill。INSERT);IFillupdateFillnewColumn(updateddate,FieldFill。UPDATE);builder。entityBuilder()设置id类型。idType(IdType。ASSIGNID)开启Lombok。enableLombok()开启连续设置模式。enableChainModel()驼峰命名模式。naming(NamingStrategy。underlinetocamel)。columnNaming(NamingStrategy。underlinetocamel)自动为创建时间、修改时间赋值。addTableFills(createFill)。addTableFills(updateFill)逻辑删除字段。logicDeleteColumnName(isdeleted);Restful风格builder。controllerBuilder()。enableRestStyle();去除Service前缀的Ibuilder。serviceBuilder()。formatServiceFileName(sService);mapper设置builder。mapperBuilder()。enableBaseResultMap()。enableBaseColumnList();})固定。templateEngine(newFreemarkerTemplateEngine())使用Freemarker引擎模板,默认的是Velocity引擎模板。execute();}}
  关键点:
  (1)配置数据库连接信息。
  自动生成代码需要连接数据库
  (2)指定输出目录,这里直接设置你项目的目录,到时候不用赋值粘贴了。
  (3)设置父包名。
  (4)设置表名
  然后右键运行,代码就会自动生成。10。application。yml配置MybatisPlusmybatisplus:globalconfig:dbconfig:columnunderline:true驼峰形式logicdeletefield:isDeleted全局逻辑删除的实体字段名logicdeletevalue:1逻辑已删除值(默认为1)logicnotdeletevalue:0逻辑未删除值(默认为0)dbtype:mysqlidtype:assignidid策略tableprefix:t配置表的默认前缀mapperlocations:classpath:mapperMapper。xmlmapper文件位置typealiasespackage:com。zhifou。entity实体类别名configuration:logimpl:org。apache。ibatis。logging。stdout。StdOutImplahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a:打印sql语句11。完整代码链接:https:pan。baidu。coms1nlRjKOWs3ON53Dh1XXLKGw提取码:9un712。遇到的坑
  1。传参为0时,查询语句失效。
  例如传递的age为0,查询就会失效selectidgetUserresultTypeuserselectid,name,age,sexfromuserwhereiftestage!nullandage!age{age}ifwhereselect
  原因:判断int是否为空只要!null就行了,如果加上type!,0会被转为null。
  2。MybatisPlus更新字段为null失败
  解决办法:TableField(updateStrategyFieldStrategy。IGNORED)privateStringname;
  该注解会忽略为空的判断,
  链接:https:juejin。cnpost7097006142836408327

人人都能编程,你相信吗?不久前我们曾经讨论关于人工智能会如何改变现有编程工作(延展阅读:人工智能会结束编程热吗?),如今有了新的进展。人工智能技术公司OpenAI发布了一款新的机器学习工具,可以……今日份小众文案1。不要赌天意,也不要猜人心,天意赌不起,人心更猜不透。2。好好生活,好好工作,好好爱自己,把期待降低,把依赖变少,你会过得更好。3。生活是自己的,尽情地捯饬,尽情……原创给天女支一招引进段梦可给朱婷占位子【原创】给天女支一招:引进段梦可给朱婷占位子!一,段梦可资料显示身高1。95长臂展,实际比韩文雅还高应该有1。98。年龄16,如果未来长到2。02,或可比肩安特罗波娃!打……早晨洗头和晚上洗头哪一个更利于人体,这个你了解过吗一般不建议早晨或晚上洗头,最好是中午洗头。1、早上洗头:早上洗头容易使人生病。因为人刚起床时的血液循环较慢,身体抵抗,力较弱,头部皮肤较敏感,温水会刺激我们的头皮,引起头晕头疼……世界最大的强子对撞机,因为耗电要被欧洲关掉,它究竟有多耗电?美国华尔街日报在9月4号的报道称,位于瑞士日内瓦的欧洲核子研究组织,考虑到欧洲目前正在经历的能源危机,将准备停掉正在远转的大型强子对撞机LHC,最直接的原因是这玩意实在是太费电……男人三分醉,骗到你心碎如果某一天,你不说一句谎话,只说真话,会怎样?先说后果,众叛亲离,孤独终老。再说原因,一个人一辈子只说真话,不符合现在这个世界流行的社会观,如今把逢人说人话,见鬼说……四种葡萄的对比今年中秋节,朋友从她老家给我们带了一箱葡萄,很讲究地采取了四个品种的混装。我想:这样的操作,定是为了售卖更高的价格。这四个种类的葡萄我居然认不全品名啊!只知道有一串是户太……聚焦高质量发展,福田区今年一季度集中开工项目有这些1月29日,深圳市举行高质量发展大会暨2023年首批重大项目开工仪式,福田区分会场设在河套深港科技创新合作区的大湾区量子科学中心项目现场。福田区委书记黄伟表示,福田区坚决……空气消毒机怎么选?这6点很重要!疫情期间,人们对疫情下如何做好个人防护还一知半解。当疫情防控放开以后,人们对空气消毒需求激增,作为空气消毒的主打产品空气消毒机,进入越来越多人的视野。本来空气消毒机是作为医用领……欧冠巴塞罗那VS国际米兰,巴萨严阵以待力图复仇,国米负重前行北京时间明日10月13日凌晨3点钟,欧冠小组赛第四轮,西甲豪门巴萨坐镇诺坎普,迎击意甲昔日霸主国米,本赛季两支球队在各自联赛的表现差距悬殊,巴萨从当初的第二梯队一跃成为了西甲联……只有3人打过世界杯的荷兰,准备好成为世界冠军了记者寒冰报道对年逾古稀的荷兰主帅范加尔而言,这也将是他最后一届世界杯。今年4月他坦承罹患前列腺癌并一直在治疗,因此这次世界杯他选择放飞自我。比如新闻会上只用荷兰语而不是熟……技术人员必须知道的手机验证码登录风险手机验证码登录是一种常见的应用登录方式,简单方便,不用记忆密码,市面上能见到的APP基本都支持这种登录方式,很多应用还把登录和注册集成到了一起,注册登录一气呵成,给用户省去了很……
nars吉隆坡眼影怎么样nars吉隆坡眼影好用吗nars吉隆坡眼影是它家的经典款,每个颜色都非常的美,画日常妆容都可以用。那么nars吉隆坡眼影怎么样?nars吉隆坡眼影好用吗?产品介绍那一抹的温柔传说中的斩男盘,抹上……苹果iPhone11ProMax官方机型比较IT之家9月11日消息今日凌晨,苹果正式发布iPhone11系列手机,推出了iPhone11、iPhone11Pro和iPhone11ProMax三款新iPhone。价格……福布斯公布女运动员收入TOP10!大坂直美遥遥领先,网球5人近日,福布斯杂志公布了2021年度女运动员收入榜单前十。在这份榜单当中,网球运动员占据了半壁江山,总共有5位选手来自网球领域,其中在前5名当中有4位网球运动员,前3名均为网球运……房企土增税清算成本分摊方法选择不当税负增加千万编者按:房地产开发企业进行土地增值税清算,将有关收入、成本、费用按要求在不同期间和不同项目间进行合理归集既是纳税人的一项重要义务,也是主管税务机关开展前期管理和清算审核重点关注……不服输还是输不起?杜锋炮轰裁判话中有话,广东被吹36犯规落败广东队103比114不敌浙江,第二阶段不败的金身被破,13连胜也就此终结。对于这场强强对话来说,几乎就是两支球队季后赛的预演。如果双方季后赛有机会相遇的话,强度还要比这场比赛要……上海70后同学聚餐,所喝白酒走红网络,网友还是老一辈人会享受这几年抖音非常火,不仅是年轻人玩,上了岁数的人也玩,随手分享成了大家的日常。而昨天晚上,笔者就刷到了一条很有意思的视频,视频是一群上海70后在进行同学聚会,视频内容没火,……iPhone12miniProMax明天凌晨正式发布!苹果5苹果今年的第二场秋季发布会,将于美国西部时间10月13日上午10点(北京时间10月14日凌晨1点)在苹果ApplePark总部园区举行,依然是通过线上直播的形式进行,这次的发布……苹果iPhone12明天凌晨发布,有望推动苹果市值超过2。210月13日消息,据国外媒体报道,备受期待的iPhone12系列智能手机,预计会在明天凌晨1点开始的苹果发布会上登场,苹果市值也有望在发布会当天超过2。2万亿美元。iPh……苹果的半条命,并不在iPhone12上iPhone12跌破发行价,华为Mate40系列的国内发布会等信息,盖过了苹果新一季财报发布的新闻。北京时间10月29日,苹果公布了其2020年Q4季度财报(2020年7……苹果因工人生活条件问题暂缓在越南组装iPhoneIT之家8月17日消息据外媒AppleInsider报道称,苹果公司正在考虑在越南组装iPhone,此前,苹果公司参观了组装合作伙伴立讯精密在越南拥有的一家工厂,以检查该设施的……苹果重新带来AppleMusic6个月学生免费试用IT之家8月16日消息外媒9to5Mac报道,随着返校季到来,苹果公司近日又推出了针对学生的AppleMusic延长试用优惠。在有限的时间内,符合条件的大学生如果是AppleM……今年底开业!张家口中泰城铜锣湾奥特莱斯城市综合体项目都有啥?仲冬时节,备受瞩目的中泰城铜锣湾奥特莱斯城市综合体项目正在有序推进。目前,奥特莱斯国际广场两大集中式商业体已完成地上二层建设;张探1910历史文化主题街区厂房进行内部结构加固;……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网