条件生成器
在Mybatis的BaseMapper父类种可以看到很多方法种带有条件生成器
条件生成器(EntityWrapper):就是在SQL种的where条件进行对应
EntityWrapper简介
Mybatis-Plus 通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者 Condition(与 EW 类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担, 能够有效提高开发效率
实体包装器,主要用于处理 sql 拼接,排序,实体参数查询等
注意: 使用的是数据库字段,不是 Java 属性!
条件生成器常用方法
查询方式 | 说明 |
---|---|
eq(键,值) | eq 匹配与键值相等的数据 |
ne(键,值) | ne 匹配与键值不相等的数据 |
gt(键,值) | gt 匹配大于键值的数据 |
ge(键,值) | ge 匹配大于等于键值的数据 |
lt(键,值) | lt 匹配小于键值的数据 |
le(键,值) | le 匹配小于等于键值的数据 |
between(键,值1,值2) | between 匹配区间内的数据 BETWEEN 值1 AND 值2 |
notBetween(键,值1,值2) | notBetween 匹配区间外的数据 NOT BETWEEN 值1 AND 值2 |
like(键,值) | like 模糊查询 前后模糊 %值% |
notLike(键,值) | notLike 排除值的模糊查询 |
isNull(键,值) | isNull 匹配键值为空的数据 |
isNotNull(键,值) | isNotNull 匹配键值不为空的数据 |
groupBy(键1,键2,…) | groupBy 分组查询 |
orderByAsc(键1,键2,…) | orderByAsc 根据键值升序排列 |
orderByDesc(键1,键2,…) | orderByDesc 根据键值降序排列 |
setSqlSelect | 设置Select查询字段 |
---|---|
and | 拼接字段=值 |
last(“sql”) | 在SQL末尾添加sql |
操作实例
// 设置一个条件生成器 表示sql的查询条件
QueryWrapper<UserBean> queryWrapper = new QueryWrapper<UserBean>();
queryWrapper.eq("id",1);
UserBean userBean = userdao.selectOne(queryWrapper);
System.out.println("查询的id是:"+userBean.getId());
QueryWrapper<UserBean> queryWrapper1 = new QueryWrapper<UserBean>();
queryWrapper.gt("id",2);
List<UserBean> userBeans = userdao.selectList(queryWrapper1);
System.out.println("查询的id大于1的个数:"+userBeans.size());
操作类推
ActiveRecord(活动记录)
- Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的 一个表,而模型类的一个实例对应表中的一行记录。
- ActiveRecord 一直广受动态语言( PHP 、 Ruby 等)的喜爱,而 Java 作为准静态语言, 对于 ActiveRecord 往往只能感叹其优雅,所以 MP 也在 AR 道路上进行了一定的探索
操作
可以不通过Dao层,只需要通过实体类进行操作数据库但是一般还是通过Dao层来操作,符合设计模式思想
JavaBean实体类继承Model<指定JavaBean>类
@Component("user")
@TableName("user")
public class UserBean extends Model<UserBean> {
@TableId(type= IdType.AUTO)
private long id;
@TableField()
private String cname;
private String mobile;
private String qq;
private double money;
常用方法
方法 | 描述 |
---|---|
public boolean insert() | 对象调用新增,将自己新增 |
public boolean updateById() | 自己修改自己 |
public T selectById() | |
public T selectById(Serializable id) | |
public List selectAll() | |
public List selectList(Wrapper wrapper) | |
public int selectCount(Wrapper wrapper) | |
public boolean deleteById() | 删除返回真假 |
public boolean deleteById(Serializable id) | 通过参数指定id删除 |
public boolean delete(Wrapper wrapper) | 通过条件生成器删除 |
public Page selectPage(Page page, Wrapper wrapper) | 分页的复杂操作 |
实例
// 通过IOC获取JavaBean对象
UserBean userdao = context.getBean("user", UserBean.class);
// JavaBean继承了Model调用Model方法进行操作准确的数据库操作
boolean b = userdao.deleteById(3);
System.out.println("是否删除成功:"+b);
List<UserBean> userBeans = userdao.selectAll();
System.out.println("查询剩余数量:"+userBeans.size());
println(“是否删除成功:”+b);
List<UserBean> userBeans = userdao.selectAll();
System.out.println("查询剩余数量:"+userBeans.size());
![在这里插入图片描述](https://img-blog.csdnimg.cn/debbfc866dd345c9af54d2e7e2f48958.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5qCRX3RyZWU=,size_20,color_FFFFFF,t_70,g_se,x_16)
# MP代码生成器
MP 提供了大量的自定义设置,生成的代码完全能够满足各类型的需求
MP 的代码生成器 和 Mybatis MBG 代码生成器:
MP 的代码生成器都是基于 java 代码来生成。
MBG 基于 xml 文件进行代码生成
MyBatis 的代码生成器可生成: 实体类、Mapper 接口、Mapper 映射文件 MP 的代码生成器可生成: 实体类(可以选择是否支持 AR)、Mapper 接口、Mapper 映射 文件、 Service 层、Controller 层
MP 的代码生成器默认使用的是 Apache 的 Velocity 模板,当然也可以更换为别的模板 技术,例如 freemarker。此处不做过多的介绍。
## 引入依赖
Mybatis-plus的版本不同可能操作也会不同。
具体可以上网搜索API
```xml
<dependencies>
<!--代码生成器依赖-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<!--slf4j依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--下面是整合Mybatis-plus需要的依赖 。。。。。。。。。。。。。。。。。。。。。。。 -->
<!--Mybati-plus需要的jar文件-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.3</version>
</dependency>
<!--数据库需要的jar文件-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!--引入了SpringMVC依赖中包含了所有的Spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!--Spring操作数据库,还需要spring-jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.3.RELEASE</version>
</dependency>
</dependencies>
进行测试类代码编写
// 通过Junit可以进行在测试类种编写测试方法。
// 为代码生成器提供执行方式
@Test
public void MqCode() {
//全局配置
GlobalConfig config = new GlobalConfig();
config.setActiveRecord(true) //是否支持AR模式
.setAuthor("wsl") //作者
.setOutputDir("G:\\IDEAworksapce01\\SpringMybatisplus\\src\\main\\java")//生成路径
.setFileOverride(true)//文件覆盖
.setServiceName("%sService") //设置生成的service接口名 首字母是否为I
.setIdType(IdType.AUTO); //主键策略
//数据源配置
DataSourceConfig dsConfig = new DataSourceConfig();
dsConfig.setDbType(DbType.MYSQL)
.setUrl("jdbc:mysql://localhost:3306/usershow")
.setDriverName("com.mysql.jdbc.Driver")
.setUsername("root")
.setPassword("ok");
//策略配置
StrategyConfig stConfig = new StrategyConfig();
stConfig.setCapitalMode(true) // 全局大写命名
.setDbColumnUnderline(true) //表名 字段名 是否使用下滑 线命名
.setNaming(NamingStrategy.underline_to_camel) // 数据 库表映射到实体的命名策略
.setInclude("user") //生成的表
.setTablePrefix("tbl_"); // 表前缀
//包名策略
PackageConfig pkConfig = new PackageConfig();
pkConfig.setParent("com.atguigu.mp")
.setController("controller")
.setEntity("beans")
.setService("service");
AutoGenerator ag = new AutoGenerator().setGlobalConfig(config)
.setDataSource(dsConfig)
.setStrategy(stConfig)
.setPackageInfo(pkConfig);
ag.execute();
}
执行成功后的目录结构
小结
主要操作就是几个实现类。
在这些操作了中进行约定好的配置进行操作。创建文件夹,创建java文件等操作
实现类 | 功能 |
---|---|
GlobalConfig | 全局配置:锁定需要生成的位置 |
DataSourceConfig | 数据源配置:锁定准确的数据库 |
StrategyConfig | 策略配置:生成java代码和xml文件 |
PackageConfig | 包名策略:生成包结构 |
AutoGenerator | 集合策略:将以上的类对象放入该类中,该类进行总执行 |