zoukankan      html  css  js  c++  java
  • JPA OpenJPA 简单例子

    JPA

    全称,Java Persistence API,Java持久化API

    JPA是一套持久化标准,相当于JDBC标准,针对于此标准的实现目前有OpenJAP,TOPLINK,Hibernate等。


    OpenJPA

    是apache基金会针对于JPA2 标准开发的一套持久化实现类库。

    下载地址:http://openjpa.apache.org/                             http://openjpa.apache.org/downloads.html


    JPA书籍

    下载地址:http://download.csdn.net/detail/changsheng1453052832/5859125


    JPA 例子

    下载地址:http://download.csdn.net/detail/changsheng1453052832/5859153


    JPA文档chm格式

    下载地址:http://download.csdn.net/detail/changsheng1453052832/5859559


    例子讲解:


    例子代码下载完成之后,导入工程,可以看到如下的目录结构



    其中persistence.xml是JPA配置文件。内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
    	<!-- 持久化单元 -->
    	<persistence-unit name="EmployeeService" transaction-type="RESOURCE_LOCAL">
    		<!-- OpenJPA 持久化实现 -->
    		<provider>
    			org.apache.openjpa.persistence.PersistenceProviderImpl
    		</provider>
    		<!-- 指定哪些实体需要持久化 -->
    		<class>examples.model.Employee</class>
    		<!-- 配置数据库连接信息 -->
    		<properties>
    			<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="changsheng" />
    			
    			<!-- 可以自动生成数据库表 -->
    			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
    		</properties>
    	</persistence-unit>
    </persistence>


    获取EntityManager方法:

    EntityManagerFactory emf  =  Persistence.createEntityManagerFactory("EmployeeService");
    EntityManager em = emf.createEntityManager();


    其中“EmployeeService”为persistence.xml中持久化单元中的名字。


    在获取了EntityManager之后可以对你进行注册的实体进行操作。如Employee类。


    目前有一个EmployeeService对实体Employee进行操作,增删改查。将EntityManager注入进去。通过接口中的方法对实体进行操作。

    主要的方法有persist,find,remove,createQuery

    package examples.model;
    
    import java.util.Collection;
    
    import javax.persistence.EntityManager;
    import javax.persistence.Query;
    
    
    public class EmployeeService {
        protected EntityManager em;
    
        public EmployeeService(EntityManager em) {
            this.em = em;
        }
    
        public Employee createEmployee(int id, String name, long salary) {
            Employee emp = new Employee(id);
            emp.setName(name);
            emp.setSalary(salary);
            em.persist(emp);
            return emp;
        }
    
        public void removeEmployee(int id) {
            Employee emp = findEmployee(id);
            if (emp != null) {
                em.remove(emp);
            }
        }
    
        public Employee raiseEmployeeSalary(int id, long raise) {
            Employee emp = em.find(Employee.class, id);
            if (emp != null) {
                emp.setSalary(emp.getSalary() + raise);
            }
            return emp;
        }
    
        public Employee findEmployee(int id) {
            return em.find(Employee.class, id);
        }
    
        @SuppressWarnings("unchecked")
    	public Collection<Employee> findAllEmployees() {
            Query query = em.createQuery("SELECT e FROM Employee e");
            return (Collection<Employee>) query.getResultList();
        }
    }
    

    Employee领域对象

    package examples.model;
    
    import javax.persistence.Entity;
    import javax.persistence.Id;
    
    
    @Entity
    public class Employee {
        @Id
        private int id;
        private String name;
        private long salary;
    
        public Employee() {}
        public Employee(int id) {
            this.id = id;
        }
    
        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 String toString() {
            return "Employee id: " + getId() + " name: " + getName() + " salary: " + getSalary();
        }
    }


    在employee领域对象中,我们定义了ID,Name ,Salary(薪水)。当然每个员工需要有一个ID来进行标示,不可能重复。

    其中@Entity注解,指定Employee类是需要持久化的。

           @Id指定id字段作为实体的标示符。


    事务

    事务可以通过EntityManager.getTransaction() 

      em.getTransaction().begin();
      Employee emp = service.createEmployee(id, name, salary);
      em.getTransaction().commit();


    以上主要是和JPA相关的简单介绍,有个基本的认识就可以了,下载例子代码,运行下,看看具体的代码细节。




  • 相关阅读:
    查看网站上保存的密码
    前端图片预览
    Amaze UI的一点总结
    简单实现图片验证码
    获取网页数据的例子
    谈谈网页中的ajax
    网页小技巧-360doc个人图书馆复制文字
    Js中的4个事件
    网页页面蒙版实现
    Spring+SprinMVC配置学习总结
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3233875.html
Copyright © 2011-2022 走看看