溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SpringBoot常用數(shù)據(jù)庫(kù)開發(fā)技術(shù)有哪些

發(fā)布時(shí)間:2023-04-20 11:19:57 來(lái)源:億速云 閱讀:69 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下SpringBoot常用數(shù)據(jù)庫(kù)開發(fā)技術(shù)有哪些的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

    1.概述

    數(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à)平滑的接入。

    2.環(huán)境

    基礎(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

    3.JdbcTemplate

    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);
        }
    }

    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。

    • 查詢語(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)行靈活的查詢。

    4.2.基本使用

    依賴:

    <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();
    }

    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)在大家最常用的,直接開整!

    依賴:

    <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è)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(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)容。

    AI