JPA入门案例之环境搭建

JPA入门案例之环境搭建

Scroll Down

搭建开发环境

创建maven项目并导入坐标

<properties>
	<project.hibernate.version>5.4.27.Final</project.hibernate.version>
</properties>
<dependencies>
	<!-- junit -->
	<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- hibernate对jpa的支持包 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${project.hibernate.version}</version>
        </dependency>

        <!-- c3p0 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${project.hibernate.version}</version>
        </dependency>

        <!-- log日志 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.12.1</version>
        </dependency>

        <!-- Mysql and MariaDB -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
</dependencies>

创建用户实体类并配置JPA注解

@Data
@Entity
@Table(name = "t_user")
public class User {
    @Id
    @GeneratedValue
    @Column(name = "t_id")
    private Long id;

    @Column(name = "t_username")
    private String username;

    @Column(name="t_password")
    private String password;
}

所有的注解都是使用JPA的规范提供的注解,即javax.persistence包下的。

常用注解说明

  • @Entity : 指定当前类是实体类
  • @Table : 指定实体类和表之间的对应关系
    • name : 指定数据库表的名称
  • @Id : 指定当前字段是主键
  • @GeneratedValue : 指定主键的生成方式
    • strategy : 指定主键生成策略
      • GenerationType.AUTO:默认,由程序自动的帮助我们选择主键生成策略
      • GenerationType.IDENTITY: 底层数据库必须支持自动增长,如mysql
      • GenerationType.SEQUENCE: 底层数据库必须支持序列,如oracle
      • GenerationType.TABLE: jpa提供的一种机制,通过一张数据库表的形式帮助我们完成主键自增
  • @Column: 指定实体类属性和数据库表之间的对应关系
    • name:指定数据库表的列名称
    • unique:表示该字段是否为唯一标识,默认为false
    • nullable:表示该字段是否可以为null值,默认为true
    • inserttable:表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值,默认true
    • updateable:表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值,默认true
    • columnDefinition: 表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用
    • table: 定义了包含当前字段的表名,默认当前实体类
    • length: 表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符
    • precisionscale: 当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数

配置JPA核心配置文件

在maven项目的resources目录下创建一个名为META-INF的文件夹,在此文件夹下创建一个名为persistence.xml的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <!--需要配置persistence-unit节点
            持久化单元:
                name:持久化单元名称
                transaction-type:事务管理的方式
                    JTA:分布式事务管理
                    RESOURCE_LOCAL:本地事务管理
        -->
    <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
        <!--jpa的实现方式-->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <properties>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="123456"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa?useSSL=false&amp;allowPublicKeyRetrieval=true&amp;serverTimezone=UTC"/>

            <!--配置jpa实现方(hibernate)的配置信息
                显示sql           :   false|true
                自动创建数据库表    :  hibernate.hbm2ddl.auto
                        create      : 程序运行时创建数据库表(如果有表,先删除表再创建)
                        update      :程序运行时创建表(如果有表,不会创建表)
                        none        :不会创建表
            -->
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>
    </persistence-unit>
</persistence>