7.6(Mybatis-plus)条件构造器和AR操作,MP代码生成器

条件生成器

在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(活动记录)

  1. Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的 一个表,而模型类的一个实例对应表中的一行记录。
  2. 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集合策略:将以上的类对象放入该类中,该类进行总执行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值