SpringBoot2.x學習-集成MyBatis-Plus

介紹

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
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章