- 浏览: 3008797 次
- 性别:
- 来自: 河南
文章分类
- 全部博客 (340)
- Java综合 (26)
- 程序人生 (53)
- RIA-ExtJS专栏 (18)
- RIA-mxGraph专栏 (4)
- RIA-Flex4专栏 (43)
- 框架-Spring专栏 (16)
- 框架-持久化专栏 (22)
- 框架-Struts2专栏 (11)
- 框架-Struts专栏 (12)
- SQL/NOSQL (12)
- 报表/图表 (2)
- 工作流 (5)
- XML专栏 (4)
- 日常报错解决方案 (5)
- Web前端-综合 (12)
- Web/JSP (14)
- Web前端-ajax专栏 (14)
- Web前端-JQuery专栏 (9)
- IDE技巧 (6)
- FILE/IO (14)
- 远程服务调用 (2)
- SSO单点登录 (2)
- 资源分享 (22)
- 云计算 (1)
- 项目管理 (3)
- php专栏 (1)
- Python专栏 (2)
- Linux (1)
- 缓存系统 (1)
- 队列服务器 (1)
- 网络编程 (0)
- Node.js (1)
最新评论
-
hui1989106a:
我的也不能解压,360和好压都试了,都不行
《Spring in Action》完整中文版分享下载 -
temotemo:
这些example有些过时了,官方建议使用HBase-1.0 ...
Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询 -
zy8102:
非常感谢~
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载 -
zy8102:
重命名了一下搞定了
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载 -
zy8102:
为什么下载以后老解压不了呢?
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载
这次讲的JPA前一篇文章都有所介绍,这里呢就是结合hibernate.cfg.xml来讲讲,怎么用JPA进行CURD操作,类似于Hibernate的session进行CURD操作
hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///test</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.isolation">2</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<property name="format_sql">true</property>
<!-- mapping类声明-->
<mapping class="com.javacrazyer.domain.User" />
</session-factory>
</hibernate-configuration>
JPA使用要求SRC的META-INF下要有persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- example of a default persistence.xml -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="xkkjpa">
<properties>
<property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml" />
</properties>
</persistence-unit>
</persistence>
Hibernate这里用到的实体类映射是采用的是注解方式,其实就是JPA的注解
User.java
package com.javacrazyer.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;
private String pwd;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String toString(){
return "id=" + id + ",name=" + name + ",pwd=" + pwd;
}
}
UserDao.java
package com.javacrazyer.dao;
import java.util.List;
import javax.persistence.EntityManager;
import com.javacrazyer.common.JPAUtil;
import com.javacrazyer.domain.PageModel;
import com.javacrazyer.domain.User;
public class UserDao {
public void add(User user){
EntityManager em = JPAUtil.getEntityManager();
em.getTransaction().begin();
em.persist(user);
em.getTransaction().commit();
em.close();
}
@SuppressWarnings("unchecked")
public List<User> findAll(){
EntityManager em = JPAUtil.getEntityManager();
em.getTransaction().begin();
//JPAQL
List<User> users = em.createQuery("from User").getResultList();
em.getTransaction().commit();
em.close();
return users;
}
@SuppressWarnings("unchecked")
public PageModel<User> findByPager(int pageNo, int pageSize){
PageModel<User> pm = new PageModel<User>();
EntityManager em = JPAUtil.getEntityManager();
em.getTransaction().begin();
Long count = (Long)em.createQuery("select count(o) from User o").getSingleResult();
if(count != null){
List<User> users = em.createQuery("from User")
.setFirstResult((pageNo - 1) * pageSize)
.setMaxResults(pageSize)
.getResultList();
pm.setRecordCount(count.intValue());
pm.setDatas(users);
}
em.getTransaction().commit();
em.close();
return pm;
}
public User findById(Long id){
EntityManager em = JPAUtil.getEntityManager();
em.getTransaction().begin();
//User user = em.find(User.class, id); //相当于Hibernate的get()方法
User user = em.getReference(User.class, id); //相当于Hibernate的load()方法
em.getTransaction().commit();
em.close();
return user;
}
public void update(User user){
EntityManager em = JPAUtil.getEntityManager();
em.getTransaction().begin();
user = em.merge(user);
em.getTransaction().commit();
em.close();
}
public void delete(User user){
EntityManager em = JPAUtil.getEntityManager();
em.getTransaction().begin();
em.remove(user);
em.getTransaction().commit();
em.close();
}
}
PageModel.java
package com.javacrazyer.domain;
import java.util.List;
/**
* 分页组件(包含当前页结果数据列表和总记录数)
* 注意,它不是持久化实体类
*
*/
public class PageModel<T> {
private int recordCount;
private List<T> datas;
public int getRecordCount() {
return recordCount;
}
public void setRecordCount(int recordCount) {
this.recordCount = recordCount;
}
public List<T> getDatas() {
return datas;
}
public void setDatas(List<T> datas) {
this.datas = datas;
}
}
JPAUtil.java
package com.javacrazyer.common;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JPAUtil {
private static EntityManagerFactory factory;
static {
//加载src/META-INF/PERSISTENTCE.XML ,根据配置文件中的键加载
factory = Persistence.createEntityManagerFactory("xkkjpa");
}
private JPAUtil() {}
public static EntityManager getEntityManager() {
return factory.createEntityManager();
}
}
测试代码
package com.javacrazyer.dao.test;
import org.junit.Assert;
import org.junit.Test;
import com.javacrazyer.dao.UserDao;
import com.javacrazyer.domain.PageModel;
import com.javacrazyer.domain.User;
public class UserDaoTest {
private UserDao dao = new UserDao();
@Test
public void testAdd(){
User user = new User();
user.setName("xxxx");
user.setPwd("12345678790");
dao.add(user);
Assert.assertNotNull(user.getId());
}
@Test
public void testFindByPager(){
PageModel<User> pm = dao.findByPager(2, 1);
for(User user : pm.getDatas()){
System.out.println(user);
}
}
}
根据JPA对实体类进行CRUD的操作特点与Hibernate的处理方式做下对比
Hibernate处理方式为:通过SessionFactory获得session,然后通过session的各种方法进行CURD操作
JPA的处理方式为:通过EntityManagerFactory获得entityManager,然后通过entityManager的各种方法进行CURD
Hibernate是SessionFacotory sessionFactory=config.buidSessionFacotory()
JPA是EntityManagerFactory entityManagerFactory=Persistence.createEntityManagerFactory("xkkjpa");
hibernate是Session session=sessionFactory.openSesion()
JPA是EntityManager entityManager=factory.createEntityManager()
session的增删改查为save,delete,update,merge,createQuery()
entityManager的增删改为persist,remove,merge,createQuery
发表评论
-
ibatis常用16条SQL语句
2011-07-29 11:08 26091(1) 输入参数为单个值 ... -
iBATIS与Hibernate的异同
2010-12-30 14:47 3713Hibernate Hibernate是一个开放源代 ... -
iBATIS与Spring整合
2010-12-30 14:34 4881接着iBATIS的入门实例来说,ibatis与Spring的 ... -
Hibernate温习(17)--OpenSessionInView模式
2010-11-11 17:04 4564在WEB应用程序中,视图(JSP或Servlet)可能会通过导 ... -
Hibernate温习(16)--性能优化之缓存管理
2010-11-11 16:02 17811.缓存概述 缓存(cache) ... -
Hibernate温习(15)--性能优化之抓取策略
2010-11-11 14:51 3522抓取策略(fetching strategy) 是指:当应 ... -
Hibernate温习(14)--性能优化之延迟加载机制
2010-11-11 11:33 1775延迟加载 延迟加载 ... -
Hibernate温习(13)--Hibernate程序性能优化的考虑要点
2010-11-11 10:55 1341本文依照HIBERNATE帮助文档,一些网络书籍及项目经 ... -
Hibernate温习(12)--基于注解方式的各种映射全面总结
2010-11-11 10:43 36001. 使用Hibernate Annotation来做对 ... -
Hibernate温习(11)--多事务并发访问控制
2010-11-11 10:25 7437在并发环境,一个数据库系统会同时为各种各样的客户程序 ... -
Hibernate温习(10)--应用程序中的事务管理
2010-11-11 09:26 1939事务的定义 事务就是指作为单个逻辑工作单元执行的一组数据操作 ... -
Hibernate温习(9)--有关Hibernate升级后注解方式的对象关系映射
2010-11-10 17:06 3341我要说的升级指的是我实际中遇到的,由于我之前的项目中Hiber ... -
Hibernate进行测试时时常会有的错误
2010-11-10 14:31 1502在hibernate程序中,如果使用JUNIT进行测试的话,第 ... -
Hibernate温习(7)--JPA回顾
2010-11-10 10:39 1978什么是JPA JPA(Java Pers ... -
Hibernate温习(6)--单向一对一外键关联映射
2010-11-05 10:24 2616hibernate一对一唯一外键关联映射(单向关联Citize ... -
Hibernate温习(5)--集合属性映射
2010-11-04 22:37 2451Hibernate的集合属性映射 ... -
Hibernate温习(3)--有关session的总结
2010-11-04 17:22 4239说到Hibernate那么最核心的就是它的有关数据库的增删改查 ... -
Hibernate温习(1)--最基础的示例
2010-11-04 14:22 3453有关Spring的知识大部分都已经温习完毕,今天开始转向Hib ... -
ibatis入门实例讲解
2010-10-25 10:39 12993之前大家上网的ibatis官方网站:http://www.i ... -
HIbernate温习(2)--连接池配置总结基于第三方c3p0和proxool
2010-07-26 14:42 3443一直都在用连接池技术,也是个好习惯,但用连接 ...
相关推荐
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码 hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码
hibernate-jpa-2.0-api-1.0.1.Final-sources.jar hibernate jpa 源代码
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar官方下载,请放心使用
`hibernate-jpa-2.1-api-1.0.0.final.jar`是Hibernate对JPA 2.1规范的实现库,它使得开发者能够使用Hibernate的高效功能同时遵循JPA规范。 **1. Hibernate与JPA的关系** Hibernate最初作为一个独立的ORM框架,后来...
java.lang.NoClassDefFoundError: javax/persistence/spi/ProviderUtil 或javax/persistence/entitylistener问题
java运行依赖jar包
hibernate-jpa-2.0-api-1.0.1.Final.jar hibernate-search-4.2.0.Final.jar hibernate-search-analyzers-4.2.0.Final.jar hibernate-search-engine-4.2.0.Final.jar hibernate-search-orm-4.2.0.Final.jar hibernate...
这个源码包"hibernate-jpa-2.0-api-1.0.1.Final-sources"包含了完整的源代码,可以帮助我们深入了解其内部机制,从而更好地应用在实际项目中。 1. **JPA简介**:Java Persistence API(JPA)是Java平台上的一个标准...
《深入理解Hibernate JPA 2.1 API:源码解析》 在Java世界里,ORM(Object-Relational Mapping)框架的出现极大地简化了...同时,源码阅读也有助于提升问题排查和性能优化的能力,是每个Hibernate使用者进阶的必经之路。
**标题详解:** "hibernate-jpa-2.1-api 1.0.0.Final API" 这个标题指的是Hibernate对Java Persistence API (JPA) 2.1规范的实现,版本为1.0.0.Final。Hibernate是Java领域中最受欢迎的对象关系映射(ORM)框架之一...
JAVAX.PERSISTENCE 的 JAR 包
hibernate-jpa-2.1-api-1.0.2
antlr-2.7.7.jar dom4j-1.6.1.jar geronimo-jta_1.1_spec-1.1.1.jar hibernate-commons-annotations-5.0.1.Final.jar hibernate-core-5.0.7.Final.jar hibernate-jpa-2.1-api-1.0.0.Final.jar jandex-2.0.0.Final....
安全,可以对其进行数字签名,只让能够识别数字签名的用户使用里面的东西。 加快下载速度; 压缩,使文件变小,与ZIP压缩机制完全相同。 包封装。能够让JAR包里面的文件依赖于统一版本的类文件。 可移植性,能够...