Springboot數(shù)據(jù)層開發(fā)全解析
數(shù)據(jù)源自動管理
引入jdbc的依賴和springboot的應(yīng)用場景
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
創(chuàng)建application.yaml

測試數(shù)據(jù)源
@RunWith(SpringRunner.class)
@SpringBootTest
public class DataSourcesTest {
@Autowired
DataSource dataSource;
@Test
public void contextLoads() throws SQLException {
System.out.println(dataSource.getClass());
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
}
org.springframework.boot.autoconfigure.jdbc
參考 org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration,SpringBoot 默認使用的是 hikari 連接池,默認支持 org.apache.tomcat.jdbc.pool.DataSource、HikariDataSource、dbcp2.BasicDataSource 數(shù)據(jù)源連接池類型,使用 spring.datasource.type 進行指定自定義的數(shù)據(jù)源類型。
自定義數(shù)據(jù)源類型源碼:

配置druid數(shù)據(jù)源
首先需要引入druid 連接池和日志依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>在 application.yaml 中加入 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
驗證:

在 application.yaml 中加入其他屬性配置

DataSourceProperties 類源碼:

spring.datasource 中默認沒有這些屬性,所以 application.yaml 中會標黃,且不起作用

我們需要創(chuàng)建數(shù)據(jù)源注冊類
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource dataSource(){
return new DruidDataSource();
}
}DruidDataSource 類包含了那些其他配置屬性,如圖:

驗證,發(fā)現(xiàn)這樣屬性配置就起作用了

配置druid運行期監(jiān)控
StatViewServlet 是 Druid 數(shù)據(jù)庫連接池提供的一個內(nèi)置監(jiān)控 Servlet,核心作用是通過 Web 界面可視化監(jiān)控 Druid 連接池的運行狀態(tài)、SQL 執(zhí)行情況、慢查詢統(tǒng)計等核心指標,是 Druid 連接池的核心監(jiān)控組件之一。

WebStatFilter 是 Druid 數(shù)據(jù)庫連接池提供的一款 Web 監(jiān)控過濾器,核心作用是采集 Web 應(yīng)用中HTTP 請求與數(shù)據(jù)庫操作的關(guān)聯(lián)鏈路數(shù)據(jù),為 StatViewServlet(Druid 監(jiān)控頁面)提供Web 層面的監(jiān)控數(shù)據(jù)支撐。

代碼內(nèi)容:
我們需要配置一個管理后臺的 Servlet,還需要配置一個監(jiān)控的 filter,以及配置初始化參數(shù)
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource dataSource(){
return new DruidDataSource();
}
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),
"/druid/*");
Map<String,String> initParams = new HashMap<>();
initParams.put("loginUsername","root");
initParams.put("loginPassword","root");
initParams.put("allow","");//默認就是允許所有訪問
initParams.put("deny","192.168.15.21");
bean.setInitParameters(initParams);
return bean;
}
//2、配置一個web監(jiān)控的filter
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean;
bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
Map<String,String> initParams = new HashMap<>();
initParams.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParams);
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}http://localhost:8080/druid 打開監(jiān)控頁面

springboot整合jdbcTemplate
首先需要在數(shù)據(jù)庫中創(chuàng)建表
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `username` varchar(10) DEFAULT NULL, `userId` int(10) NOT NULL, `password` varchar(10) DEFAULT NULL, PRIMARY KEY (`userId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Springboot中提供了JdbcTemplateAutoConfiguration的自動配置 org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,
JdbcTemplateAutoConfiguration源碼:

由于 Springboot 中提供了 JdbcTemplateAutoConfiguration 的自動配置,直接使用 @Autowired 注解注入即可,啟動 springboot,測試訪問 http://localhost:8080/query

訪問成功
打開監(jiān)控頁面

Springboot整合mybatis注解版
導(dǎo)入 mybatis 整合 springboot 模塊
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration

創(chuàng)建JavaBean
import java.util.Date;
public class Person {
private int pid;
private String pname;
private String addr;
private int gender;
private Date birth;
public Person() {
}
public Person(int pid, String pname, String addr, int gender, Date birth) {
this.pid = pid;
this.pname = pname;
this.addr = addr;
this.gender = gender;
this.birth = birth;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
@Override
public String toString() {
return "Person{" +
"pid=" + pid +
", pname='" + pname + '\'' +
", addr='" + addr + '\'' +
", gender=" + gender +
", birth=" + birth +
'}';
}
}創(chuàng)建Mapper
import java.util.List;
@Mapper
public interface PersonMapper {
@Select("select * from person")
public List<Person> getPersons();
@Select("select * from person t where t.pid = #{id}")
public Person getPersonById(int id);
@Options(useGeneratedKeys =true, keyProperty = "pid")
@Insert("insert into person(pid, pname, addr,gender, birth)" +
" values(#{pid}, #{pname}, #{addr},#{gender}, #{birth})")
public void insert(Person person);
@Delete("delete from person where pid = #{id}")
public void update(int id);
}其中 @Options(useGeneratedKeys =true, keyProperty = “pid”),MyBatis 會獲取到自增的 pid,自動賦值給傳入的 person 對象的 pid 屬性。
@Mapper 用于明確標記 MyBatis 對應(yīng)的 Mapper 接口,核心職責是為 MyBatis 提供接口識別信號,觸發(fā) MyBatis 對接口的解析與動態(tài)代理實現(xiàn)類生成;在 Spring Boot 整合 MyBatis的場景下,該動態(tài)代理類會被自動注冊為 Spring 容器中的 Bean,支持業(yè)務(wù)代碼通過 @Autowired 直接注入使用。
單元測試
@RunWith(SpringRunner.class)
@SpringBootTest
public class springBootMybatisTest {
@Autowired
PersonMapper personMapper;
@Test
public void testMybatis() throws SQLException {
List<Person> persons = personMapper.getPersons();
for (Person person : persons) {
System.out.println(person);
}
}
@Test
public void testMybatis1() throws SQLException {
Person p = personMapper.getPersonById(1);
System.out.println(p);
}
}
開啟 MyBatis 的下劃線轉(zhuǎn)駝峰命名自動映射功能
@Configuration
public class MybatisConfig {
@Bean
public ConfigurationCustomizer getCustomizer(){
return new ConfigurationCustomizer() {
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setMapUnderscoreToCamelCase(true);
}
};
}
}當項目中 Mapper 接口數(shù)量較多,若在每個 Mapper 接口上逐一添加 @Mapper 注解,會增加重復(fù)工作量且不易維護。此時可采用 @MapperScan 注解的批量掃描方案。在 MyBatis 相關(guān)配置類或 Spring Boot 主啟動類上添加 @MapperScan 注解,指定 Mapper 接口所在的包路徑,MyBatis 會自動掃描該路徑下所有接口,將其識別為 Mapper 接口,無需額外標注 @Mapper,即可完成動態(tài)代理實現(xiàn)類的生成與 Spring Bean 的注冊。
Springboot整合mybatis配置文件
classpath:mybatis 下創(chuàng)建 sqlMapConfig.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>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>其中 mapUnderscoreToCamelCase 值為 true 用于開啟下劃線轉(zhuǎn)駝峰命名自動映射功能
創(chuàng)建sql映射文件 PersonMapper.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.qcby.springBootMybatis.mapper.PersonMapper">
<select id="getPersons" resultType="com.qcby.springBootMybatis.bean.Person">
select * from person
</select>
</mapper>在 application.yaml 中配置 mybatis 相關(guān)配置信息

其中
config-location 值為全局配置文件路徑
mapper-locations 值為sql映射文件
type-aliases-package 值為實體類全類名
測試驗證

使用了 Springboo t整合 mybatis 配置文件方式,Springboot 整合mybatis 注解版也同樣會生效
到此這篇關(guān)于Springboot數(shù)據(jù)層開發(fā)的文章就介紹到這了,更多相關(guān)Springboot數(shù)據(jù)層內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java: 程序包com.fasterxml.jackson.annotation不存在的解決辦法
當我們在導(dǎo)入程序之后,系統(tǒng)給出錯誤提示:java: 程序包com.fasterxml.jackson.annotation不存在,本文主要介紹了Java程序包不存在的三種解決方法,需要的朋友可以參考下2024-02-02
解決springboot?部署到?weblogic?中?jar?包沖突的問題
這篇文章主要介紹了springboot?部署到?weblogic?中?jar?包沖突,weblogic?也有是解決方案的,可以通過新增并配置?weblogic.xml?文件來定義哪些類需要優(yōu)先從項目工程包的?jar?包中加載,本文給大家分享解決方法,需要的朋友可以參考下2022-08-08
SpringMVC整合SSM實現(xiàn)表現(xiàn)層數(shù)據(jù)封裝詳解
這篇文章主要介紹了SpringMVC整合SSM實現(xiàn)表現(xiàn)層數(shù)據(jù)封裝,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-10-10
Java?-jar參數(shù)設(shè)置小結(jié)
本文主要介紹了Java?-jar參數(shù)設(shè)置小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06
JSP request.setAttribute()詳解及實例
這篇文章主要介紹了 javascript request.setAttribute()詳解及實例的相關(guān)資料,需要的朋友可以參考下2017-02-02

