欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JPA(学习)

程序员文章站 2022-03-02 15:23:01
...

ORM思想

操作实体类就相当于操作数据库表。
就要建立两个映射关系:

  1. 建立实体类和表的关系。
  2. 建立实体类中属性和表中字段的关系。
    不再关注重点:SQl语句
    实现了ORM思想的框架:Mybatis、Hibernate。
    配置两个映射关系:
@ToString
@Data//get和set方法
/**
 * 注意!!!:导包都是javax.persistence的包
 * 1、完成实体类和表的映射关系
 * @Entity 声明实体类
 * @Table  配置实体类和表的映射关系
 *      name:配置数据库表的名称
 * 2、实体类中属性和表中字段的关系
 *
 */
@Entity
@Table(name = "cst_customer")
public class Customer {
    /**
     *     @Id 声明主键的配置
     *     @GeneratedValue 配置主键的策略
     *     (strategy = GenerationType.IDENTITY) 自增
     *     @Column 配置属性数据表中字段的映射关系
     *      name:数据库表中字段的名称
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "cust_id")
    private Long cust_id;
    @Column(name = "cust_name")
    private String cust_name;
    @Column(name = "cust_source")
    private String cust_source;
    @Column(name = "cust_industry")
    private String cust_industry;
    @Column(name = "cust_level")
    private String cust_level;
    @Column(name = "cust_address")
    private String cust_address;
    @Column(name = "cust_phone")
    private String cust_phone;
}

其中主键的生成策略:
* @GeneratedValue 配置主键的策略
* strategy
* GenerationType.IDENTITY: 自增 (底层数据库必须要支持自动增长)Mysql
* GenerationType.SEQUENCE: 序列 (底层数据库必须支持序列) Oracle
* GenerationType.TABLE : Jpa提供的一种机制,通过一张数据库表的形式帮助我们完成主键自增 相当于除了你的表,他会自己再建一个表来放下一次的自增id为多少
* GenerationType.AUTO : 由程序自动的帮助我们选择主键生成策略
测试代码:

    /**
     * 测试jpa的保存
     *      案例:保存一个客户到数据库
     * Jpa的操作
     *      1.加载配置文件创建工厂(实体管理类工厂)对象
     *      2.通过实体类管理类工厂获取实体类管理器
     *      3.获取事务对象,开启事务
     *      4.完成增删改查操作
     *      5.提交事务(回滚事务)
     *      6.释放资源
     */
    @Test
    void JpaTest() {
        //1.加载配置文件创建工厂(实体管理类工厂)对象
        /*维护了很多内容:浪费资源
         *线程安全,多个线程访问同一个不会有线程安全问题
         *如何解决资源浪费
         *创建一个公共的EntityManagerFactory对象
         *静态代码块形式创建
        */
        EntityManagerFactory myJpa = Persistence.createEntityManagerFactory("MyJpa");//配置文件中persistence-unit的名字
        //2.通过实体类管理类工厂获取实体类管理器
        /*
        *getTransaction:创建事务对象
        *persist:保存
        *merge:更新
        *remove:删除
        * find/getRefrence:根据id查询
        */
        EntityManager entityManager = myJpa.createEntityManager();
        // 3.获取事务对象,开启事务
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        // 4.完成增删改查操作
        Customer customer=new Customer();
        customer.setCust_name("cqupt");
        customer.setCust_address("南山");
        //保存
        entityManager.persist(customer);
        // 5.提交事务(回滚事务:rollback)
        transaction.commit();
        // 6.释放资源
        entityManager.close();
        myJpa.close();
    }

配置文件:

<?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.user
                密码:javax.persistence.jdbc.password
                驱动:javax.persistence.jdbc.driver
                数据库地址:javax.persistence.jdbc.url
-->
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="19980605"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/syfwfl?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=true&amp;serverTimezone=UTC"/>
            <!--可选配置:配置JPA实现方的信息
                显示Sql       :hibernate.show_sql:false|true
                自动创建数据库表:hibernate.hbm2ddl.auto:
                                                      create: 程序运行时创建数据库(如果有表先删除表再创建)
                                                      update: 程序运行时创建表(如果有表不会创建)
                                                      none  : 不会创建表
            -->
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>
相关标签: Jpa jpa

上一篇: JPA 学习

下一篇: JPA学习