JPA入门案例

  • 注:开发中使用SpringDataJpa,jpa只作为了解即可

jpa入门案例

依赖jar包

    
        
        
            junit
            junit
            4.12
        
        
        
        
            org.hibernate
            hibernate-entitymanager
            5.0.7.Final
        
        
        
        
            org.hibernate
            hibernate-c3p0
            5.0.7.Final
        
        
        
        
            log4j
            log4j
            1.2.17
        
        
        
        
            mysql
            mysql-connector-java
            5.1.6
        
    

创建表数据(略)

创建与数据库表对应的实体类(略)

在实体类上使用注释进行映射(重点)

  • @Entity //声明该类为实体类
  • @Table(name=“表名”) //声明该实体类对应数据库表
  • @Id //声明这个属性为数据库表字段
  • @Column(name=“字段名”) //声明该属性与该字段进行映射
  • @GeneratedValue(strategy = GenerationType.IDENTITY) //声明该属性对应字段为自增长策略(有三种策略方式,如不写则需手动指定主键)
@Entity
@Table(name = "cst_customer")
public class Customer implements Serializable {

    @Id
    @Column(name = "cust_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long custId;

    @Column(name = "cust_name")
    private String custName;

    @Column(name = "cust_source")
    private String custSource;
    ...

xml配置文件

  • 将配置文件存放到META-INT文件下,可被自动扫描
    在这里插入图片描述
  • 文件名必须为persistence



    
    
        
        
            org.hibernate.jpa.HibernatePersistenceProvider
        
        
        
            
            
            
            
            
            
            
            

            
            
            
               
            
		    
            
            
              
        
        

    


测试

步骤:

  1. 加载配置文件,创建实体类管理器工厂
  2. 根据工厂创建实体类管理器
  3. 获取事务对象
  4. 开启事务
  5. 保存(使用实体类管理器
  6. 提交事务
  7. 释放资源
import com.uda.pojo.Customer;
import org.junit.Test;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

public class jpaTest1 {
    @Test
    public void save(){
        //创建 实体类管理器工厂
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("myJpa");
        //创建 实体类管理器
        EntityManager entityManager = emf.createEntityManager();
        //获取 事务对象
        EntityTransaction transaction = entityManager.getTransaction();
        //开启事务
        transaction.begin();
        //创建对象使用实体类管理器进行保存操作
        Customer customer = new Customer();
        customer.setCustName("阿里");
        customer.setCustLevel("不屈白银");
        entityManager.persist(customer);
        //提交事务
        transaction.commit();
        //释放资源
        entityManager.close();
        emf.close();
    }
}

测试结果

  • 控制台
    JPA入门案例_第1张图片
  • 数据库成功保存数据
    在这里插入图片描述

使用JPA进行CRUD(了解)

新增数据(如上)

  • persist

查询数据

  • getReference:延迟加载,用到时再查询数据库,返回的是代理对象;可在实体类上加上final取消延迟。
  • find:立即发送sql语句。
   //查询数据
    public void select(){
        //实体类管理器工厂
        EntityManagerFactory myJpa = Persistence.createEntityManagerFactory("myJpa");
        //实体类管理器
        EntityManager entityManager = myJpa.createEntityManager();
        //事务对象
        EntityTransaction tx = entityManager.getTransaction();
        //开启事务
        tx.begin();
        
        /**
         * 查询数据;
         *   参数1:字节码
         *   参数2:主键(必须符合实体类的类型)
         */
        Customer customer = entityManager.getReference(Customer.class, 2L);       //getReference
        //Customer customer = entityManager.find(Customer.class, 2L);             //find
        System.out.println(customer);
        //提交事务
        tx.commit();
        //释放资源
        entityManager.close();
    }

更新数据

  • merge
    public void update(){
        //实体类管理器工厂
        EntityManagerFactory myJpa = Persistence.createEntityManagerFactory("myJpa");
        //实体类管理器
        EntityManager entityManager = myJpa.createEntityManager();
        //事务对象
        EntityTransaction tx = entityManager.getTransaction();
        //开启事务
        tx.begin();

        //先查询后更新
        Customer customer = entityManager.find(Customer.class, 2L);
        customer.setCustName("腾讯大厦");
        
        //提交事务
        tx.commit();
        //释放资源
        entityManager.close();
    }

删除数据

  • remove
    public void delete(){
        //实体类管理器工厂
        EntityManagerFactory myJpa = Persistence.createEntityManagerFactory("myJpa");
        //实体类管理器
        EntityManager entityManager = myJpa.createEntityManager();
        //事务对象
        EntityTransaction tx = entityManager.getTransaction();
        //开启事务
        tx.begin();

        //先删除后删除
        Customer customer = entityManager.find(Customer.class, 2L);
        entityManager.remove(customer);
        
        //提交事务
        tx.commit();
        //释放资源
        entityManager.close();
    }

JPQL语句

JPQL:完全面向对象的查询语言,类似sql;将表名替换为类名,字段名替换为属性名。

使用jpql查询全部

  • 实体类管理器.createQuery(“from 实体类”);
  • 实体类管理器.createQuery(“select 别名 where 实体类 别名”);
    public void jbqlSelect(){
        //实体类管理器工厂
        EntityManagerFactory myJpa = Persistence.createEntityManagerFactory("myJpa");
        //实体类管理器
        EntityManager entityManager = myJpa.createEntityManager();
        //事务对象
        EntityTransaction tx = entityManager.getTransaction();
        //开启事务
        tx.begin();
        //创建查询对象
        Query query = entityManager.createQuery("from Customer");
        //获取结果集
        Listcustomer = query.getResultList();
        //迭代输出
        for (Customer c : customer){
            System.out.println(c);
        }
        //提交事务
        tx.commit();
        //释放资源
        entityManager.close();
        myJpa.close();
    }

分页查询

  • query.setFirstResult(开始索引) // 设置开始记录索引
  • query.setMaxResults(每页数量); //设置每页大小
    public void page(){
        //实体类管理器工厂
        EntityManagerFactory myJpa = Persistence.createEntityManagerFactory("myJpa");
        //实体类管理器
        EntityManager entityManager = myJpa.createEntityManager();
        //事务对象
        EntityTransaction tx = entityManager.getTransaction();
        //开启事务
        tx.begin();
        //创建查询对象
        Query query = entityManager.createQuery("from Customer");
        //设置开始记录索引
        query.setFirstResult(4);  // =(当前页-1)*页大小
        //设置每页大小
        query.setMaxResults(2);
        //获取结果集
        Listcustomer = query.getResultList();
        //迭代输出
        for (Customer c : customer){
            System.out.println(c);
        }
        //提交事务
        tx.commit();
        //释放资源
        entityManager.close();
        myJpa.close();
    }

条件查询

  • 和使用jpql查询全部数据一致
  • 使用query.setParameter(第几个占位符,文本) 对占位符进行赋值
    JPA入门案例_第2张图片
    在查询中,获取查询结果
  • 获取结果集:查询对象.getResultList();
  • 结果为单行单列 如count(*) :查询对象.getSingleResult();

你可能感兴趣的:(JPA入门案例)