SpringBoot常用數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)匯總介紹
1.概述
數(shù)據(jù)庫(kù)開(kāi)發(fā)一直是JAVA開(kāi)發(fā)的核心之一,作為現(xiàn)在JAVA EE的基石框架,Spring Boot自身攜帶了一個(gè)JDBCTemplate框架,其對(duì)JDBC進(jìn)行了基礎(chǔ)的封裝,使得Spring Boot原生就支持據(jù)庫(kù)開(kāi)發(fā)。同時(shí)Spring Boot也不排斥其它優(yōu)秀的持久層框架,允許他們以極低的代價(jià)平滑的接入。
本文主要介紹最常用到的三個(gè)持久層框架,JdbcTemplate、JPA、mybatis如何接入Spring Boot并在其上進(jìn)行開(kāi)發(fā)。
2.環(huán)境
- spring boot 2.6.3
- MySQL
基礎(chǔ)依賴(lài):
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql驅(qū)動(dòng)-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>表:
CREATE TABLE `user` ( id int NOT NULL AUTO_INCREMENT, username varchar(50) NOT NULL, password varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
數(shù)據(jù)庫(kù)配置:
# 數(shù)據(jù)庫(kù)連接配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
3.JdbcTemplate
JdbcTemplate是spring框架里面提供的一個(gè)JDBC的抽象層,封裝了對(duì)創(chuàng)建的SQL操作,如SQL語(yǔ)句執(zhí)行、結(jié)果處理等功能,使得我們能更方便地使用JDBC。
依賴(lài):
JdbcTemplate是spring框架里的東西,在Spring Boot體系里其被包含在jdbc的starter中。
<!--jdbc依賴(lài),包含jdbcTemplate--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
使用:
@Service
public class UserService {
@Autowired
JdbcTemplate jdbcTemplate;
RowMapper<User> userMapper=new RowMapper<User>() {
public User mapRow(ResultSet resultSet, int rowNum) throws SQLException {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
return user;
}
};
// 插入一條用戶(hù)數(shù)據(jù)
public void addUser(User user) {
String sql = "INSERT INTO user (username, password) VALUES (?, ?)";
jdbcTemplate.update(sql, user.getUsername(), user.getPassword());
}
// 刪除一條用戶(hù)數(shù)據(jù)
public void deleteUser(int id) {
String sql = "DELETE FROM user WHERE id = ?";
jdbcTemplate.update(sql, id);
}
// 更新一條用戶(hù)數(shù)據(jù)
public void updateUser(User user) {
String sql = "UPDATE user SET username = ?, password = ? WHERE id = ?";
jdbcTemplate.update(sql, user.getUsername(), user.getPassword(), user.getId());
}
// 查詢(xún)所有用戶(hù)數(shù)據(jù)
public List<User> findAllUsers() {
String sql = "SELECT id, username, password FROM user";
return jdbcTemplate.query(sql, userMapper);
}
// 根據(jù) ID 查詢(xún)一條用戶(hù)數(shù)據(jù)
public User findUserById(int id) {
String sql = "SELECT id, username, password FROM user WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, userMapper);
}
}4.JPA
4.1.概述
JPA(Java persistence api,JAVA持久化API),是一種JSR規(guī)范,其定義了Java對(duì)象和關(guān)系型數(shù)據(jù)庫(kù)之間該如何映射,總結(jié)起來(lái)是:
- 對(duì)象關(guān)系映射,需要描述好對(duì)象中的每個(gè)屬性和關(guān)系型數(shù)據(jù)中每個(gè)字段之間的映射關(guān)系。
- 操作API,需要提供一套基礎(chǔ)CRUD的API。
- 查詢(xún)語(yǔ)言,需要支持自定義SQL進(jìn)行比較靈活的查詢(xún)。
spring boot中對(duì)jpa的實(shí)現(xiàn)是基于hibernate的,其通過(guò)注解來(lái)實(shí)現(xiàn)對(duì)象關(guān)系映射、提供了一套基礎(chǔ)CRUD的API,然后依托于HQL支持了自定義SQL進(jìn)行靈活的查詢(xún)。
4.2.基本使用
依賴(lài):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
對(duì)象關(guān)系映射:
@Entity(name="user")
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "username")
private String username;
@Column(name="password")
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}接口:
這是spring boot jpa的關(guān)鍵,接口繼承JpaRepository,定義好實(shí)體關(guān)系映射和id類(lèi)型。
import com.eryi.bean.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Service;
@Service
public interface UserService extends JpaRepository<User,Integer> {
}使用:
JpaRepository自帶了一套基礎(chǔ)CRUD的API,直接調(diào)用即可。
@RequestMapping("getUser")
public User addUser(User user){
return userService.findById(user.getId()).get();
}4.3.轉(zhuǎn)換器
有時(shí)候數(shù)據(jù)庫(kù)里存的字段值不是我們直接想要的,而是需要做一些轉(zhuǎn)換,比如user如果有個(gè)性別字段,數(shù)據(jù)庫(kù)里可能是用1表示男性,用2表示女性,而我們想要的是男女,Spring Boot Jpa提供了轉(zhuǎn)換器來(lái)進(jìn)行轉(zhuǎn)換。
定義轉(zhuǎn)換器:
public class SexConverter implements AttributeConverter<SexEnum,Integer>{
//將枚舉轉(zhuǎn)換為數(shù)據(jù)庫(kù)列
@Override
public Integer convertToDatabaseColumn (SexEnum sex) { return sex.getId () ;
//將數(shù)據(jù)庫(kù)列轉(zhuǎn)換為枚
@Override
publ ic SexEnum convertToEntityAttrbute (Integer id) { return SexEnum.getEnumByid (id);
}在想要進(jìn)行轉(zhuǎn)換的字段上使用轉(zhuǎn)換器:
public class User{
@Convert(converter=SexConverter.class)
private SexEnum sex;
}5.mybatis
mybatis就不贅述了,現(xiàn)在大家最常用的,直接開(kāi)整!
依賴(lài):
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency>
配置:
# 數(shù)據(jù)庫(kù)連接配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# MyBatis 配置
# 說(shuō)明mapper的xml文件在哪里
mybatis.mapper-locations=classpath:mapper/*.xml
實(shí)體類(lèi):
public class User {
private Long id;
private String username;
private String password;
// getter 和 setter 方法省略
}接口:
@Mapper
public interface UserDao {
User getUserById(Long id);
List<User> getAllUsers();
void addUser(User user);
void updateUser(User user);
void deleteUser(Long id);
}mapper.xml:
在 src/main/resources/mapper`目錄下創(chuàng)建 UserDao.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.example.demo.dao.UserDao">
<select id="getUserById" parameterType="long" resultType="com.example.demo.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="getAllUsers" resultType="com.example.demo.entity.User">
SELECT * FROM user
</select>
<insert id="addUser" parameterType="com.example.demo.entity.User">
INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>
<update id="updateUser" parameterType="com.example.demo.entity.User">
UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}
</update>
<delete id="deleteUser" parameterType="long">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>到此這篇關(guān)于SpringBoot常用數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)匯總介紹的文章就介紹到這了,更多相關(guān)SpringBoot數(shù)據(jù)庫(kù)開(kāi)發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
elasticsearch聚合查詢(xún)實(shí)踐示例
這篇文章主要為大家介紹了elasticsearch聚合查詢(xún)實(shí)踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Java中HashMap和Hashtable的區(qū)別小結(jié)
本文主要介紹了Java中HashMap和Hashtable的區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密功能)
這篇文章主要給大家介紹了關(guān)于Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2018-05-05
Java for each實(shí)現(xiàn)機(jī)制代碼原理解析
這篇文章主要介紹了Java for each實(shí)現(xiàn)機(jī)制代碼原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Springboot中如何使用過(guò)濾器校驗(yàn)PSOT類(lèi)型請(qǐng)求參數(shù)內(nèi)容
在Springboot中創(chuàng)建過(guò)濾器,用來(lái)過(guò)濾所有POST類(lèi)型請(qǐng)求并獲取body中的參數(shù)進(jìn)行校驗(yàn)內(nèi)容是否合法,該方法僅適用于POST類(lèi)型請(qǐng)求,本文給大家介紹Springboot中如何使用過(guò)濾器校驗(yàn)PSOT類(lèi)型請(qǐng)求參數(shù)內(nèi)容,感興趣的朋友一起看看吧2023-08-08
基于logback 實(shí)現(xiàn)springboot超級(jí)詳細(xì)的日志配置
java web 下有好幾種日志框架,比如:logback,log4j,log4j2(slj4f 并不是一種日志框架,它相當(dāng)于定義了規(guī)范,實(shí)現(xiàn)了這個(gè)規(guī)范的日志框架就能夠用 slj4f 調(diào)用)。這篇文章主要介紹了基于logback springboot超級(jí)詳細(xì)的日志配置,需要的朋友可以參考下2019-06-06

