目录
7.QueryWrapper与LambdaQueryWrapper
1.MyBatisPlus简介
主要就是简化MyBatis开发。
2.MyBatisPlus入门操作
1.引入依赖:需要引入mp和mysql驱动依赖。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
2.编写配置文件,主要是数据库连接信息
spring:
profiles:
active: dev
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/duolaimi?serverTimezone=GMT%2B8
username: root
password: root
注意:有些版本的jdbc连接数据库的地址后面必须要加上时区,如serverTimezone=GMT%2B8,不加就会启动报错
3.mapper层
原来的mapper接口需要继承BaseMapper并传入对应的泛型即可,BaseMapper中包含了基本的增删改查方法。
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
4.service层
原来的service接口继承IService,并传入对应的泛型即可,IService里面也包含了基础的增删改查的业务方法。
public interface UserService extends IService<User> {
}
5.serviceimpl层
serviceimpl类需要实现原来定义好的service接口,但是只是实现了却没有重写必须的方法,所以需要继承ServiceImpl类,其中需要传两个泛型,第一个泛型是mapper接口,第二个泛型是实体类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
6.编写controller
注入service对象,然后直接调用增删改查方法即可。
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/test")
public String test(){
User user = userService.getById(1);
System.out.println(user);
return user.toString();
}
}
3.MP开启日志
直接使用如下配置即可开启日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
开启日志后,每次对数据库进行操作时,会有如下信息输出:
4.MP的自动映射规则
1.表名和实体类名映射,比如user表对应User实体类
2.字段名和实体类属性名映射,如字段名name对应实体类属性名name(getXxx或者setXxx)
3.属性映射默认支持小驼峰命名方式
5.表映射
1.如果表名与实体类名不一致,则可以使用@TableName("xxx")这个注解手动指定映射关系
2.如果每张表都有固定前缀的话,我们可以开启全局配置,使用如下配置指定表名的前缀
mybatis-plus:
global-config:
db-config:
table-prefix: xxx_
6.字段映射
如果数据库字段与类中的属性名不一样,可以直接在属性上使用@TableFiled指定数据库字段名称
@TableField("xxx")
private String name;
如果字段或者属性是数据库中的关键字,则可以在@TableField中使用``(飘号)包起来。
如果希望被查询的字段不展示,则可以在@TableField使用select=false属性
如果数据库中的字段不存在,但是实体对象中有属性,可以使用@TableField中的exist=false属性
7.QueryWrapper与LambdaQueryWrapper
这两个是构建条件查询的对象,QueryWrapper后面的参数通过字符串传入,LambdaQueryWrapper可通过lambda表达式传入,写法上更优雅
如果是多条件查询,可以使用两种方法:
1.LambdaQueryWrapper里的条件方法,一直拼条件
2.QueryWrapper里的allEq()方法,参数传map
方法说明:
- eq:等值查询
- ne:不等查询
- gt:大于查询
- ge:大于等于查询
- lt:小于查询
- le:小于等于查询
- between:区间查询
- notBetween:不在区间查询
- like:模糊查询
- notLike:不包含查询
- likeLeft:左包含查询
- likeRight:右包含查询
- isNull:空值查询
- isNotNull:非空值查询
- in:包含查询
- notIn:不包含查询
- inSql:包含查询,只不过后面的参数会将传入的sql整个放入in后面
- notInSql:不包含查询,后面传sql字符串的方式
8.分组查询
分组查询一般