SpringBoot2.x学习-集成MyBatis-Plus

文章目录

  • 介绍
  • 安装
  • 配置(application.properties)
    • 配置数据源
    • 配置MyBatis-Plus
    • 配置mybatis-config.xml
  • 编写代码
    • 入口类FireApplication.java
    • 实体类
    • Mapper接口和XML
    • Service接口和实现
    • Controller类
  • 浏览器访问结果

介绍

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>

配置(application.properties)

配置数据源

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

配置MyBatis-Plus

#如果接口方法对应的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

配置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>

编写代码

入口类FireApplication.java

在启动类配置@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;
}

Mapper接口和XML

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>

Service接口和实现

/**
 * 雇员业务接口
 *
 * @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);
    }
}

Controller类

/**
 * 雇员控制器
 *
 * @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");
    }
}

浏览器访问结果

http://localhost:8080/emp
SpringBoot2.x学习-集成MyBatis-Plus_第1张图片

你可能感兴趣的:(Mybatis,Spring,Boot)