文章目錄
介紹
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