??wei_shuo的個(gè)人主頁(yè)
??wei_shuo的學(xué)習(xí)社區(qū)
??Hello World !
Spring Data
Spring Data是一個(gè)用于簡(jiǎn)化數(shù)據(jù)庫(kù)訪問(wèn)和操作的開(kāi)源框架,為開(kāi)發(fā)人員提供了一種通用的方式來(lái)處理不同類型的數(shù)據(jù)存儲(chǔ),例如關(guān)系型數(shù)據(jù)庫(kù)(如MySQL、PostgreSQL、Oracle)和非關(guān)系型數(shù)據(jù)庫(kù)(如MongoDB、Cassandra、Redis)等。Spring Data還提供了許多有用的特性和工具,例如數(shù)據(jù)持久化、事務(wù)管理、查詢和分頁(yè)等功能,以及對(duì)多種數(shù)據(jù)訪問(wèn)技術(shù)的支持,如JPA、Hibernate、MyBatis等
Spring Data框架的核心思想是通過(guò)使用Repository模式,將數(shù)據(jù)訪問(wèn)邏輯從業(yè)務(wù)邏輯中分離出來(lái),從而簡(jiǎn)化應(yīng)用程序的開(kāi)發(fā)和維護(hù);開(kāi)發(fā)人員只需要定義一個(gè)接口,繼承Spring Data提供的Repository接口,即可獲得許多常用的數(shù)據(jù)庫(kù)操作方法,如增刪改查、分頁(yè)查詢等;Spring Data框架會(huì)根據(jù)接口定義動(dòng)態(tài)生成實(shí)現(xiàn)類,從而使得開(kāi)發(fā)人員可以專注于業(yè)務(wù)邏輯的實(shí)現(xiàn),而不用關(guān)注底層的數(shù)據(jù)訪問(wèn)細(xì)節(jié)
Spring Data是一個(gè)非常強(qiáng)大和靈活的數(shù)據(jù)訪問(wèn)框架,可以幫助開(kāi)發(fā)人員更加高效地訪問(wèn)和操作各種類型的數(shù)據(jù)存儲(chǔ),同時(shí)提供了許多有用的特性和工具,能夠大大簡(jiǎn)化應(yīng)用程序的開(kāi)發(fā)和維護(hù)
整合JDBC
JDBC是Java語(yǔ)言中用于與關(guān)系型數(shù)據(jù)庫(kù)交互的一種標(biāo)準(zhǔn)API;通過(guò)JDBC,Java程序可以連接到不同的數(shù)據(jù)庫(kù)系統(tǒng),如MySQL、Oracle、PostgreSQL等,并進(jìn)行數(shù)據(jù)的增、刪、改、查等操作
JDBC API包括兩部分:JDBC驅(qū)動(dòng)程序和Java應(yīng)用程序接口。JDBC驅(qū)動(dòng)程序是連接Java應(yīng)用程序和數(shù)據(jù)庫(kù)的橋梁,它們負(fù)責(zé)與數(shù)據(jù)庫(kù)進(jìn)行通信,并將數(shù)據(jù)轉(zhuǎn)換為Java程序可以理解的格式。Java應(yīng)用程序接口則是Java程序訪問(wèn)數(shù)據(jù)庫(kù)的核心,它提供了一組標(biāo)準(zhǔn)的類和方法,用于與數(shù)據(jù)庫(kù)進(jìn)行交互
- resources文件夾下創(chuàng)建application.yml文件
spring: datasource: username: "root" password: "root" url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver
- 編寫(xiě)controller層,測(cè)試數(shù)據(jù)庫(kù)CURD功能
package com.wei.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.Map; @RestController public class JDBCController { @Autowired(required = false) JdbcTemplate jdbcTemplate; //查詢數(shù)據(jù)庫(kù)所有信息 @GetMapping("/userList") public List<Map<String, Object>> userList() { String sql = "select * from mybatis.user"; List<Map<String, Object>> List_maps = jdbcTemplate.queryForList(sql); return List_maps; } @GetMapping("/addUser") public String addUser() { String sql = "insert into mybatis.user(id,name,pwd) values(5,'bbb',520)"; jdbcTemplate.update(sql); return "update-ok"; } @GetMapping("/updateUser/{id}") public String updateUser(@PathVariable int id) { String sql = "update mybatis.user set name=?,pwd=? where id=" + id; //封裝 Object[] objects = new Object[2]; objects[0] = "qqq"; objects[1] = "www"; jdbcTemplate.update(sql,objects); return "update-ok"; } @GetMapping("/deleteUser/{id}") public String deleteUser(@PathVariable int id) { String sql = "delete from mybatis.user where id = ?"; jdbcTemplate.update(sql,id); return "delete-ok"; } }
整合Druid
Druid是一個(gè)開(kāi)源的高性能、高可靠性的分布式列存儲(chǔ)系統(tǒng),主要用于支持實(shí)時(shí)數(shù)據(jù)探索和分析;提供了一種可擴(kuò)展的、快速的、實(shí)時(shí)的數(shù)據(jù)存儲(chǔ)和查詢技術(shù),支持高吞吐量和低延遲的查詢,并能夠處理大規(guī)模數(shù)據(jù)的實(shí)時(shí)流式處理。Druid的數(shù)據(jù)存儲(chǔ)方式基于列存儲(chǔ),具有高效的壓縮算法和索引機(jī)制,能夠提供高效的數(shù)據(jù)查詢和聚合操作
Druid的架構(gòu)包括數(shù)據(jù)源、數(shù)據(jù)處理和數(shù)據(jù)查詢?nèi)齻€(gè)組件。數(shù)據(jù)源負(fù)責(zé)數(shù)據(jù)的采集和預(yù)處理,數(shù)據(jù)處理組件將數(shù)據(jù)轉(zhuǎn)換為Druid的列存儲(chǔ)格式,并進(jìn)行索引和壓縮,數(shù)據(jù)查詢組件則提供了一個(gè)SQL查詢引擎和RESTful API,用于查詢和聚合存儲(chǔ)在Druid中的數(shù)據(jù);被廣泛用于實(shí)時(shí)數(shù)據(jù)分析和探索領(lǐng)域,如廣告分析、在線推薦、監(jiān)控和運(yùn)營(yíng)等
- application.yml
spring: datasource: username: "root" password: "root" url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver #切換數(shù)據(jù)源 type: com.alibaba.druid.pool.DruidDataSource #Spring Boot 默認(rèn)是不注入這些屬性值的,需要自己綁定 #druid 數(shù)據(jù)源專有配置 initialSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true #配置監(jiān)控統(tǒng)計(jì)攔截的filters,stat:監(jiān)控統(tǒng)計(jì)、log4j:日志記錄、wall:防御sql注入 #如果允許時(shí)報(bào)錯(cuò) java.lang.ClassNotFoundException: org.apache.log4j.Priority #則導(dǎo)入 log4j 依賴即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j filters: stat,wall,log4j maxPoolPreparedStatementPerConnectionSize: 20 useGlobalDataSourceStat: true connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
- controller層編寫(xiě)DruidController
package com.wei.config; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.servlet.Filter; import javax.servlet.annotation.WebFilter; import javax.sql.DataSource; import java.util.HashMap; import java.util.Map; @Configuration public class DruidConfig { @ConfigurationProperties(prefix = "spring.datasource") @Bean public DataSource druidDataSource(){ return new DruidDataSource(); } //后臺(tái)監(jiān)控功能 @Bean public ServletRegistrationBean StatViewServlet(){ ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*"); //后臺(tái)賬號(hào)密碼 HashMap<String, String> initParameters = new HashMap<>(); //添加配置 initParameters.put("loginUsername","admin"); initParameters.put("loginPassword","123456"); //允許用戶訪問(wèn) initParameters.put("allow",""); //禁止用戶訪問(wèn) /*initParameters.put("","");*/ bean.setInitParameters(initParameters); //設(shè)置初始化參數(shù) return bean; } //過(guò)濾器Filter @Bean public FilterRegistrationBean webStartFilter(){ FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>(); bean.setFilter(new WebStatFilter()); //通過(guò)請(qǐng)求 HashMap<Object, Object> initParameters = new HashMap<>(); initParameters.put("exclusions","*.js,*.css,/druid/*"); return bean; } }
整合Mybatis
- springboot-mybatis依賴
<!--springboot-mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.1</version> </dependency>
- 配置數(shù)據(jù)庫(kù)連接application.properties
spring.datasource.username=root spring.datasource.password=root spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- 測(cè)試
package com.wei; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import javax.sql.DataSource; import javax.xml.crypto.Data; import java.sql.SQLException; @SpringBootTest class Springboot04MybatisApplicationTests { @Autowired(required = false) DataSource dataSource; @Test void contextLoads() throws SQLException { System.out.println("================="); System.out.println(dataSource.getClass()); System.out.println(dataSource.getConnection()); } }
- 依賴導(dǎo)入pom.xml
<dependencies> <!--springboot-web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--springboot-mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.0</version> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!--jdbc--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--mysql--> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <!--test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
- 編寫(xiě)pojo/user
package com.wei.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class User { private int id; private String name; private String pwd; }
- 編寫(xiě)mapper/UserMapper接口類
package com.wei.mapper; import com.wei.pojo.User; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; import java.util.List; @Mapper @Repository public interface UserMapper { List<User> queryUserList(); User queryUserById(int id); int addUser(User user); int updateUser(User user); int deleteUser(int id); }
- 編寫(xiě)resources/mybatis/mapper/UserMapper.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.wei.mapper.UserMapper"> <select id="queryUserList" resultType="User"> select * from mybatis.user; </select> <select id="queryUserById" resultType="User"> select * from mybatis.user where id = #{id}; </select> <insert id="addUser" parameterType="User"> insert into mybatis.user (id, name, pwd) values (#{id}, #{name}, #{pwd}); </insert> <update id="updateUser" parameterType="User"> update mybatis.user set name=#{name}, pwd=#{pwd} where id = #{id}; </update> <delete id="deleteUser" parameterType="int"> delete from mybatis.user where id = #{id}; </delete> </mapper>
- 編寫(xiě)Controller/UserController控制層
package com.wei.controller; import com.wei.mapper.UserMapper; import com.wei.pojo.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class UserController { @Autowired private UserMapper userMapper; //查詢?nèi)坑脩?/span> @GetMapping("queryUserList") public List<User> queryUserList() { List<User> userList = userMapper.queryUserList(); for (User user : userList) { System.out.println(user); } return userList; } //添加用戶 @GetMapping("addUser") public String addUser() { userMapper.addUser(new User(5, "王灣", "456")); return "ok"; } //修改用戶 @GetMapping("updateUser") public String updateUser() { userMapper.updateUser(new User(5, "王灣", "123456")); return "ok"; } //刪除用戶 @GetMapping("deleteUser") public String deleteUser() { userMapper.deleteUser(5); return "ok"; } }
- 編寫(xiě)resources/application.properties:配置數(shù)據(jù)源、整合mybatis
#配置數(shù)據(jù)源 spring.datasource.username=root spring.datasource.password=root spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #整合mybatis mybatis.type-aliases-package=com.wei.pojo mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
?? 結(jié)語(yǔ):創(chuàng)作不易,如果覺(jué)得博主的文章賞心悅目,還請(qǐng)——
點(diǎn)贊
??收藏
??評(píng)論
??文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-533258.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-533258.html
到了這里,關(guān)于SpringBoot原理分析 | Spring Data整合:JDBC、Druid、Mybatis的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!