您好,登錄后才能下訂單哦!
今天小編給大家分享一下SpringBoot常用數(shù)據(jù)庫(kù)開發(fā)技術(shù)有哪些的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
數(shù)據(jù)庫(kù)開發(fā)一直是JAVA開發(fā)的核心之一,作為現(xiàn)在JAVA EE的基石框架,Spring Boot自身攜帶了一個(gè)JDBCTemplate框架,其對(duì)JDBC進(jìn)行了基礎(chǔ)的封裝,使得Spring Boot原生就支持據(jù)庫(kù)開發(fā)。同時(shí)Spring Boot也不排斥其它優(yōu)秀的持久層框架,允許他們以極低的代價(jià)平滑的接入。
spring boot 2.6.3
基礎(chǔ)依賴:
<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
JdbcTemplate是spring框架里面提供的一個(gè)JDBC的抽象層,封裝了對(duì)創(chuàng)建的SQL操作,如SQL語(yǔ)句執(zhí)行、結(jié)果處理等功能,使得我們能更方便地使用JDBC。
依賴:
JdbcTemplate是spring框架里的東西,在Spring Boot體系里其被包含在jdbc的starter中。
<!--jdbc依賴,包含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; } }; // 插入一條用戶數(shù)據(jù) public void addUser(User user) { String sql = "INSERT INTO user (username, password) VALUES (?, ?)"; jdbcTemplate.update(sql, user.getUsername(), user.getPassword()); } // 刪除一條用戶數(shù)據(jù) public void deleteUser(int id) { String sql = "DELETE FROM user WHERE id = ?"; jdbcTemplate.update(sql, id); } // 更新一條用戶數(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()); } // 查詢所有用戶數(shù)據(jù) public List<User> findAllUsers() { String sql = "SELECT id, username, password FROM user"; return jdbcTemplate.query(sql, userMapper); } // 根據(jù) ID 查詢一條用戶數(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); } }
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。
查詢語(yǔ)言,需要支持自定義SQL進(jìn)行比較靈活的查詢。
spring boot中對(duì)jpa的實(shí)現(xiàn)是基于hibernate的,其通過注解來(lái)實(shí)現(xiàn)對(duì)象關(guān)系映射、提供了一套基礎(chǔ)CRUD的API,然后依托于HQL支持了自定義SQL進(jìn)行靈活的查詢。
依賴:
<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類型。
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(); }
有時(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; }
mybatis就不贅述了,現(xiàn)在大家最常用的,直接開整!
依賴:
<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í)體類:
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>
以上就是“SpringBoot常用數(shù)據(jù)庫(kù)開發(fā)技術(shù)有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。