JPA是什么?怎样开发JPA应用?
来源:互联网 发布:炫舞炸家族邀请软件 编辑:程序博客网 时间:2024/06/05 00:14
为什么使用JPA?
ORM框架不止一种,包括JDO,iBatis,TopLink,KODO,OpenJPA等等多种开源的和商业的产品。那么这有什么问题呢?假设现在我们的项目是用Hibernate开发的,运行在Oracle数据库之上,然而上线运行一段时间后,发现有一些性能上的问题,而这时候我们想找人来做技术支持,希望它来帮我们解决这些问题,因为开发人员并不是个个都能读懂Hibernate的源码然后找到问题所在的。这是第一种可能:客户(通常是有钱的大客户)希望能在遇到问题时有人提供商业的技术支持和顾问服务。第二种可能:Oracle公司推出了专用于对Oracle数据库特别优化过的ORM产品,名为TopLink,然而很不幸,虽然它能解决我们的问题,但是,因为Hibernate的类库的包结构和TopLink的相差太远,一个是以org.hibernate开头的,另一个却是以com.oracle开头的,更要命的是,两者之间的类库根本就没有相似之处!那我们的项目并不能通过简单的将代码的包换一下,就能迁移成功,下载岂不是要所有涉及Hibernate的地方都得重写!换句话说,当我们使用Hibernate或者其它ORM框架开发时,我们的代码已经被绑死了!虽然代码是和数据库无关的,然而数据库访问的Java代码却是死死的和某种框架绑定在一起了。
1创建JPAHello项目
1.1创建表格
1.2创建 HelloJPA Java Project
在MyEclipse 中我们可以将 JPA 开发功能添加到很多种项目上,一般最常见的恐怕就是添加到Java项目或者Web项目上了。在本节我们打算用简单的Java Project ,便于展
示JPA如何工作。
首先确保已经打开了MyEclipse Java Enterprise透视图,然后进行下列操作:
1. 从MyEclipse 菜单栏选择 File > New > Java Project,接着会打开 New Java Project 向导;
2. 输入 HelloJPA到 Project name ;
3. 在Project Layout 下选中 Create separate source and output folders 单选钮;
4. 点击Finish按钮关闭对话框。
这样Java项目就建立完毕了。稍等片刻会弹出一个切换透视图的对话框,为了避免造成更多的麻烦,我们一般选择No按钮就可以了。
1.3添加 JPA Capabilities 到现有项目
按图执行以下操作:
1.4 使用JPA配置文件编辑器修改文件 打开/src/META-INF/persistence.xml
修改后如下:
1.5 使用反向工程快速生成JPA实体类和DAO
首先打开MyEclipse Database Explorer透视图。切换透视图有两种办法,如何切换请参考3.1.3透视图(Perspective)切换器。一种比较快办法是如那一节介绍的,点击工具栏上的点击 按钮可以显示多个透视图供切换,如图3.3所示,然后单击其中的MyEclipse Database Explorer 即可切换到此透视图;另一种办法是选择菜单 Window > Open Perspective > Other > MyEclipse Database Explorer来显示打开透视图对话框,然后点击OK按钮。
按图步骤操作:
1.6 调整生成的实体类标注
调整后的实体类如下:
1.7 编写测试代码
测试结果:
JPA其他部分:
JPA生成一对多等复杂映射代码
Spring整合JPA开发
ORM框架不止一种,包括JDO,iBatis,TopLink,KODO,OpenJPA等等多种开源的和商业的产品。那么这有什么问题呢?假设现在我们的项目是用Hibernate开发的,运行在Oracle数据库之上,然而上线运行一段时间后,发现有一些性能上的问题,而这时候我们想找人来做技术支持,希望它来帮我们解决这些问题,因为开发人员并不是个个都能读懂Hibernate的源码然后找到问题所在的。这是第一种可能:客户(通常是有钱的大客户)希望能在遇到问题时有人提供商业的技术支持和顾问服务。第二种可能:Oracle公司推出了专用于对Oracle数据库特别优化过的ORM产品,名为TopLink,然而很不幸,虽然它能解决我们的问题,但是,因为Hibernate的类库的包结构和TopLink的相差太远,一个是以org.hibernate开头的,另一个却是以com.oracle开头的,更要命的是,两者之间的类库根本就没有相似之处!那我们的项目并不能通过简单的将代码的包换一下,就能迁移成功,下载岂不是要所有涉及Hibernate的地方都得重写!换句话说,当我们使用Hibernate或者其它ORM框架开发时,我们的代码已经被绑死了!虽然代码是和数据库无关的,然而数据库访问的Java代码却是死死的和某种框架绑定在一起了。
1创建JPAHello项目
1.1创建表格
- CREATE TABLE Student(
- id INT NOT NULL AUTO_INCREMENT,
- username VARCHAR(200) NOT NULL,
- PASSWORD VARCHAR(20) NOT NULL,
- age INT,
- PRIMARY KEY(id)
- )ENGINE=MYISAM DEFAULT CHARSET=GBK;
在MyEclipse 中我们可以将 JPA 开发功能添加到很多种项目上,一般最常见的恐怕就是添加到Java项目或者Web项目上了。在本节我们打算用简单的Java Project ,便于展
示JPA如何工作。
首先确保已经打开了MyEclipse Java Enterprise透视图,然后进行下列操作:
1. 从MyEclipse 菜单栏选择 File > New > Java Project,接着会打开 New Java Project 向导;
2. 输入 HelloJPA到 Project name ;
3. 在Project Layout 下选中 Create separate source and output folders 单选钮;
4. 点击Finish按钮关闭对话框。
这样Java项目就建立完毕了。稍等片刻会弹出一个切换透视图的对话框,为了避免造成更多的麻烦,我们一般选择No按钮就可以了。
1.3添加 JPA Capabilities 到现有项目
按图执行以下操作:
1.4 使用JPA配置文件编辑器修改文件 打开/src/META-INF/persistence.xml
修改后如下:
- <?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"
- 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="JavaEE_JPAPU"
- transaction-type="RESOURCE_LOCAL">
- <provider>org.hibernate.ejb.HibernatePersistence</provider>
- <class>dao.Student</class>
- <properties>
- <property name="hibernate.connection.driver_class"
- value="com.mysql.jdbc.Driver" />
- <property name="hibernate.connection.url"
- value="jdbc:mysql://127.0.0.1:3310/jpa" />
- <property name="hibernate.connection.username" value="root" />
- <property name="hibernate.connection.password"
- value="123456" />
- <property name="hibernate.hbm2ddl.auto" value="update" />
- <property name="hibernate.dialect"
- value="org.hibernate.dialect.MySQLDialect" />
- <property name="hibernate.show_sql" value="true" />
- <property name="hibernate.cache.provider_class"
- value="org.hibernate.cache.NoCacheProvider" />
- </properties>
- </persistence-unit>
- </persistence>
首先打开MyEclipse Database Explorer透视图。切换透视图有两种办法,如何切换请参考3.1.3透视图(Perspective)切换器。一种比较快办法是如那一节介绍的,点击工具栏上的点击 按钮可以显示多个透视图供切换,如图3.3所示,然后单击其中的MyEclipse Database Explorer 即可切换到此透视图;另一种办法是选择菜单 Window > Open Perspective > Other > MyEclipse Database Explorer来显示打开透视图对话框,然后点击OK按钮。
按图步骤操作:
1.6 调整生成的实体类标注
调整后的实体类如下:
- package dao;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import static javax.persistence.GenerationType.IDENTITY;
- import javax.persistence.Id;
- import javax.persistence.Table;
- /**
- * Student entity. @author MyEclipse Persistence Tools
- */
- @Entity
- @Table(name = "student", catalog = "jpa")
- public class Student implements java.io.Serializable {
- // Fields
- private Integer id;
- private String username;
- private String password;
- private Integer age;
- // Constructors
- /** default constructor */
- public Student() {
- }
- /** minimal constructor */
- public Student(String username, String password) {
- this.username = username;
- this.password = password;
- }
- /** full constructor */
- public Student(String username, String password, Integer age) {
- this.username = username;
- this.password = password;
- this.age = age;
- }
- // Property accessors
- @Id
- @Column(name = "id", unique = true, nullable = false, insertable = true, updatable=true)
- @javax.persistence.GeneratedValue(strategy=javax.persistence.GenerationType.IDENTITY)
- public Integer getId() {
- return this.id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- @Column(name = "username", nullable = false, length = 200)
- public String getUsername() {
- return this.username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- @Column(name = "password", nullable = false, length = 20)
- public String getPassword() {
- return this.password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- @Column(name = "age")
- public Integer getAge() {
- return this.age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- }
- package test;
- import java.util.List;
- import dao.*;
- public class JPATest {
- public static void main(String args[]){
- //创建dao
- StudentDAO dao = new StudentDAO();
- //创建实体类
- Student user = new Student();
- user.setUsername("hellojpa test");
- user.setPassword("jpa password");
- user.setAge(20);
- EntityManagerHelper.beginTransaction();
- //保存
- dao.save(user);
- //提交事务真正保存实体到数据库
- EntityManagerHelper.commit();
- //列出数据库中所有对象
- List<Student> result = dao.findAll();
- for(Student o: result){
- System.out.println(o.getId());
- System.out.println(o.getUsername());
- }
- //更改用户名
- user.setUsername("测试JPA");
- //开始事务
- EntityManagerHelper.beginTransaction();
- dao.update(user);
- //提交事务真正保存实体到数据库
- EntityManagerHelper.commit();
- //查找所有年龄为20的用户,从第1个开始获取(0为第一个用户)
- result = dao.findByAge(20, 0);
- for(Student o:result){
- System.out.println(o.getId());
- System.out.println(o.getUsername());
- }
- //根据用户ID查找
- user = dao.findById(2);
- System.out.println(user.getUsername());
- //删除
- //开始事务
- EntityManagerHelper.beginTransaction();
- //保存(JPA会自动更新变动过的字段)
- dao.delete(user);
- //提交事务真正保存实体到数据库
- EntityManagerHelper.commit();
- }
- }
JPA其他部分:
JPA生成一对多等复杂映射代码
Spring整合JPA开发
阅读全文
0 0
- JPA是什么?怎样开发JPA应用?
- JPA是什么?怎样开发JPA应用?
- JPA是什么
- JPA是什么
- JPA是什么!
- JPA是什么
- JPA是什么
- jpa是什么
- JPA是什么?
- JPA是什么?
- JPA是什么
- JPA开发
- JPA开发
- 9.26 JPA是什么
- spring data jpa是什么?
- 开发第一个 Open JPA 应用
- JPA
- JPA
- 相亲对象判别基于K-近邻算法
- Python 3.6 由于lxml依赖关系, 导入docx或python-docx失败的问题
- OpenCV中feature2D学习——SIFT和SURF算子实现特征点提取与匹配
- 如何踏上人工智能之路(机器学习篇)
- python web service
- JPA是什么?怎样开发JPA应用?
- c++之指针,引用,const
- Dialog(对话框)
- 观察者模式
- VS 快捷键
- [软件测试流程]软件测试的基本流程
- 《Linux内核设计与实现》读书笔记(三)- Linux的进程
- C++实训单元七-类与继承
- spring-data-jpa 看这个就够了