- 使用断点查看当前源代码中的sql语句 MyBatisPlus是如何为我们创建sql语句的
MyBatisPlus在启动时就会将当前继承了 接口的dao接口中的方法所需要用到的SQL全部创建好,便于我们在操作使用
保存在Configuration 中的MappedStatements (这个对象会存在多个,每一个对象对应一条sql语句)
简介
条件构造器(Wrapper)的作用:
MP提供的通用Mapper中,删改查(没有insert)的方法通常会需要我们传入一个条件构造器,用来生成最后执行的SQL语句。
比如List selectList( Wrapper wrapper)方法,当我们传入null时,默认生成的语句就是select * from xxx,这条语句没有查询条件,排序,子查询,模糊查询并且固定查询所有的字段,如果我们需要一些复杂的查询条件,就可以使用条件构造器来指定我们的SQL需要拼接那些查询条件。
Wrapper : 条件构造抽象类,最顶端父类
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper : Entity 对象封装操作类,不是用lambda语法
UpdateWrapper : Update 条件封装,用于Entity对象更新操作
AbstractLambdaWrapper :
Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
LambdaQueryWrapper :
看名称也能明白就是用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper :
Lambda 更新封装Wrapper
实际使用中,
如果要使用MP的查询、删除方法,通常使用QueryWrapper作为条件的封装实现类;因为它的功能比较强大。
如果要使用MP的修改方法,通常使用UpdateWrapper作为条件的封装实现类,因为它提供了一些独有的方法,适用于update操作,比如set和setSql方法;
其实QueryWrapper和UpdateWrapper的大多数方法都是继承自AbstractWrapper,两者在大部分条件下都是可以互相替换的。
案例:
- 介于 值1和值2之间
- 不介于值1和值2之间
- 获取包含值的对象
- 获取不包含值的对象
- 获取对象中最后一个是值的对象
- 获取对象中最前一个是值的对象
- 字段是null
- 字段 IS NOT NULL
- 字段 IN(v0,v1,v2) 给定多个条件,找符合条件的对象
- 字段 (v0,v1,v2) 给定的条件 排除所有符合条件对象
-
查询指定列的 数据 根据指定条件查询,通过sql命令来指定
-
查询指定列的数据 除了指定条件的, 通过sql命令来指定
- 或者
- 和 不适用and 就是默认and
注意事项:
主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接)
- 如果条件为真则会执行主sql语句
- 如果条件为假则会执行主sql语句
- 升序排列
- 降序排列
Activce Record 是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录
ActiceRecord 一直广受动态语言 PHP Ruby 的喜 爱,而Java作为准静态语言 对于ActiveRecord 往往只能感叹其优雅,所以MP也在AR道路上进行了一定的探索
开发步骤
- 首先需要当前的实体类对象继承一个类
- 重写当前类中的方法 指向当前实体类属性所对应的表中主键
- 测试
注意:因为使用Spring集成开发MyBatisPlus 所以需要先使用工厂创建当前的DAO对象,然后才可以使用ActiveRecord 来操纵实体类对数据库进行CRUD
MyBatisPlus代码生成器: 实体类 (可以控制当前实体类是否支持AR ActiveRecord) Mapper接口(DAO接口) Mapper 映射文件 Service 层 Controller 层 等等
在MyBatis 中,建议数据库 表名 和数据库字段名 采用驼峰命名方式,如果采用下划线命名方式,最好在配置文件中开启全局下划线开关,如果表名字段方式不一致需要使用注解指定,我们最好保持一致 这样做的原因是为了避免在对应实体类产生时的性能损耗,这样字段不用做映射就能直接和实体类对应,当然如果项目中不考虑这点性能损耗,那么采用下划线也是没有问题的
代码生成器依赖
- 模板引擎
Apache Velocity
Apache Velocity是一个基于Java的模板引擎,它提供了一个模板语言去引用由Java代码定义的对象。Velocity是Apache基金会旗下的一个开源软件项目,旨在确保Web应用程序在表示层和业务逻辑层之间的隔离(即MVC设计模式)。
用途
下面是一些利用Velocity的常见应用类型:
- Web应用程序:网页设计者创建HTML页面,并为动态信息预留占位符。页面再由VelocityViewServlet或任何支持Velocity的框架处理。
- 源代码生成:Velocity可基于模板生成Java、SQL或Postscript源代码。大量的开源和商业软件包的开发就是这样利用Velocity。[1]
- 电子邮件自动生成:许多应用程序为了账户注册、密码提醒或自动寄送报表之需自动生成电子邮件。利用Velocity,电子邮件模板可以存储在一个文本文件,而不是直接嵌入到电子邮件生成器的Java代码中。
- XML转化:Velocity提供一个Ant任务——Anakia。Anakia读取XML文件,利用Velocity模板转换成所需的文档格式。常见的应用是将某种格式的文档转换成的一个带样式的HTML文档。
开发步骤
- 添加依赖到当前项目中
导入依赖完毕之后,开始完成当前的代码自动是生成的相关设置
执行当前测试类中的当前方法
当运行结束后,会自动弹出 并且刷新当前工作目录则会出现 我们预先配置好的相关设置 自动生成的类
位置
//5.整合配置
//将上述所有内容进行相关配置
AutoGenerator ag = new AutoGenerator();
ag.setGlobalConfig(gc)
.setDataSource(dsConfig)
.setStrategy(stConfig)
.setPackageInfo(packageConfig);