Mybatis-Plus学习day01(下)

简介: Mybatis-Plus学习day01

4.1.3 typeAliasesPackage

MyBaits 别名包扫描路径,通过该属性可以给包中的类注册别名,注册后在 Mapper 对应的 XML 文件中可以直接使用类名,而不用使用全限定的类名(即 XML 中调用的时候不用包含包名)

SpringBoot:

mybatis-plus:
  type-aliases-package: com.rg.boot.bean

SpringMVC:

< bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
  <property name="typeAliasesPackage" value=com.rg.boot.bean"/>
</bean>

4.1.4mapUnderscoreToCamelCase

  • 类型:boolean
  • 默认值:true

是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射。注意:此属性在 MyBatis 中原默认值为 false

# 关闭自动驼峰映射,该参数不能和mybatis-plus.config-location同时存在,因为这个配置也可以在文件中进行,所以两者可能进行冲突!
mybatis-plus:
#  config-location: classpath:mybatis-config.xml
  configuration:
    map-underscore-to-camel-case: false
    cache-enabled: false

4.1.5 cacheEnabled

  • 类型: boolean
  • 默认值: true

全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存,默认为 true。

mybatis-plus:
  configuration:
    cache-enabled: false

4.2 DB 策略配置

4.3.1、idType

  • 类型: com.baomidou.mybatisplus.annotation.IdType
  • 默认值: ID_WORKER
AUTO 数据库ID自增
INPUT 用户输入ID
ID_WORKER 全局唯一ID,Long类型的主键
ID_WORKER_STR 字符串全局唯一ID 多少位取决于数据库表的设计
UUID 全局唯一ID,UUID类型的主键 32位字符串类型
NONE 该类型为未设置主键类型

全局默认主键类型,设置后,即可省略实体对象中的@TableId(type = IdType.AUTO)配置。

SpringBoot:

mybatis-plus.configuration.map-underscore-to-camel-case=false
<!-- 这里使用MP提供的sqlSessionFactory,完成了Spring与MP的整合-->
  <bean id="sqlSessionFactory"
class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="globalConfig">
      <bean class="com.baomidou.mybatisplus.core.config.GlobalConfig">
        <property name="dbConfig">
          <bean
class="com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig">
            <property name="idType" value="AUTO"/>
          </bean>
        </property>
      </bean>
    </property>
  </bean>

4.3.2、tablePrefix

  • 类型: String
  • 默认值: null

表名前缀,全局配置后可省略 @TableName()配置。

SpringBoot:

mybatis-plus.global-config.db-config.table-prefix =tb_ 

SpringMVC:

<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="globalConfig">
      <bean class="com.baomidou.mybatisplus.core.config.GlobalConfig">
        <property name="dbConfig">
          <bean
class="com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig">
            <property name="idType" value="AUTO"/>
            <property name="tablePrefix" value="tb_"/>
          </bean>
        </property>
      </bean>
    </property>
  </bean>

5 条件构造器

在MP中,Wrapper接口的实现类关系如下:

380a79b62dfe4c1fac76175b4a762a2a.png


可以看到, AbstractWrapper和AbstractChainWrapper是重点实现,接下来我们重点学习AbstractWrapper以及其子类。

allEq

allEq(Map<R, V> params)
allEq(Map<R, V> params, boolean null2IsNull)
allEq(boolean condition, Map<R, V> params, boolean null2IsNull)

个别参数说明:


params : key为数据库字段名,value为字段值

null2IsNull : 为true则在map的value为null时调用 isNull 方法(也就是添加 字段 IS NULL的条件), 为false时则忽略value为null的条件(也忽略 字段 IS NULL的条件)

allEq(BiPredicate<R, V> filter, Map<R, V> params)
allEq(BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull) 

个别参数说明:

filter : 过滤函数,是否允许字段传入比对条件中

paramsnull2IsNull : 同上

测试代码:

 @Test
    public void testAllEq(){
        Map <String, Object> params = new HashMap <>();
        params.put("name", "李四");
        params.put("age","20");
        params.put("password", null);
        QueryWrapper <User> wrapper = new QueryWrapper <>();
        //SELECT id,user_name,password,name,age,email FROM tb_user WHERE (password IS NULL AND name = ? AND age = ?)
       // wrapper.allEq(params);
        // SELECT id,user_name,password,name,age,email FROM tb_user WHERE (name = ? AND age = ?)
        //wrapper.allEq(params,false);//false:忽略条件为null的 条件
        //SELECT id,user_name,password,name,age,email FROM tb_user WHERE (age = ?)
       // wrapper.allEq((k, v) -> (k.equals("age") || (k.equals("id"))), params);//filter : 过滤函数,是否允许字段传入比对条件中==>只需要满足age和id一个就可
        // SELECT id,user_name,password,name,age,email FROM tb_user WHERE (name = ? AND age = ?)
        wrapper.allEq((k, v) -> (k.equals("age") || (k.equals("id"))||(k.equals("name"))), params);
        List <User> userList = userMapper.selectList(wrapper);
        // for (User user : userList) {
        //     System.out.println(user);
        // }
    }

基本比较操作:

eq

等于=

ne

不等于 <>

gt

大于 >

ge

大于等于 >=

lt

小于<

le

小于等于 <=

between

BETWEEN 值1 AND 值2

notBetween

NOT BETWEEN 值1 AND 值2

In

字段 IN(Value.get(0),value.get(1)…)

notIn

字段 NOT IN (v0, v1, …)

测试代码:

  @Test
    public void testEq(){
        QueryWrapper <User> wrapper = new QueryWrapper <>();
        //SELECT id,user_name,password,name,age,email FROM tb_user WHERE (password = ? AND age >= ? AND name IN (?,?,?))
        wrapper.eq("password", "123456")
                .ge("age", 20)
                .in("name", "李四", "王五", "赵六");
        List <User> users = userMapper.selectList(wrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }

模糊查询


like

LIKE ‘%值%’

例: like("name", "王")—>name like '%王%'

notLike

NOT LIKE ‘%值%’

例: notLike("name", "王")—>name not like '%王%'

likeLeft

LIKE ‘%值’

例: likeLeft("name", "王")—>name like '%王'

likeRight

LIKE ‘值%’

例: likeRight("name", "王")—>name like '王%'

测试代码:

 @Test
    public void testLike(){
        QueryWrapper <User> wrapper = new QueryWrapper <>();
        // SELECT id,user_name,password,name,age,email FROM tb_user WHERE (name LIKE ?)
        //  %五(String)
        wrapper.likeLeft("name", "五");
        List <User> users = userMapper.selectList(wrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }

逻辑查询

or


拼接 OR

例: eq("id",1).or().eq("name","老王")—>id = 1 or name = '老王'

and


AND 嵌套


例: and(i -> i.eq("name", "李白").ne("status", "活着"))—>and (name = '李白' and status <> '活着')


注意事项:主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接)


测试代码:

 @Test
    public void testOr(){
        QueryWrapper <User> wrapper = new QueryWrapper <>();
        //SELECT id,user_name,password,name,age,email FROM tb_user WHERE (name = ? OR age = ?)
        wrapper.eq("name", "王五").or().eq("age", 21);
        List <User> users = userMapper.selectList(wrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }

排序

order


排序:ORDER BY 字段, …

例: orderBy(true, true, "id", "name")—>order by id ASC,name ASC

orderBy


排序:ORDER BY 字段, … ASC

例: orderByAsc("id", "name")—>order by id ASC,name ASC

orderByAsc


排序:ORDER BY 字段, … ASC

例: orderByAsc("id", "name")—>order by id ASC,name ASC

orderByDesc


排序:ORDER BY 字段, … DESC

例: orderByDesc("id", "name")—>order by id DESC,name DESC

@Test
    public void testOrderByAgeDesc(){
        QueryWrapper <User> wrapper = new QueryWrapper <>();
        // SELECT id,user_name,password,name,age,email FROM tb_user ORDER BY age DESC
        wrapper.orderByDesc("age");
        List <User> users = userMapper.selectList(wrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }

指定查询字段—select

  • 设置查询字段
  • 例: select("id", "name", "age")
  • 例: select(i -> i.getProperty().startsWith("test"))
 @Test
    public void testSelect(){
        QueryWrapper <User> wrapper = new QueryWrapper <>();
        //com.rg.boot.MybatisPlusSpringbootApplicationTests#testSelect
        wrapper.eq("name","王五")
                .or()
                .eq("age",21)
                .select("id","name","age");//指定查询的字段
        List <User> users = userMapper.selectList(wrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }

groupBy

groupBy(R... columns)
groupBy(boolean condition, R... columns)


  • 分组:GROUP BY 字段, …
  • 例: groupBy("id", "name")—>group by id,name

判断非空

  • isNull
  • 字段 IS NULL
  • 例: isNull("name")—>name is null
  • isNotNull
  • 字段 IS NOT NULL
  • 例: isNotNull("name")—>name is not null
相关文章
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
98 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
Java 关系型数据库 数据库连接
mybatis-plus学习
MyBatis-Plus ,MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。
47 5
|
3月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
3月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
3月前
|
Java 数据库连接 测试技术
后端框架的学习----mybatis框架(8、lombok)
这篇文章介绍了如何在MyBatis框架中使用lombok库来简化Java实体类的编写,包括在IDEA中安装Lombok插件、在项目中导入lombok依赖以及在实体类上使用Lombok提供的注解。
|
3月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(5、分页)
这篇文章介绍了如何在MyBatis框架中实现分页功能,包括使用SQL的`limit`语句进行分页和利用MyBatis的`RowBounds`对象进行分页的方法。
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(7、使用注解开发)
这篇文章讲述了如何使用MyBatis框架的注解方式进行开发,包括在接口上使用注解定义SQL语句,并通过动态代理实现对数据库的增删改查操作,同时强调了接口需要在核心配置文件中注册绑定。
|
6月前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
|
5月前
|
Java 数据库连接 Maven
Mybatis学习
Mybatis学习
28 0