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相关的简单介绍,有个基本的认识就可以了,下载例子代码,运行下,看看具体的代码细节。
JPA OpenJPA 简单例子的更多相关文章
- Hibernate4.2.4入门(一)——环境搭建和简单例子
一.前言 发下牢骚,这段时间要做项目,又要学框架,搞得都没时间写笔记,但是觉得这知识学过还是要记录下.进入主题了 1.1.Hibernate简介 什么是Hibernate?Hibernate有什么用? ...
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答
一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...
- spring mvc(注解)上传文件的简单例子
spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...
- ko 简单例子
Knockout是在下面三个核心功能是建立起来的: 监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Declarative bindings) 模板 ...
- mysql定时任务简单例子
mysql定时任务简单例子 ? 1 2 3 4 5 6 7 8 9 如果要每30秒执行以下语句: [sql] update userinfo set endtime = now() WHE ...
- java socket编程开发简单例子 与 nio非阻塞通道
基本socket编程 1.以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理 2.以下代码使用了1.8新特 ...
- 一个简单例子:贫血模型or领域模型
转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...
- [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select
以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...
- jsonp的简单例子
jsonp的简单例子 index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...
随机推荐
- HDU 5623KK's Number DP
题意:bc round 71 div 1 1003(有中文题面) 分析: 显然,每个人的策略就是都会拿剩下的数中最大的某几个数 假如我们用dp[i]表示当剩下i个数的时候先手得分-后手得分的最优值 那 ...
- Ajax异步请求-简单模版
<script type="text/javascript"> window.onload = function () { document.getElementByI ...
- 陈灯WGF双缓冲绘图框架
“木丸子童屋”,专售各类儿童玩具,价格优惠,请大家多多支持:http://shop65552598.taobao.com/ WGF(windows graphic foundation)为window ...
- CodeForce---Educational Codeforces Round 3 The best Gift 解题报告
对于这题笔者认为可以用数学排列来算,但是由于笔者很懒所以抄了一段大神的代码来交个大家了, 这位大神的基本想法就是通过记录各类书的数量,再暴力破解: 下面贴出这位大神的代码吧: #include< ...
- 【原】Storm基本概念
Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Topologies Streams Spouts Bolts Stream groupings Reli ...
- ZOJ3469 Food Delivery 区间DP
题意:有一家快餐店送外卖,现在同时有n个家庭打进电话订购,送货员得以V-1的速度一家一家的运送,但是每一个家庭都有一个不开心的值,每分钟都会增加一倍,值达到一定程度,该家庭将不会再订购外卖了,现在为了 ...
- ORM存储过程和实体类代码生成工具
ORM存储过程和实体类生成工具 自己写的一个ORM框架的存储过程和实体类生成工具,具体界面如下: 操作步骤: 1.设置数据库连接: 2.选择要生成的表或视图: 3.选择要生成的存储过程类型: 4.如果 ...
- 集合框架-Map练习-记录字母出现的次数
/* * 练习: * 字符串"abcb453 sddbs343bsjvAJBBDVBs21768723",获取该字符串中,每一个字母出现的次数. * 要求打印结果是:a(2)b ...
- Keil Mdk5.0 破解包 和谐包【worldsing笔记】
有关Keil MDK 5.0的介绍和下载 http://www.cnblogs.com/worldsing/p/3355911.html 下载地址 点击下载:http://pan.baidu.com/ ...
- 【AwayPhysics学习笔记】:Away3D物理引擎的简介与使用
首先我们要了解的是AwayPhysics这个物理引擎并不是重头开始写的新物理引擎,而是使用Flascc技术把一个已经很成熟的Bullet物理引擎引入到了Flash中,同时为了让as3可以使用这个C++ ...