JPA开发(上)一个单表案例入门JPA开发

更多JPA开发在框架开发


1 什么是JPA开发?

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 —–百度百科

Hibernate技术出现后,各种ORM模型相继出现,为了同一的规范,创造Hibernate的团队规定了ORM的一套规范,也就是JPA 。

Hibernate中有JPA的规范和实现,所以JPA的资源包同Hibernate的资源包是一样的,在Hibernate官网中下载,本文用的是 。

2 单表(user)案例入门JPA开发

Hibernate中有JPA的规范和实现,所以JPA的资源包同Hibernate的资源包是一样的,在Hibernate官网中下载,本文用的是hibernate-release-5.2.17.Final

2.1 JPA 环境

hibernate 相关: hibernate-release-5.2.17.Final/lib/required 下的所有jar包

jpa 相关 : hibernate-release-5.2.17.Final/lib/jpa-metamodel-generator下的一个jar包

数据库相关: mysql包(自行下载)和c3p0(hibernate-release-5.2.17.Final/lib/optional/c3p0下的所有jar包)
日志jar包 : log4j 、slf4j(自行下载)
这里写图片描述

创建数据库: create database db_jpa ;

扫描二维码关注公众号,回复: 1652849 查看本文章

2.1 persistence.xml

src下创建名字为META-INF的文件夹,文件夹下创建persistence.xml文件(位置名字都是固定的)。

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
   persistence标签中的属性和属性值可在hibernate-jpamodelgen-5.2.17.Final.jar\persistence_2.1.xsd
   中找到
 -->
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
          http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
        version="2.1">
     <!-- 配置持久化单元,可以配置多个,名称不能重复 
          transaction-type是事务类型:JTA ,RESOURCE_LOCAL是本地事务
     -->
     <persistence-unit name="JPAUnit01" transaction-type="RESOURCE_LOCAL">      
          <!-- 连接数据相关 -->
          <properties>
             <property name="hibernate.connection.driver_class" value="com.mysql.cj.jdbc.Driver"/>
             <property name="hibernate.connection.url" value="jdbc:mysql:///db_jpa?useSSL=false"/>
             <property name="hibernate.connection.username" value="root"/>
             <property name="hibernate.connection.password" value="root"/>
             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
             <property name="hibernate.show_sql" value="true"/>
             <!-- <property name="hibernate.format_sql" value="true"/> -->
             <property name="hibernate.hbm2ddl.auto" value="update"/>
             <!-- c3p0数据库连接池 -->
             <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>
          </properties>
     </persistence-unit>

</persistence> 

2.2 实体类注解

package edu.kmust.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
/**
 * 用户实体类 单表
 * @author zhaoyuqiang
 *
 */
@Entity   //表明该类是一个实体类 
@Table(name="tb_user")  //建立当前实体类与数据库表的关系
public class User {
    @Id   //表明当前属性是主键
    @Column(name="user_id") //属性对应表字段的名字
    //主键增长策略。 generator属性可以使用hibernate的生成策略,如(uuid和native),而strategy是jsp中提供的生成策略
    @GeneratedValue(strategy=GenerationType.IDENTITY) //主键增长策略。
    private Integer userId ;
    @Column(name="user_name")
    private String userName ;
    //此处省略getter和setter方法
}

2.3 JPAUntils

package edu.kmust.units;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JPAUnit {
    private static EntityManagerFactory factory ;
    static {
        //相当于hibernate中的SessionFactory
        factory = Persistence.createEntityManagerFactory("JPAUnit01");
    }
    /**
     * 获取JPA操作数据库的对象
     * @return
     */
    public static EntityManager createEntityManager() {
        return factory.createEntityManager();
    }
}

2.4 添加、删除与修改

/**
     * 添加
     */
    @Test
    public void add() {
        EntityManager em  = JPAUnit.createEntityManager();
        EntityTransaction tx =  em.getTransaction();
        try {
            tx.begin();
            User user = new User();
            user.setUserName("赵玉强");
            em.persist(user);
            tx.commit();
        } catch (Exception e) {
            tx.rollback();
        }finally {
            em.close();
        }   
    }
    /**
     * 根据id查询,然后更改
     *    find()相当于hibernate中的get(),属于立即查询
     *    getReference()相当于hibernate中的load(),属于延迟查询
     *    
     */
    @Test
    public void update() {
        EntityManager em = JPAUnit.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        User user = em.find(User.class, 4);
        user.setUserName("于鲲"); //这一步就已经更新了,之后的merge()可以不用写
        em.merge(user);//合并的意思,是JPA中的更改方法。
        tx.commit();
        em.close();
    }
    /**
     * 根据id查询,然后删除
     */
    @Test
    public void del() {
        EntityManager em = JPAUnit.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        User user =  em.find(User.class,1);
        em.remove(user);
        tx.commit();
        em.close();
    }

2.5 查询

    /**
     * 详细查询
     *   和hibernate的HQL方式类似,不能省略select 
     */
    @Test
    public void query() {
        EntityManager em = JPAUnit.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        /**
         * 查询所有
         *    javax.persistence.Query;
         */
        /*Query query = em.createQuery("select u from User u");
        List<User> userList = query.getResultList();*/
        /**
         * 条件查询
         *    占位符是从0开始的,根据hibernate版本不同,可能有从1开始的版本
         */
        /*Query query = em.createQuery("select u from User u where userName like ?");
        query.setParameter(0, "%婷");
        List<User> userList = query.getResultList();*/
        /**
         * 统计查询
         */
        Query query = em.createQuery("select count(*) from User ");
        Long count = (Long)query.getSingleResult();
        System.out.println(count.intValue());
        /*for (User user : userList) {
            System.out.println(user.getUserName());
        }*/
        tx.commit();
        em.close();
    }

资源下载

JPA学习代码下载:
https://download.csdn.net/download/g425680992/10484800

Hibernate学习代码下载:
https://download.csdn.net/download/g425680992/10484797

猜你喜欢

转载自blog.csdn.net/g425680992/article/details/80725763
今日推荐