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相关的简单介绍,有个基本的认识就可以了,下载例子代码,运行下,看看具体的代码细节。

JPA OpenJPA 简单例子的更多相关文章

  1. Hibernate4.2.4入门(一)——环境搭建和简单例子

    一.前言 发下牢骚,这段时间要做项目,又要学框架,搞得都没时间写笔记,但是觉得这知识学过还是要记录下.进入主题了 1.1.Hibernate简介 什么是Hibernate?Hibernate有什么用? ...

  2. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  3. spring mvc(注解)上传文件的简单例子

    spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...

  4. ko 简单例子

    Knockout是在下面三个核心功能是建立起来的: 监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Declarative bindings) 模板 ...

  5. mysql定时任务简单例子

    mysql定时任务简单例子 ? 1 2 3 4 5 6 7 8 9     如果要每30秒执行以下语句:   [sql] update userinfo set endtime = now() WHE ...

  6. java socket编程开发简单例子 与 nio非阻塞通道

    基本socket编程 1.以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理 2.以下代码使用了1.8新特 ...

  7. 一个简单例子:贫血模型or领域模型

    转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...

  8. [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select

    以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...

  9. jsonp的简单例子

    jsonp的简单例子 index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...

随机推荐

  1. java日历类Calendar简单使用

    import java.util.Calendar; import java.util.TimeZone; public class Test1 { public static void main(S ...

  2. maven的pom报plugins却是的解决方法2

    Failure to transfer org.apache.maven.plugins:maven-plugins:pom:25 from https://repo.maven.apache.org ...

  3. 31、activity 四种工作模式

    一个应用通常(不一定)对应一个任务栈,相当于有个集合,保存了这个app里所有的页面栈的规则是先进后出,"进"就相当于打开了一个页面,"出"就相当于返回时关闭一个 ...

  4. POJ 1947-Rebuilding Roads(树形背包)

    题意: 一个树求得到一个节点数为p的子树,最小需要删除的边数. 分析:父节点到儿子这条边,删或不删,背包问题. #include <map> #include <set> #i ...

  5. python .whl文件与.egg文件用法

    都是python 的包,可以用来安装的 __.whl__文件是一个python的包,对应的安装方式是: pip install xx.whl __.egg__文件也是一个python的包,对应的安装方 ...

  6. java 注解(转)

    第一部分:了解一下java1.5起默认的三个annotation类型:    一个是@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的.    一个是@Deprecated:建 ...

  7. wuzhicms 无规律推荐位标签的嵌套使用

    这种布局的页面,要做推荐位的话,往往需要做3个推荐位.但这样就得维护3个推荐位内容. 其实可以通过简单粗暴的方式 一个推荐位即可搞定. 如下代码:  {wz:content action=" ...

  8. 命令rm

    mv -r 递归删除文件夹内所有东西mv -i 交互式删除mv -f 强制删除,没有警告提示

  9. python PIL下的各种问题

    为了实现验证码的功能,使用了PIL.结果出现各种问题: 先是"ImportError: The _imagingft C module is not installed",goog ...

  10. 本地已有SVN项目导入到eclipse中

    有时候在本地上checkout了项目,在eclipse中不希望重新checkout一次,可以如下操作: 1.在project上右键-> team -> share project -> ...