MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上做了增强。官方地址
在Spring Boot2工程项目中引入依赖
<properties>
<java.version>1.8</java.version>
<lombok.version>1.18.6</lombok.version>
<druid.version>1.1.13</druid.version>
<jodd.version>5.0.10</jodd.version>
<mybatis-plus.version>3.3.1.tmp</mybatis-plus.version>
</properties>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
数据源采用Druid,数据库采用Oracle
<dependency>
<!--依赖阿里巴巴的Druid数据源-->
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!--Oracle 数据库驱动依赖-->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.username=scott
spring.datasource.password=tiger
#Druid数据源相关配置
# 配置初始化大小、最小、最大
spring.datasource.druid.initial-size=5
#最小空闲连接数
spring.datasource.druid.min-idle=3
#最大空闲连接数
spring.datasource.druid.max-active=20
#配置获取连接等待超时的时间
spring.datasource.druid.max-wait=60000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
#配置一个连接在池中最小生存的时间 单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
#用来检测连接是否有效的sql,要求是一个查询语句
spring.datasource.druid.validation-query=SELECT 'x' FROM DUAL
#申请连接的时候检测
spring.datasource.druid.test-while-idle=true
#申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能
spring.datasource.druid.test-on-borrow=false
# 归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能
spring.datasource.druid.test-on-return=false
#打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=50
#Filter配置
spring.datasource.druid.filters=wall,stat,log4j2
#Druid内置提供一个StatFilter,用于统计监控信息。
#是否启用StatViewServlet(监控页面)默认值为false(考虑到安全问题默认并未启动,
#如需启用建议设置密码或白名单以保障安全)
spring.datasource.druid.stat-view-servlet.enabled=true
#设置监控页面账号
spring.datasource.druid.stat-view-servlet.login-username=smith
#配置监控页面访问密码
spring.datasource.druid.stat-view-servlet.login-password=123456
#在StatViewSerlvet输出的html页面中,有一个功能是Reset All,执行这个操作之后,
#会导致所有计数器清零,重新计数。你可以通过配置参数关闭它
spring.datasource.druid.stat-view-servlet.reset-enable=false
#配置访问控制 deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝。
#如果allow没有配置或者为空,则允许所有访问
spring.datasource.druid.stat-view-servlet.allow=192.168.31.15
#设置禁止访问监控页面的IP地址 不支持IPV6
spring.datasource.druid.stat-view-servlet.deny=127.0.0.1,127.0.0.2
#慢SQL记录
spring.datasource.druid.filter.stat.enabled=true
spring.datasource.druid.filter.stat.db-type=oracle
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.merge-sql=true
#慢sql时间设置,即执行时间大于200毫秒的都是慢sql
spring.datasource.druid.filter.stat.slow-sql-millis=200
spring.datasource.druid.filter.slf4j.enabled=true
spring.datasource.druid.filter.slf4j.result-set-log-enabled=false
spring.datasource.druid.filter.log4j2.enabled=false
#所有连接相关的日志
spring.datasource.druid.filter.log4j2.connection-log-enabled=false
#所有Statement相关的日志
spring.datasource.druid.filter.log4j2.statement-log-enabled=false
#是否显示结果集
spring.datasource.druid.filter.log4j2.result-set-log-enabled=true
# 是否显示SQL语句
spring.datasource.druid.filter.log4j2.statement-executable-sql-log-enable=false
#Sql防注入
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=oracle
#设置允许删除 真删
spring.datasource.druid.filter.wall.config.delete-allow=true
spring.datasource.druid.filter.wall.config.drop-table-allow=false
#如果接口方法对应的XML放在resources目录下 需要告诉MyBatis-Plus哪里扫描Mapper
mybatis-plus.mapper-locations=classpath:mapper/**/*.xml
#定义别名扫描的包
mybatis-plus.type-aliases-package=com.soft.fire.platform.*.model
#指定MyBatis-Plus配置文件 复杂配置可以单独写在 一个xml
mybatis-plus.config-location=classpath:mybatis/mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 全局配置setting,根据需要进行配置 -->
<settings>
<!-- 全局映射器启用缓存 -->
<setting name="cacheEnabled" value="true" />
<!-- 允许 JDBC 支持自动生成主键 -->
<setting name="useGeneratedKeys" value="true" />
<!--配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements);-->
<!--# BATCH 执行器将重用语句并执行批量更新。-->
<setting name="defaultExecutorType" value="REUSE" />
<!--要使延迟加载生效必须配置下面两个属性-->
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
</configuration>
在启动类配置@MapperScan注解,告诉Spring Boot扫描哪些包下面的Mapper接口
@SpringBootApplication
@MapperScan("com.soft.fire.platform.*.mapper")
public class FireApplication {
public static void main(String[] args) {
SpringApplication.run(FireApplication.class, args);
}
}
/**
* 雇员实体对象
*
* @author David Lin
* @version: 1.0
* @date 2019-03-17 11:30
*/
@Setter
@Getter
@ToString
public class Emp {
/**
* 员工编号
*/
private int empno;
/**
* 员工姓名
*/
private String ename;
/**
* 工作岗位
*/
private String job;
/**
* 领导者编号
*/
private int mgr ;
/**
* 入职时间
* 自定义输出格式
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
private Timestamp hiredate;
/**
* 薪水
*/
private double sal;
/**
* 奖金
*/
private double comm;
/**
* 所在部门编号
*/
private int deptno;
/**
* 员工地址
*/
private String empAddress;
}
EmpMapper.java
/**
* 员工数据操作
*
* @author David Lin
* @version: 1.0
* @date 2020-02-22 17:05
*/
public interface EmpMapper extends BaseMapper<Emp> {
/**
* 根据编号获取员工信息
* @param empno
* @return
*/
Emp getByEmpno(String empno);
}
EmpMapper.xml;使用Mybatis-plus的一个好处就是基本的CRUD操作不需要传统 MyBatis的 XML文件,但是如果很复杂的sql 则可以写在XML中
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.soft.fire.platform.emp.mapper.EmpMapper">
<resultMap id="BaseResultMap" type="Emp">
<id column="empno" property="empno" jdbcType="DOUBLE"/>
<result column="empno" property="empno" jdbcType="DOUBLE"/>
<result column="ename" property="ename" jdbcType="VARCHAR"/>
<result column="job" property="job" jdbcType="VARCHAR"/>
<result column="mgr" property="mgr" jdbcType="DOUBLE"/>
<result column="hiredate" property="hiredate" jdbcType="TIMESTAMP"/>
<result column="sal" property="sal" jdbcType="DOUBLE"/>
<result column="comm" property="comm" jdbcType="DOUBLE"/>
<result column="deptno" property="deptno" jdbcType="DOUBLE"/>
<result column="emp_address" property="empAddress" jdbcType="VARCHAR"/>
</resultMap>
<select id="getByEmpno" resultMap="BaseResultMap">
SELECT e.* FROM emp e WHERE e.empno=#{empno}
</select>
</mapper>
/**
* 雇员业务接口
*
* @author David Lin
* @version: 1.0
* @date 2019-03-17 11:28
*/
public interface EmpService extends IService<Emp> {
/**
* 获取所有职员信息
* @return
*/
List<Emp> findAllEmp();
/**
* 根据编号获取员工信息
* @param empno
* @return
*/
Emp getByEmpno(String empno);
}
/**
* 雇员业务操作实现类
*
* @author David Lin
* @version: 1.0
* @date 2019-03-17 11:28
*/
@Service("empService")
public class EmpServiceImpl extends ServiceImpl<EmpMapper,Emp> implements EmpService {
/**
* 注入dao依赖
*/
@Resource
private EmpMapper empMapper;
@Override
public List<Emp> findAllEmp() {
List<Emp> empList = empMapper.selectList(null);
return empList;
}
@Override
public Emp getByEmpno(String empno) {
return empMapper.getByEmpno(empno);
}
}
/**
* 雇员控制器
*
* @author David Lin
* @version: 1.0
* @date 2019-03-17 11:29
*/
@RestController
public class EmpController {
/**
* 日志操作对象
*/
Logger logger = LoggerFactory.getLogger(EmpController.class);
/**
* 员工业务操作对象
*/
@Resource
private EmpService empService;
@GetMapping("/empall")
public List<Emp> findAll(HttpServletRequest request) {
return empService.list(null);
}
@GetMapping("/emp")
public Emp getEmp(HttpServletRequest request) {
return empService.getByEmpno("9876");
}
}