mybatisplus的使用(进阶)mybatisplus的使用(进阶)前言:关于mybatisplus的

ActiveRecord(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。ActiveRecord一直广受动态语言(PHP、Ruby等)的喜爱,而Java作为准静态语言,对于ActiveRecord往往只能感叹其优雅,所以MP也在AR道路上进行了一定的探索,仅仅需要让实体类继承Model类且实现主键指定方法,即可开启AR之旅。接下来看具体代码:

1、entity:

2、mapper:

3、使用AR:

(1)、AR插入操作:

(2)、AR更新操作:

@TestpublicvoidtestArUpdate(){Useruser=newUser();user.setId(1);user.setName("刘亦菲");booleanresult=user.updateById();System.out.println(result);}注:user调用updateById方法,将id为1的用户进行更新。

(3)、AR查询操作:

(4)、AR删除操作:

(5)、AR分页操作:

MP提供了很多好用的插件,而且配置简单,使用方便。接下来一起看看MP的插件如何使用。

之前就有说到,BaseMapper的selectPage方法和AR提供的selectPage方法都不是物理分页,需要配置分页插件后才是物理分页,那么现在就来看看如何配置这个插件。

在plugin的list中添加如下bean即可开启性能分析插件:

MyBatis的代码生成器基于xml文件进行生成,可生成:实体类、Mapper接口、Mapper映射文件。MP的代码生成器基于Java代码进行生成,可生成:实体类(可以选择是否支持AR)、Mapper接口、Mapper映射文件、Service层、Controller层。

BaseMapper提供了17个常用方法,但是有些需求这些方法还是不能很好的实现,那么怎么办呢?大家肯定会想到是在xml文件中写sql语句解决。这样确实可以,因为MP是只做增强不做改变,我们完全可以按照mybatis的原来的方式来解决。不过MP也提供了另一种解决办法,那就是自定义全局操作。所谓自定义全局操作,也就是我们可以在mapper中自定义一些方法,然后通过某些操作,让自定义的这个方法也能像BaseMapper的内置方法,供全局调用。接下来就看看如何实现(以deleteAll方法为例)。

@TestpublicvoidtestMySqlInjector(){Integerresult=userDao.deleteAll();System.out.println(result);}@TestpublicvoidtestMySqlInjector2(){Integerresult=emplopyeeDao.deleteAll();System.out.println(result);}注:经测试,当userDao调用deleteAll方法时,会删除tb_user表的所有数据,employeeDao调用deleteAll方法时,会删除tb_employee表的所有数据。说明deleteAll方法是有效的。不过在运行这两个测试时,由于是全表删除操作,所有要先把执行分析插件关了。

其实数据并不会轻易的删除掉,毕竟数据收集不易,所以就有了逻辑删除。逻辑删除:并不会真正的从数据库中将数据删除掉,而是将当前被删除的这条数据中的一个逻辑删除字段置为删除状态,比如该数据有一个字段logic_flag,当其值为1表示未删除,值为-1表示删除,那么逻辑删除就是将1变成-1。

@DatapublicclassUser{privateIntegerid;privateStringname;privateIntegerage;privateIntegergender;@TableLogic//标记逻辑删除属性privateIntegerlogicFlag;}注:数据库中逻辑删除字段是logic_flag,所以实体类中的logicFlag需要用@TableLogic注解标记。

@TestpublicvoidtestLogicDelete(){Integerresult=userDao.deleteById(1);System.out.println(result);//Useruser=userDao.selectById(1);//System.out.println(user);}注:运行该测试,执行删除操作的时候,真正执行的sql语句是UPDATEtb_userSETlogic_flag=-1WHEREid=,就是把逻辑删除字段的值设置为-1;当逻辑删除字段的值是-1时再执行查询操作,sql是SELECT...FROMtb_userWHEREid=ANDlogic_flag=1,所以查询结果是null。

我们知道,当我们进行插入或者更新操作时,没有设置值的属性,那么在数据表中要么是为null,要么是保留原来的值。有的时候我们我们没有赋值但是却不想让其为空,比如name属性,我们插入时会默认赋上“林志玲”,更新时会默认赋值上“朱茵”,那么就可以用公共字段自动填充。

@TableField(fill=FieldFill.INSERT_UPDATE)//插入和更新时填充privateStringname;2、编写公共字段填充处理器类:publicclassMyMetaObjectHandlerextendsMetaObjectHandler{@OverridepublicvoidinsertFill(MetaObjectmetaObject){ObjectfieldValue=getFieldValByName("name",metaObject);//获取需要填充的字段if(fieldValue==null){//如果该字段没有设置值setFieldValByName("name","林志玲",metaObject);//那就将其设置为"林志玲"}}@OverridepublicvoidupdateFill(MetaObjectmetaObject){ObjectfieldValue=getFieldValByName("name",metaObject);//获取需要填充的字段if(fieldValue==null){//如果该字段没有设置值setFieldValByName("name","朱茵",metaObject);//那就将其设置为"朱茵"}}}注:该类继承了MetaObjectHandler类,重写了insertFill和updateFill方法,在这两个方法获取需要填充的字段以及默认填充的值。

THE END
1.非关系型数据库期末考试选择题mob6454cc798a0c的技术博客目前,主流数据库包括关系型(SQL)和非关系型(NoSQL)两种。 关系数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,支持复杂的事物处理和结构化查询。代表实现有MySQL、Oracle、PostgreSQL、MariaDB、SQLServer等。 https://blog.51cto.com/u_16099335/12888195
2.MOOC数据库原理及应用MOOC数据库原理及应用电子科技大学 中国大学慕课MOOC答案第一章单元测试1单选题在数据管理技术的发展过程中,经历了人工管理阶段文件系统阶段和数据库系统阶段。在这几个阶段中数据独立性最高的是 阶段。本题答案:数据库系统 2单选题数据库的概https://www.renrendoc.com/paper/368379593.html
3.1数据库概念和mysql表的管理数据是保存在表里面的,关系型数据库的表与表之间可以是有关联的,数据之间也是有关联的。 一个关系型数据库可以有多个库,库里面保存的是表,表里面有数据。每个库是独立的。 数据库当中,多张表存储在库中,通过表与表之间的字段进行关联。 关系型数据库:并非量很低,一旦访问大量集中,数据库会很快崩溃。 http://www.360doc.com/content/24/1220/09/1720440_1142432184.shtml
4.在线题库:软考高级系统架构设计师每日一练(100)为帮助大家更好的备考软考高级系统架构设计师考试,小编为大家整理了“在线题库:软考高级系统架构设计师每日一练”内容,以供考生们参考,具体内容详见下文。 温馨提示:考生如果想了解或担心错过系统架构设计师的报名时间、考试时间、成绩查询时间、证书领取时间等时间节点,可使用“ 免费预约短信提醒”服务,预约成功,届时https://www.hqwx.com/web_news/html/2024-12/17346587043263.html
5.wms数据库设计序号log这份PDF文件是关于一个库存管理系统(WMS)的数据库设计文档,由08572班第四组承担,完成日期为2010年12月13日。文档详细描述了各个数据库表的结构和字段信息。以下是核心内容的整理: 1. 出库主单(WMSOUTSTORE) 字段:出库单编码(OUT_CODE)、原始单号(OUT_COMECODE)、出库类型(OUT_TYPE)、客服名称(OUT_CLIENT)、https://www.163.com/dy/article/JJDABL0A0531NZHC.html
6.图书馆管理系统中表tbrecord和表tbuser之间的关系是()。更多“图书馆管理系统中表tb_record和表tb_user之间的关系是()。”相关的问题 第1题 教育功能在系统内部表现为教育对个体发展的影响和作用,在整个社会系统中表现为教育对社会发展的影响和作用。() 点击查看答案 第2题 (1)将数据库“成绩管理”添加到项目“xm”中。(2)永久删除数据库中的表“coursel”。(https://www.shangxueba.cn/hangye/8lzhutk5.html
7.Mysqlselect user,host,password from mysql.user; 在mysql数据库文件中user表中查看user、hosts、 password字段的内容。 exit 或 \q 退出mysql登录 mysql -ujin -pjin 用jin用户登录到本地的mysql数据库服务器 注意:切记,mariadb数据库服务的账号是独立的,根Linux系统的账号没有任何关系。 https://blog.csdn.net/weixin_34250709/article/details/92735335
8.快速解决PostgreSQL中的Permissiondenied问题PostgreSQL如果运行日志出现类似下面的信息,这说明是当前用户没有表ac_door的所有权: 1 ERROR: must be owner of relation tb_door 你可以使用管理员postgres登录相应数据库,手动执行下面命令将tb_door的属主你希望的用户,以myuser为例: 1 Alter table tb_door owner to myuser; 2.2.3 invalid page header in blockhttps://www.jb51.net/article/203472.htm
9.OGGOGG故障错误处理总结在维护GoldenGate过程中,由于各种意外情况,难免还是会遇到各种各样的问题。掌握一些常见的GoldenGate故障诊断和错误分析的方法是非常有必要的,而且掌握这些错误分析工具也进一步加深对GoldenGate产品的认识与对GoldenGate原理的理解。 1.1GoldenGate常见异常处理 https://blog.itpub.net/26655292/viewspace-2142867/
10.用户角色权限表的关系(mysql)腾讯云开发者社区小说网站,用户表的设计。 用户有着“读者”,“作者”和“管理员”角色,角色有不同权限,如小说收藏,小说发布和广告发布 假定,用户和角色是一对一关系,即一个用户只有一个角色;角色和用户的关系是一对多关系,一个角色对应着多个用户。(方便后面对应英文单词直观反应着关系,如看到reader就是表示读者角色) https://cloud.tencent.com/developer/article/2158306
11.房屋中介管理系统数据库原理课程设计20230606173721.docxuser_recorddate 用户注册日期 datetime 10 是表4.2 房主信息表tb_user 4.3客户信息表列名描述数据类型长度是否为空 user_id 用户账号(主键) varchar 10 否 user_names 用户姓名 varchar 20 是 user_sex 用户性别 varchar 4 是 user_birth 用户生日 datetime 10 是 user_phone 用户手机 varchar 20 是 user_https://m.book118.com/html/2023/0606/8061137107005075.shtm
12.ming# TB = terabytes h = hours # d = days #--- # FILE LOCATIONS #--- # The default values of these variables are driven from the -D command-line # option or PGDATA environment variable, represented here as ConfigDir. #指定用于数据存储的目录。这个选项只能在服务器启动https://blog.xujiuming.com/ming/ad95aacf.html
13.国开《数据库应用技术》第1A. 数据结构 B. 数据操作 C. 数据库管理系统 D. 数据完整性约束 2. 关于传统关系代数的说法,错误https://www.365tiku.cn/thread-7001-1-1.html
14.GitHubbingnuoyuan/F2ETutorialdpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算 - 人间奇迹 - 博客园 Android系统字体规范与应用探索 | 设计达人 Android 4.1 4.2 webkit开启默认缩放设置后meta中target-densitydpi配置会影响其他页面的解决方法 | 天宇空间 关于meta viewport中target-densitydpi属性 - fengri5566的专栏 - 博客频道 https://github.com/bingnuoyuan/F2E-Tutorial-Collect
15.中央广播电视总台CGTN新媒体系统公有云服务采购项目中标公告1 A系统-API网关-请求 Amazon Web Services亚马逊云 API Gateway ApiGatewayRequest (China) 5 30.6765 REST API请求,最大每秒请求数:3000,最大连接数:50000。基础计价单位:1000000个 2 A系统-内容分发-HTTP请求 Amazon Web Services亚马逊云 CloudFront Requests-Tier1 (China) 0.5 0.1https://zycg.gov.cn/freecms/site/zygjjgzfcgzx/ggxx/info/2022/81000a55-14b8-498b-9dc3-b33acbfa0b8f.html?id=9c60f871-3975-11ed-9548-fa163e9acaa1