入门 jpa--实体管理器的基本应用

Posted watchfree

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了入门 jpa--实体管理器的基本应用相关的知识,希望对你有一定的参考价值。

1.新建Jpa项目

 

2.引入所需的jar 包

3.创建实体类

package com.watchfree.entity;

import javax.persistence.Entity;
import javax.persistence.Id;
/**
 *  创建实体类
 * @author watchfree
 * @date 2016年12月6日下午7:12:43
 */
@Entity
public class Employee {
    
    @Id private int id ;
    private String name ; 
    private long salary ;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public long getSalary() {
        return salary;
    }
    public void setSalary(long salary) {
        this.salary = salary;
    }
  public Employee() {
        
    }
    
    public Employee(int id){
        this.id = id ;
    }
    
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "employee: id: "+this.id + " ,name: "+this.name + " ,saray: "+this.salary;
    }

}

4.配置JPA Content 下的 persistence.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    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">
    <persistence-unit name="EmployeeService"
        transaction-type="RESOURCE_LOCAL">
        <class>com.watchfree.entity.Employee</class>
        <properties>
        <!-- 数据库连接操作 -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/jpa" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="root" />

            <!-- 配置 JPA 实现产品的基本属性. 配置 hibernate 的基本属性 -->
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>

 5.创建操作Employee实体的服务类

package com.watchfree.service;

import javax.persistence.EntityManager;

import com.watchfree.entity.Employee;

/**
 * 操作Employee实体的服务类
 * 
 * @author watchfree
 * @date 2016年12月6日下午6:47:42
 */
public class EmployeeService {
    protected EntityManager entityManager;

    public EmployeeService(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    /**
     * 创建Employee方法
     * 
     * @param id
     * @param name
     * @param salary
     * @return
     */
    public Employee createEmployee(int id, String name, long salary) {
        Employee employee = new Employee(id);
        employee.setName(name);
        employee.setSalary(salary);
        entityManager.persist(employee);
        return employee;
    }

    /**
     * 删除
     * 
     * @param id
     */
    public void removeEmployee(int id) {
        Employee employee = findEmployee(id);
        if (employee != null) {
            entityManager.remove(employee);
        }
    }

    /**
     * 查找
     * 
     * @param id
     * @return
     */
    public Employee findEmployee(int id) {
        return entityManager.find(Employee.class, id);
    }
    /**
     * 更新
     * @param id
     * @param raise
     * @return
     */

    public Employee raiseEmployeeSalary(int id, long raise) {
        Employee employee = entityManager.find(Employee.class, id);
        if (employee != null) {
            employee.setSalary(employee.getSalary() + raise);
        }
        return employee;
    }

    /**
    * 查詢所有
    * @return
    */
      public List<Employee> findAllEmployees() {
         TypedQuery<Employee> query = entityManager.createQuery("SELECT e FROM Employee e",Employee.class);
        return query.getResultList();
       }

}

6.创建测试类

package com.watchfree.test;

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

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.watchfree.entity.Employee;
import com.watchfree.service.EmployeeService;

public class EmpoyeeTest {
    
    private EntityManagerFactory entityManagerFactory ;
    private EntityManager entityManager ;
    private EntityTransaction transaction ;
    private EmployeeService employeeService ;
    
    @Before
    public void init() {
        entityManagerFactory = Persistence.createEntityManagerFactory("EmployeeService") ;
        entityManager = entityManagerFactory.createEntityManager() ;
        transaction = entityManager.getTransaction() ;
        employeeService = new EmployeeService(entityManager) ;
    }
    
    @After
    public void destory(){
        entityManager.close();
        entityManagerFactory.close();
    }
    
}

6.1测试添加操作

  /**
     * 创建测试
     */
    @Test
    public void createTest() {
        transaction.begin();
        Employee employee = employeeService.createEmployee(158, "watchfree", 35000);
        transaction.commit();
        System.out.println(employee.toString());
    }

6.1.2  控制台输出:

6.1.3 查看数据库信息

6.2测试查询

/**
     * find
     */
    @Test
    public void findTest() {
      Employee employee = employeeService.findEmployee(158);
      System.out.println(employee.toString());
    }

6.2.1控制台输出

 6.3 测试查询所有数据库数据

/**
     * 查詢所有
     * @return
     */
    public List<Employee> findAllEmployees() {
        TypedQuery<Employee> query = entityManager.createQuery("SELECT e FROM Employee e",Employee.class);
        return query.getResultList();
    }

6.3.1控制台输出

6.4 更新操作测试

/**
     * 更新測試
     */
    @Test
    public void updateTest (){
        transaction.begin();
        Employee employee = employeeService.raiseEmployeeSalary(158, 1000);
        transaction.commit();
        System.out.println(employee);
    }

6.4.1控制台输出

6.4.2数据库信息

6.5删除数据测试

/**
     * 刪除測試
     */
    @Test
    public void deleteTest() {
        transaction.begin();
        employeeService.removeEmployee(158);
        transaction.commit();
        System.out.println("remove Employee 158");
    }

6.5.1控制台输出

6.5.3查看数据库信息 id为158的记录被删除

参考资料:《Pro JPA2 Mastering the Java Persistence API》

以上是关于入门 jpa--实体管理器的基本应用的主要内容,如果未能解决你的问题,请参考以下文章

Java Servlet 过滤器和其他对象和实体管理器的范围

学习Spring-Data-Jpa---JPA基本注解

Flowable入门系列文章70 - JPA介绍

运行时来自数据源的 JPA 实体管理器

Spring Data Jpa系列教程--------实体解析和关联关系

JPA的入门CRUD