mybatis-plus官网:https://baomidou.gitee.io/mybatis-plus-doc/#/
使用目的:完成单表的CRUD,类似于jpa的单表操作, 以减少不必要的工作量。
注意:防止不必要的麻烦请保证版本相互兼容,最好仅引入start依赖(Invalid bound statement (not found) 有可能就是版本兼容引起的)
步骤:
1. 添加mybatis-plus-boot-starter到pom文件,以及数据库连接相关的依赖
2. 添加配置文件(只配置mybatis-plus即可):mybatis-plus.mapper-locations=classpath:mapper/*.xml
3. 实体类添加表名和主键名注解
4. mapper接口继承BaseMapper类
5. 使用mybatis-plus提供的相关方法
1. pom文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0-RELEASE</version>
</dependency>
2. 添加配置文件
#数据库连接
server.port=8080
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.username=c##scott
spring.datasource.password=tiger
#如果mapper.xml放在mapper接口相同的包内, 则不用配置以下内容
#idea工具开发时, 如果mapper.xml和mapper接口在相同的包中, 则需在pom.xml中做相应的配置,
#idea编辑时,默认忽略java代码目录中的非java文件
#mybatis
mybatis-plus.mapper-locations=classpath*:mapper/**/*Mapper.xml
#如果仅添加上面的mapper地址, 不能找到statement, 则将下面的配置打开
#mybatis.mapper-locations=classpath*:mapper/**/*Mapper.xml
3. 实体类添加表名和主键名注解
@Data
@TableName("emp") //指定表名
public class EmpModel {
//指定主键列, 主键是自增类型(如果不设置, 第一次插入的id值就可能会非常大)
@TableId(value = "empno", type = IdType.AUTO)
private String empno;
private String ename;
private String deptno;
}
4. mapper接口继承BaseMapper类
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface EmpMapper extends BaseMapper<EmpModel> {
//此处并未定义任何方法
}
5. 使用mybatis-plus提供的相关方法
import com.carl.study.mybatisplus.mybatisplus.mapper.EmpMapper;
import com.carl.study.mybatisplus.mybatisplus.model.EmpModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author changez
* @desc
* @datetime 2019/5/12 20:17
*/
@Service
public class EmpServiceImpl {
@Autowired
private EmpMapper empMapper;
public EmpModel queryEmp(String empno){
//调用mybatis-plus提供的selectById方法, 此时mapper类中并未写该方法,也未写mapper.xml文件
EmpModel single = empMapper.selectById(empno);
return single;
}
}
6. idea开发工具,且mapper.xml和mapper接口在同一包下时相关配置
<resources>
<resource>
<directory>src/main/Java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml </include>
</includes>
</resource>
</resources>
7. 开发注意点
****updateById: 通过id更新实体
** 默认情况下, 仅更新参数不为null的字段
** 如果要处理当字段为null的时候, 也更新数据库的字段, 有三种处理方式
*1. 在字段添加注解(仅有对当前字段, 特殊处理null值的情况):
@TableField(strategy = FieldStrategy.IGNORED)
private String phone;
*2. 在配置文件中添加全局配置(针对所有字段, 特殊处理null值的情况)
mybatis-plus:
mapper-locations: classpath*:mapper/**/*Mapper.xml
global-config:
db-config:
# com.baomidou.mybatisplus.annotation.FieldStrategy
field-strategy: IGNORED
*3. 最方便的, 回到原始的mybatis, 在mapper.xml文件中实现sql逻辑
**** 忽略某个字段,默认情况下mybatis-plus认为实体中的所有字段都对应的有数据库字段, 如果数据库中没有该字段,则会报错. 解决方案为在字段上添加相关注解, 如下;
@TableField(exist = false)
private String phone;