JPA环境配置(一)
jpa概述
jpa(java persistence api)的简称,用于持久化的api。
javaee5.0平台标准的orm的规范使得应用程序以统一的方式访问持久层。
jpa和hibernate的关系
jpa是hibernate的一个抽象,就像jdbc和jdbc驱动的关系一样。
pa是规范:jpa本质上是一种orm规范,不是orm框架,因为jpa并未提供实现,它只是制定了一些规范,提供了一些编程的api接口,但具体实现则由各orm厂商提供实现。
hibernate是实现:hibernate除了做为一个orm框架之外,它也是一种jpa实现。从功能上来说,hibernate是jpa的一个子集。
jpa的优势
标准化: 提供相同的 api,这保证了基于jpa 开发的企业应用能够经过少量的修改就能够在不同的 jpa 框架下运行。
简单易用,集成方便: jpa 的主要目标之一就是提供更加简单的编程模型,在 jpa 框架下创建实体和创建 java 类一样简单,只需要使用 javax.persistence.entity 进行注释;jpa 的框架和接口也都非常简单,
可媲美jdbc的查询能力: jpa的查询语言是面向对象的,jpa定义了独特的jpql,而且能够支持批量更新和修改、join、group by、having 等通常只有 sql 才能够提供的高级查询特性,甚至还能够支持子查询。
支持面向对象的高级特性:jpa 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型
jpa的组成
orm 映射元数据:jpa 支持 xml 和 jdk 5.0 注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。
jpa 的 api:用来操作实体对象,执行crud操作,框架在后台完成所有的事情,开发者从繁琐的 jdbc和 sql代码中解脱出来。
查询语言(jpql):这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序和具体的 sql 紧密耦合。
jpa环境配置:
首先我们使用eclipse来创建一个jpa的项目(我们这里通过hibernate来实现jpa所以准备好hibernatejar包):
配置好eclipselink和hibernate的jar包,然后增加数据库连接
项目生成后src下meta-inf里面会生成一个persistence.xml,这个文件放着这里面与命名都是规范不需要更改
我们首先来创建个实体类作为测试。student.java类
package com.miya.jpa.entity; import javax.persistence.entity; import javax.persistence.generatedvalue; import javax.persistence.generationtype; import javax.persistence.id; import javax.persistence.namedquery; import javax.persistence.table; @table(name="tal_student") @entitypublic class student { public student() { super(); } public student(string name, string pass, integer age, string phone, string address) { super(); this.name = name; this.pass = pass; this.age = age; this.phone = phone; this.address = address; } @id @generatedvalue(strategy=generationtype.auto) private integer id; private string name; private string pass; private integer age; private string phone; private string address; public integer getid() { return id; } public void setid(integer id) { this.id = id; } public string getname() { return name; } public void setname(string name) { this.name = name; } public string getpass() { return pass; } public void setpass(string pass) { this.pass = pass; } public integer getage() { return age; } public void setage(integer age) { this.age = age; } public string getphone() { return phone; } public void setphone(string phone) { this.phone = phone; } public string getaddress() { return address; } public void setaddress(string address) { this.address = address; } @override public string tostring() { return "student [id=" + id + ", name=" + name + ", pass=" + pass + ", age=" + age + ", phone=" + phone + ", address=" + address + "]"; } }
@table注解:指定数据表名
@entity注解:声明持久化类,加上了这个注解必须要有主键所以我这里将id做为主键使用@id生命。
@generatedvalu()注解中配置策略。
然后我们来配置一下persistence.xml文件
<persistence-unit name="jpademo1" transaction-type="resource_local"> <!-- 指定orm实现类 --> <provider>org.hibernate.ejb.hibernatepersistence</provider> <!-- 添加持久化类 --> <class>com.miya.jpa.entity.student</class> <properties> <!-- 配置数据库连接 --> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa" /> <property name="javax.persistence.jdbc.user" value="root" /> <property name="javax.persistence.jdbc.password" value="root" /> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.driver" /> <!-- hibernate配置信息 --> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> </properties> </persistence-unit>
persistence-unit标签上属性
name :用于定义持久化单元的名字,必填项,
transaction-type:直接jap的事务策略,resource_local(默认值),数据库级别的事物。只能针对一种数据库。不支持分布式事务。如果需要分布式事务的支持使用jta
provider标签:
指定orm框架的 javax.persistence.spi.persistenceprovider 接口的实现类。若项目中只有一个实现可省略
main方法:
public static void main(string[] args) { // 创建工厂 entitymanagerfactory factory = persistence.createentitymanagerfactory("jpademo1"); // 创建与数据库之间的回话 entitymanager manager = factory.createentitymanager(); // 获取事务 entitytransaction transaction = manager.gettransaction(); // 开启事务 transaction.begin(); student student = new student("张三丰", "123123", 22, "12312312312", "中国-未知"); manager.persist(student); // 提交事务 transaction.commit(); // 关闭资源 manager.close(); factory.close(); }
上一篇: 现有项目中集成Flutter
下一篇: python创造虚拟环境方法总结