最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot數(shù)據(jù)層開發(fā)全解析

 更新時間:2025年12月05日 09:43:24   作者:期待のcode  
本文介紹了SpringBoot數(shù)據(jù)層開發(fā)中數(shù)據(jù)源自動管理的配置方法,介紹了springboot整合jdbcTemplate、Springboot整合mybatis注解版、Springboot整合mybatis配置文件,感興趣的朋友跟隨小編一起看看吧

數(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 默認(rèn)使用的是 hikari 連接池,默認(rèn)支持 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 中默認(rèn)沒有這些屬性,所以 application.yaml 中會標(biāo)黃,且不起作用

我們需要創(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)計等核心指標(biāo),是 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","");//默認(rèn)就是允許所有訪問
        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源碼:

@Controller
public class TestController {
    @Autowired
    JdbcTemplate jdbcTemplate;
    @ResponseBody
    @RequestMapping("/query")
    public List<Map<String, Object>> query(){
        List<Map<String, Object>> maps = jdbcTemplate.queryForList("SELECT * FROM user");
        return maps;
    }
}

由于 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 用于明確標(biāo)記 MyBatis 對應(yīng)的 Mapper 接口,核心職責(zé)是為 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);
            }
        };
    }
}

當(dāng)項目中 Mapper 接口數(shù)量較多,若在每個 Mapper 接口上逐一添加 @Mapper 注解,會增加重復(fù)工作量且不易維護。此時可采用 @MapperScan 注解的批量掃描方案。在 MyBatis 相關(guān)配置類或 Spring Boot 主啟動類上添加 @MapperScan 注解,指定 Mapper 接口所在的包路徑,MyBatis 會自動掃描該路徑下所有接口,將其識別為 Mapper 接口,無需額外標(biāo)注 @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)文章

  • Springboot RabbitMQ 消息隊列使用示例詳解

    Springboot RabbitMQ 消息隊列使用示例詳解

    本文通過示例代碼介紹了Springboot RabbitMQ 消息隊列使用,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • springboot如何通過controller層實現(xiàn)頁面切換

    springboot如何通過controller層實現(xiàn)頁面切換

    在Spring Boot中,通過Controller層實現(xiàn)頁面切換背景,Spring Boot的默認(rèn)注解是@RestController,它包含了@Controller和@ResponseBody,@ResponseBody會將返回值轉(zhuǎn)換為字符串返回,因此無法實現(xiàn)頁面切換,將@RestController換成@Controller
    2024-12-12
  • Spring中的ImportBeanDefinitionRegistrar接口詳解

    Spring中的ImportBeanDefinitionRegistrar接口詳解

    這篇文章主要介紹了Spring中的ImportBeanDefinitionRegistrar接口詳解,ImportBeanDefinitionRegistrar接口是也是spring的擴展點之一,它可以支持我們自己寫的代碼封裝成BeanDefinition對象,注冊到Spring容器中,功能類似于注解@Service @Component,需要的朋友可以參考下
    2023-09-09
  • SpringCloud Zuul實現(xiàn)負(fù)載均衡和熔斷機制方式

    SpringCloud Zuul實現(xiàn)負(fù)載均衡和熔斷機制方式

    這篇文章主要介紹了SpringCloud Zuul實現(xiàn)負(fù)載均衡和熔斷機制方式,具有很好的參考價值,希望對大家有所幫助。
    2021-07-07
  • MyBatis-Plus實現(xiàn)優(yōu)雅處理JSON字段映射

    MyBatis-Plus實現(xiàn)優(yōu)雅處理JSON字段映射

    默認(rèn)情況下,MyBatis-Plus 是不支持直接映射 JSON 類型的,這時候就需要借助其他的方法,下面小編就來和大家講講MyBatis-Plus如何優(yōu)雅處理JSON字段映射吧
    2025-04-04
  • flowable動態(tài)創(chuàng)建多級流程模板實現(xiàn)demo

    flowable動態(tài)創(chuàng)建多級流程模板實現(xiàn)demo

    這篇文章主要為大家介紹了flowable動態(tài)創(chuàng)建多級流程模板實現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Thymeleaf中th:each及th:if使用方法解析

    Thymeleaf中th:each及th:if使用方法解析

    這篇文章主要介紹了Thymeleaf中th:each及th:if使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • 在Java中解析和生成 XML的操作指南

    在Java中解析和生成 XML的操作指南

    XML(可擴展標(biāo)記語言)是用于存儲和傳輸數(shù)據(jù)的標(biāo)準(zhǔn)格式,在許多應(yīng)用中,XML 常用于配置文件、數(shù)據(jù)交換和存儲結(jié)構(gòu)化信息,在 Java 中,我們可以使用不同的技術(shù)來解析和生成 XML 文件,在這篇文章中,我們將介紹這些解析方式,需要的朋友可以參考下
    2025-11-11
  • MybatisPlus如何調(diào)用count函數(shù)

    MybatisPlus如何調(diào)用count函數(shù)

    這篇文章主要介紹了MybatisPlus如何調(diào)用count函數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Spring boot如何通過@Scheduled實現(xiàn)定時任務(wù)及多線程配置

    Spring boot如何通過@Scheduled實現(xiàn)定時任務(wù)及多線程配置

    這篇文章主要介紹了Spring boot如何通過@Scheduled實現(xiàn)定時任務(wù)及多線程配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12

最新評論

泾川县| 泌阳县| 蒙城县| 阿巴嘎旗| 长丰县| 简阳市| 读书| 平遥县| 汉阴县| 青阳县| 连山| 闽侯县| 沧源| 嘉义市| 宜君县| 周至县| 安陆市| 延长县| 夏邑县| 铁岭县| 称多县| 石门县| 大同市| 常山县| 乐至县| 越西县| 昌都县| 镶黄旗| 分宜县| 白城市| 东海县| 定安县| 尼勒克县| 遂川县| 庄河市| 太和县| 英吉沙县| 桃园市| 辽源市| 尼玛县| 樟树市|