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 ...
随机推荐
- MyEclipse/Eclipse导入sun.misc.BASE64Encoder jar包步骤
1.右键项目 -->Properties -->Java Bulid Path-> Libraries -->JRE System Library-->Access ru ...
- 【转】Android动态改变对 onCreateDialog话框值 -- 不错不错!!!
原文网址:http://www.111cn.net/sj/android/46484.htm 使用方法是这样的,Activity.showDialog()激发Activity.onCreateDial ...
- git参考书籍
Pro GIt 简体中文版 http://iissnan.com/progit/
- GIS:揭开你神秘的面纱
转自:http://www.cnblogs.com/gisangela/archive/2013/02/20/2918884.html#!comments GIS从出现到为人所知,只不过经历了短短的几 ...
- 通过history.pushState无刷新改变url
通过history.pushState无刷新改变url 背景 在浏览器中改变地址栏url,将会触发页面资源的重新加载,这使得我们可以在不同的页面间进行跳转,得以浏览不同的内容.但随着单页应用的增多,越 ...
- HDU 5266 pog loves szh III
题意:给出一棵树,1为根节点,求一段区间内所有点的最近公共祖先. 解法:用一棵线段树维护区间LCA.LCA是dp做法.dp[i][j]表示点i的第2^j个祖先是谁,转移方程为dp[i][j] = dp ...
- SQL Server 触发器:表的特定字段更新时,触发Update触发器
create trigger TR_MasterTable_Updateon MasterTableafter updateas if update ([Type])--当Type字段被更新时,才会触 ...
- svn版本控制-windows篇
一.准备工作 1.获取 Subversion 服务器程序(服务端) 到官方网站(http://subversion.tigris.org/)下载最新的服务器安装程序.目前最新的是1.5版本,具体下载地 ...
- “菜单”(menubar)和“工具栏”(toolbars)
"菜单"(menubar)和"工具栏"(toolbars) "菜单" (menubar)和"工具栏"(toolbars) ...
- leetcode@ [62/63] Unique Paths II
class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleG ...