• SpringBoot(二)——使用Mysql和JPA


    之前一篇博客写了如何搭建一个简单的SpringBoot程序,搭建好了之后,就已经有了一个简单的WEB程序。不过这是一个没有数据源的程序,就相当与一本没有内容的书,这里就通过一个简单的Mysql数据库和JPA来完成一些基本的CIUD操作。


    添加需要的依赖项

        <!-- JPA依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    
        <!-- Mysql依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

    配置SpringBoot的数据源和JPA

    通过SpringBoot的核心配置文件,放置在resources根目录下的application.yml 或application.properties来进行配置。相对来说,application.yml 的树状结构看起来层次感更清楚,所以这里用application.yml 来配置,配置如下。

    spring:
        datasource:
            url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8
            username: root
            password: "********"
        jpa:
            database: MYSQL
            show-sql: true
        #Hibernate ddl auto
            hibernate:
                ddl-auto: update
                naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
            properties:
                hibernate:
                    dialect: org.hibernate.dialect.MySQL5Dialect
    • datasource定义了数据源的连接url、用户和密码。
    • jpa中定义了有关JPA的配置。ddl-auto设置为update,是使用Hibernate来自动更新表结构,表不存在则自动建表;或在修改表结构后,程序启动时执行表结构的同步更新。dialect配置Hibernate的数据库方言,这里用默认的MySQL5Dialect,也可以根据需要,继承MySQL5Dialect做一些修改。

    实体类

    首先创建一些实体类,来与数据库中的表建立映射关系,假设一个NBA中,有球员、球队和所处位置三个实体,并且一个球员可以承担多种位置,则有如下实体类。

    /**
     * 球员实体类
     */
    @Entity
    @Table(name = "player")
    public class Player implements Serializable {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private String name;
        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date createdate;
    
        @ManyToOne
        @JoinColumn(name = "did")
        @JsonBackReference
        private Team team;
    
        @ManyToMany(cascade = {}, fetch = FetchType.EAGER)
        @JoinTable(name = "player_position",
                joinColumns = {@JoinColumn(name = "player_id")},
                inverseJoinColumns = {@JoinColumn(name = "position_id")})
        private List<Position> positions;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Date getCreatedate() {
            return createdate;
        }
    
        public void setCreatedate(Date createdate) {
            this.createdate = createdate;
        }
    
        public Team getTeam() {
            return team;
        }
    
        public void setTeam(Team team) {
            this.team = team;
        }
    
        public List<Position> getPositions() {
            return positions;
        }
    
        public void setPosition(List<Position> positions) {
            this.positions = positions;
        }
    }
    
    
    /**
     * 球队实体类
     */
    @Entity
    @Table(name = "team")
    public class Team implements Serializable {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private String name;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    /**
     * 位置实体类
     */
    @Entity
    @Table(name = "position")
    public class Position implements Serializable {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private String name;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

    使用JPA持久化实体

    定义一个接口并且继承于JPA资源库的JpaRepository接口,同时通过@Repository注解将这个接口也定义为资源库,使其可以被其他程序引用并且提供数据库的存取功能。球员实体的Repository接口如下,另外两个同理。

    @Repository
    public interface PlayerRepository extends JpaRepository<Player, Long> {
    }

    这样,一个大致的配置数据源和JPA来连接数据库就完成了,接下来就可以编写测试用例来验证一下以上配置的正确性。
    JPA测试用例

  • 相关阅读:
    我的世界-大堆网易账号免费送!!
    P1016 旅行家的预算
    P1015 回文数
    P1014 Cantor表
    P1013 进制位
    谷歌浏览器插件分享-tampermonkey油猴
    C++逐字输出函数
    P1012 拼数
    Windows下Nginx的启动、停止等命令
    遇到REMOTE HOST IDENTIFICATION HAS CHANGED怎么办?
  • 原文地址:https://www.cnblogs.com/enhe/p/12141719.html
Copyright © 2020-2023  润新知