一.配置
在MP中有大量的配置,其中有一部分是Mybatis原生的配置,另一部分是MP的配置,详情:https://mybatis.plus/config
1.基本配置
【1】configLocation--自己单独的MyBatis配置的路径
#MyBatis配置文件位置,如果您有单独的MyBatis配置,请将其路径配置到configLocation中
mybatis-plus.config-location=classpath:mybatis-config.xml
SpringMVC的xml中写法:
<bean id="sqlSessionFactory"
class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
【2】mapperLocations--MyBatis Mapper所对应的XML文件位置
如果你在Mapper中有自定义方法(XML中有自定义实现),需要进行配置,告诉Mapper所对应的XML文件位置。
mybatis-plus.mapper-locations=classpath*:mybatis/*.xml
SpringMVC的xml中写法:
<bean id="sqlSessionFactory"
class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="mapperLocations" value="classpath*:mybatis/*.xml"/>
</bean>
Maven多模块项目的扫描路径需以classpath*:开头(即加载多个jar包下的XML文件)
【3】typeAliasesPackage--给包中的类注册别名,使得Mapper对应的XML文件中可以直接使用类名,而不用使用全限定的类名
mybatis-plus.type-aliases-package=cn.itcast.mp.pojo
SpringMVC的xml中写法:
<bean id="sqlSessionFactory"
class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="typeAliasesPackage"
value="com.baomidou.mybatisplus.samples.quickstart.entity"/>
</bean>
2.进阶配置(MyBatis原生的配置)
本部分的配置大都为MyBatis原生支持的配置,这意味这您可以通过MyBatis XML配置文件的形式进行配置。
【1】mapUnderscoreToCamelCase--开启自动驼峰命名规则映射
#关闭自动驼峰映射,该参数不能和mybatis-plus.config-location同时存在
mybatis-plus.configuration.map-underscore-to-camel-case=false
【2】cacheEnable--全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存
mybatis-plus.configuration.camel-enabled-=false
3.DB策略配置
【1】idType--全局默认主键属性,设置后,即可省略实体对象中的@TableId(type=IdType.AUTO)配置。
mybatis-plus.global-config.db-config.id-type=auto
【2】tablePrefix--表名前缀,全局配置后可以省略@TableName属性
mybatis-plus.global-config.db-config.table-prefix=tb_
二.条件构造器
接下去,我们重点学习AbstractWrapper以及其子类
【1】allEq
QueryWrapper<User> wrapper=new QueryWrapper<>();
//设置条件
Map<String,Object> params=new HashMap<>();
params.put("name","曹操");
params.put("age","20");
params.put("password",null);
//SELECT * FROM tb_user WHRER password IS NULL AND name = ? AND age = ?
wrapper.allEq(params);
//SELECT * FROM tb_user WHRER AND name = ? AND age = ?
// wrapper.allEq(params,false);
List<User> users=this.userMapper.selectList(wrapper);
for (User user:users){
System.out.println(user);
}
【2】基本比较操作
eq(=),ne(不等于),gt(大于),ge(大于等于),It(小于),Ie(小于等于)
between(BETWEEN 值1 AND 值2),notBetween(NOT BETWEEN 值1 AND 值2)
in--字段IN(value.get(0),value.get(1),...)
notIn--字段NOT IN(v0,v1,...)
【3】模糊查询
like,noLike,likeLeft,likeRight
//SELECT id,user_name,password,name,age,email FROM tb_user WHERE name LIKE "%曹%"
wrapper.like("name","曹");
//SELECT id,user_name,password,name,age,email FROM tb_user WHERE name not LIKE "%曹%"
wrapper.noLike("name","曹");
//SELECT id,user_name,password,name,age,email FROM tb_user WHERE name LIKE "%曹"
wrapper.likeLeft("name","曹");
//SELECT id,user_name,password,name,age,email FROM tb_user WHERE name LIKE "曹%"
wrapper.likeRight("name","曹");
【5】逻辑是or还是and(默认是and)
.or()
.and()
//SELECT id,name,age FROM tb_user WHERE name=? and age=?
wrapper.eq("name","李四")
.or()
.eq("age",24)
.select("id","name","age");
【6】select--通过select方法进行指定要查询哪些字段
//SELECT id,name,age FROM tb_user WHERE name=? and age=?
wrapper.eq("name","李四")
.eq("age",24)
.select("id","name","age");
注:最后你还是要用类来接收,不过类中除了查询的字段其他都为空。
【7】将结果排序
orderByDesc或orderByAsc。例:
courseDetailQueryWrapper.eq("course_teacher",teacherId).orderByDesc("begin_time");
三.LambdaQueryWrapper
LambdaQueryWrapper与QueryWrapper,但是使用Lambda表达式,更安全。
写法也类似,只是将原来的字段名用实体类中的属性表示。
LambdaQueryWrapper<Like> likeLambdaQueryWrapper=new LambdaQueryWrapper<>();
likeLambdaQueryWrapper.eq(Like::getMusicId,like.getMusicId());
可以看到,从原来QueryWrapper的字段名用实体类中的属性表示。这样还有一个好处就是我们修改修改数据库的字段名字的使用就不用修改每一个的条件构造器了。