首页 > 代码库 > JPA学习
JPA学习
JPA是一套对象持久化规范,可以通过多种工具实现它。比如常见的Hibernate。按说初学就该照猫画虎的写例子,可是总改不了探究为什么的好奇心。于是在经历了不少曲折和困惑之后,终于把Hibernate和eclipselink两种实现的例子都完成了,也体会了一点二者的区别。
先看在eclipse里的默认jpa项目的做法:
新建JPAProject,填写项目名称和Targetruntime(因为只是个简单的例子,不需要部署到服务器上,就选了jre),再点几次next之后,就过不去了,因为要求必须使用一个UserLibrary。这就是要添加实现jpa的类库。如果使用eclipselink可以选择下载,如果使用hibernate,可以新建一个,然后把hibernate包里的各个jar文件加进来。最终二者就是在persistence.xml文件的描述上有些许区别,这也是JPA规范的目的所在——使代码尽量不要绑定特定的ORM框架。下面是示例代码:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" 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_2_0.xsd"> <persistence-unit name="jpa-link2" transaction-type="RESOURCE_LOCAL"> <class>com.jpalink2.zjc.Connect</class> <properties> <property name="javax.persistence.jdbc.driver" value=http://www.mamicode.com/"com.mysql.jdbc.Driver"/>>package com.jpalink2.zjc; import javax.persistence.*; /** * Entity implementation class for Entity: Connect * */ @Entity @Table(name="contacts") public class Connect { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; private String tel; public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getTel() { return this.tel; } public void setTel(String tel) { this.tel = tel; } public static void main(String[] arg){ EntityManagerFactory emf =Persistence.createEntityManagerFactory("jpa-link2"); Connect c=new Connect(); c.setName("hanmeimei"); c.setTel("13912423846"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); em.persist(c); em.getTransaction().commit(); em.close(); emf.close(); } }Hibernate示例代码:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" 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_2_0.xsd"> <persistence-unit name="jpa-hibernate"> <properties> <!--配置Hibernate方言 --> <property name="hibernate.dialect" value=http://www.mamicode.com/"org.hibernate.dialect.MySQL5Dialect" />>package com.jpahibernate.zjc; import javax.persistence.*; /** * Entity implementation class for Entity: Connect * */ @Entity @Table(name="contacts") public class Connect { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; private String tel; public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getTel() { return this.tel; } public void setTel(String tel) { this.tel = tel; } public static void main(String[] arg){ EntityManagerFactory emf =Persistence.createEntityManagerFactory("jpa-hibernate"); Connect c=new Connect(); c.setName("zhangxiaoga"); c.setTel("13912423846"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); em.persist(c); em.getTransaction().commit(); em.close(); emf.close(); } }除了包名不同,其他代码一模一样。两个项目也都用的同一张表,先执行这个项目可以自动创建表,再执行上面的项目就不会报错了。
几个小插曲:
noinstall版本的mysql在修改my.ini的时候,增加basedir和datadir路径需要用/分隔,如:d:/soft/mysql,否则启动不了服务
选择创建普通java project也是可以完成示例的。而如果选择创建的是JPA Project,每添加一个@Entity注释的类,系统就会自动去检查是否增加到了persistence.xml中(没有添加也可以执行,但作为有点强迫症的程序员,看着这个红叉实在是难受),如果不希望系统检查,删掉.project中的语句——<nature>org.eclipse.wst.common.project.facet.core.nature</nature>,重启eclipse即可。JPA学习
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。