2、JPA 环境搭建

1.创建Maven项目

2.添加依赖

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.hibernate.version>5.0.7.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-entitymanager</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>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

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

3.配置JPA核心配置文件

该文件默认情况下必须创建于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>
            <!--数据源
                驱动: javax.persistence.jdbc.driver
                数据库地址:javax.persistence.jdbc.url
                用户名:javax.persistence.jdbc.user
                密码:javax.persistence.jdbc.password
            -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="12345"/>
            <!--(可选)配置JPA实现方(Hibernate)的配置信息
                显示sql
                自动创建数据库表(建表策略)
                    create: 程序运行是创建数据库表(已存在则删,然后再创建)
                    update 程序运行时创建表(如果有表,不会创建表)
                    none 不会创建表
            -->
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>

    </persistence-unit>
</persistence>

4.编写实体类,建立实体类与表之间的关系

/**
 * 客户的实体类
 *      配置映射关系
 *          1、实体类和表的关系
 *          2、实体类中属性和表字段的映射关系
 * @Entity 声明实体类
 * @Table 配置实体类和表的映射关系
 *      name:配置数据库表的名称
 */
@Entity
@Table(name = "users")
public class Users {
    /**
     *  @Id: 声明主键的配置
     *  @GeneratedValue: 配置主键的生成策略
     *          strategy =
     *              GenerationType.IDENTITY 自动增长
     *                      要求你底层数据库必须支持自动增长
     *              GenerationType.SEQUENCE
     *                      要求底层数据库必须支持序列
     *              GenerationType.TABLE
     *                      JPA提供的一种机制,通过一张数据库表的形式完成主键自增
     *              GenerationType.AUTO
     *                      由程序自动选择主键生成策略
     *  @Column: 配置属性和字段的映射关系
     *          name:数据库表中字段的名称
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
    private Integer userId;
    @Column(name = "user_name")
    private String userName;
    @Column(name = "user_sex")
    private String userSex;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

    @Override
    public String toString() {
        return "Users{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", userSex='" + userSex + '\'' +
                '}';
    }
}

5.测试

/**
 * 测试jpa的保存
 *      1.加载配置文件创建工厂(实体类工厂)对象
 *      2.通过实体管理类工厂获取实体管理器
 *      3.获取事务对象,开启事务
 *      4.完成增删改查操作
 *      5.提交事务(回滚事务)
 *      6.释放资源
 */
@Test
public void testInsert(){
    //1.加载配置文件创建工厂(实体类工厂)对象
//        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
    //2.通过实体管理器工厂获取实体管理器
//        EntityManager entityManager = factory.createEntityManager();
    EntityManager entityManager = JpaUtils.getEntityManager();
    //3.获取事务对象,开启事务
    EntityTransaction transaction = entityManager.getTransaction();
    transaction.begin();
    //4.完成增删改查操作
    Users user = new Users();
    user.setUserName("小黑");
    user.setUserSex("男");
    //保存
    entityManager.persist(user);
    //5.提交事务(回滚事务)
    transaction.commit();
    //6.释放资源
    entityManager.close();
//        factory.close();
}
posted @ 2020-08-17 22:48  lawrence林  阅读(136)  评论(0编辑  收藏  举报