SpringBoot2零基礎(chǔ)到精通之數(shù)據(jù)庫專項精講
1 數(shù)據(jù)庫連接
1.1 配置數(shù)據(jù)庫連接信息
如果想要使用數(shù)據(jù)庫連接池連接數(shù)據(jù)庫進行SQL操作的話,在SpringBoot中需要經(jīng)過如下三個步驟: 第一步: 導入jdbc開發(fā)的啟動場景
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>第二步: 導入數(shù)據(jù)庫驅(qū)動 之所以框架底層沒有自動導入數(shù)據(jù)庫的驅(qū)動,是因為不同的數(shù)據(jù)庫使用的驅(qū)動不同,這需要用戶根據(jù)自己的需要來進行選擇。雖然框架沒有對指定數(shù)據(jù)庫驅(qū)動進行自動導入,但是對不同數(shù)據(jù)庫驅(qū)動的版本都進行了版本仲裁,也就是說我們可以直接導入無需定義版本號。當然也可以自定義版本號,maven會根據(jù)自身的就近依賴原則導入自定義的版本
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>第三步: 配置數(shù)據(jù)庫連接的配置文件
# 設(shè)置數(shù)據(jù)庫
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: "123456"
1.2 整合Druid數(shù)據(jù)源
SpringBoot框架中默認使用的是Hikari數(shù)據(jù)源,這也就意味著如果要是想要修改數(shù)據(jù)源的話,無非就是兩種方法:自定義配置類、引入相應的啟動器依賴再配置配置文件
第一步: 引入Druid的啟動器依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>第二步: 配置配置文件(選學,框架一般都有默認的配置)
spring:
datasource:
url: jdbc:mysql://localhost:3306/db_account
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
druid:
aop-patterns: com.atguigu.admin.* #監(jiān)控SpringBean
filters: stat,wall # 底層開啟功能,stat(sql監(jiān)控),wall(防火墻)
stat-view-servlet: # 配置監(jiān)控頁功能
enabled: true
login-username: admin
login-password: admin
resetEnable: false
web-stat-filter: # 監(jiān)控web
enabled: true
urlPattern: /*
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
filter:
stat: # 對上面filters里面的stat的詳細配置
slow-sql-millis: 1000
logSlowSql: true
enabled: true
wall:
enabled: true
config:
drop-table-allow: false2 SpringBoot整合MyBatis
mybatis開發(fā)的時候有兩種開發(fā)模式:使用配置文件進行開發(fā)、純注解開發(fā),二者各有優(yōu)點。使用配置文件進行開發(fā)在處理更加復雜的SQL語句的時候邏輯更加清晰,純注解開發(fā)比較適合簡單的SQL語句,于是我們可以在開發(fā)的時候混合使用兩種方法,這樣可以大大提升開發(fā)效率。
2.1 配置文件開發(fā)
第一步: 引入啟動器依賴 小知識:SpringBoot官方的所有技術(shù)啟動器的命名都是spring-boot-starter-xxx而第三方技術(shù)的啟動器命名則是xxx-spring-boot-starter。值得注意的是:MyBatis的啟動器內(nèi)部引用了dbc開發(fā)的啟動場景,所以無需重復引用
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>第二步: 編寫mapper接口并標注@Mapper注解
@Mapper
public interface StuMapper {
Stu queryBySid(int sid);
}第三步: 編寫映射文件并綁定mapper接口
<?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.xiaochen.mapper.StuMapper">
<select id="queryBySid" resultType="com.xiaochen.domain.Stu">
select * from stu where sid=#{sid}
</select>
</mapper>第四步: 在配置文件中指定之前MyBatis配置文件的各種信息
# mybatis的所有配置
mybatis:
mapper-locations: classpath:com.xiaochen.mapper/*.xml
# 所有的全局配置文件的配置項在這下面配置
configuration:
# 開啟駝峰命名數(shù)據(jù)庫中字段值的下劃線‘_’加字母會被認為是大寫
map-underscore-to-camel-case: true
2.2 純注解開發(fā)
第一步: 引入啟動器依賴
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>第二步: 編寫mapper接口并標注@Mapper注解,使用對應的注解進行SQL語句操作
@Mapper
public interface StuMapper {
@Select("select * from stu where sid=#{sid}")
Stu queryBySid(int sid);
}3 SpringBoot整合MyBatis-Plus
3.1 普通的CRUD方法
MyBatis-plus的啟動器內(nèi)部不止引用了dbc開發(fā)的啟動場景,還導入了MyBatis的啟動器,所以這兩個都無需再重復引用 第一步: 引入啟動器依賴
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>mapper層:
編寫mapper接口標注@Mapper注解,并繼承BaseMapper類。這是MyBatis-plus的獨有方式,這樣做的好處是繼承之后直接使用父類中已經(jīng)寫好的簡單CRUD方法,但是一些復雜的SQL業(yè)務還是需要使用映射文件來實現(xiàn)的,進一步提高了代碼開發(fā)的效率
@Mapper
public interface StuMapper extends BaseMapper<Stu> {
}MyBatis-plus進行數(shù)據(jù)庫表的增刪改查的時候,默認把繼承BaseMapper類時傳進去的泛型名稱當做表名去查找,如果泛型與數(shù)據(jù)庫中的表名不對應的話,可以在實體類使用注解標識,除此之外注解還可以用來標識主鍵和非表中字段屬性
@NoArgsConstructor
@AllArgsConstructor
@Data
@TableName("stu")
public class Stu {
// 表名該字段是定義的臨時變量,并不存在于數(shù)據(jù)庫的表中
@TableField(exist = false)
private String gender;
// 標明表的主鍵
@TableId
private int sid;
private String sname;
private String age;
private String course;
private int cardid;
}編寫映射文件并綁定mapper接口(如果有的話)。MyBatis-plus自動配置好了默認的mapper-locations,也就是映射文件的存放位置為classpath:/mapper/**/*.xml,于是我們就按照它的默認規(guī)則在靜態(tài)資源路徑下mapper文件夾下。本案例中沒有映射文件,于是就不創(chuàng)建
如果有需要的話,還可以在配置文件中指定MyBatis-plus配置文件的各種信息
service層:
service接口繼承IService類
public interface StuService extends IService<Stu> {
}service的實現(xiàn)類先是繼承ServiceImpl并傳兩個泛型(mapper接口,實體類),然后實現(xiàn)service接口
@Service
public class StuServiceImpl extends ServiceImpl<StuMapper, Stu> implements StuService {
}controller層: 直接使用service繼承類的簡單方法
@Controller
public class TableController {
@Autowired
StuServiceImpl stuService;
/**
* 點擊Advanced table按鈕,進行頁面轉(zhuǎn)發(fā),并攜帶一個表格數(shù)據(jù)
* @param model 用于存儲數(shù)據(jù)
* @return 頁面轉(zhuǎn)發(fā)forward 到 /table/dynamic_table.html
*/
@GetMapping("/dynamic_table")
public String dynamic_table(Model model) {
// 從數(shù)據(jù)庫中查出user表進行展示
List<Stu> list = stuService.list();
model.addAttribute("stus", list);
return "/table/dynamic_table";
}
}3.2 MyBatis-plus的分頁實現(xiàn)
MyBatis-plus的分頁功能實現(xiàn)需要先自定義一個配置類,向容器中注冊一個Interceptor
@Configuration
public class MyBatisConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setOverflow(true);
paginationInnerInterceptor.setMaxLimit(500L);
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
}然后就可以像普通的CRUD操作一樣,直接使用service繼承類的分頁的相關(guān)方法即可
@GetMapping("/dynamic_table")
public String dynamic_table(@RequestParam(value = "pn", defaultValue = "1")Integer pn, Model model) {
// 分頁從數(shù)據(jù)庫中查出stu表的所有數(shù)據(jù),當前頁、總頁數(shù)、總條數(shù)……
Page<Stu> stuPage = new Page<>(pn, 1);
Page<Stu> page = stuService.page(stuPage);
model.addAttribute("page", page);
return "/table/dynamic_table";
}到此這篇關(guān)于SpringBoot2零基礎(chǔ)到精通之數(shù)據(jù)庫專項精講的文章就介紹到這了,更多相關(guān)SpringBoot2 數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud?hystrix斷路器與局部降級全面介紹
什么是服務降級?當服務器壓力劇增的情況下,根據(jù)實際業(yè)務情況及流量,對一些服務和頁面有策略的不處理或換種簡單的方式處理,從而釋放服務器資源以保證核心交易正常運作或高效運作2022-10-10
Java實現(xiàn)百度AOI數(shù)據(jù)的解析與轉(zhuǎn)換
Java作為一種成熟且廣泛應用的編程語言,具有跨平臺、面向?qū)ο?、安全性高等特點,非常適合用于開發(fā)各種類型的應用程序,本文為大家整理了基于Java的AOI數(shù)據(jù)解析與轉(zhuǎn)換的實現(xiàn)方法,需要的可以參考下2025-02-02
Springboot中的@ComponentScan注解使用解析
這篇文章主要介紹了Springboot中的@ComponentScan注解使用解析,@ComponentScan用于類或接口上主要是指定掃描路徑,spring會把指定路徑下帶有指定注解的類注冊到IOC容器中,需要的朋友可以參考下2024-01-01
SpringBoot Maven打包失敗報:class lombok.javac.apt.Lombo
最新項目部署的時候,出現(xiàn)了一個maven打包失敗的問題,報:class lombok.javac.apt.LombokProcessor錯誤,所以本文給大家介紹了如何解決SpringBoot Maven 打包失?。篶lass lombok.javac.apt.LombokProcessor 錯誤,需要的朋友可以參考下2023-12-12

