文章目录
JPA 是什么?
Java Persistence API, Java持久化接口。
是官方的数据访问的规范和接口。
针对此接口, 有不同的实现。比如: Hibernate, Top Link(Eclipse Link)
关于Eclipse Link
来源于TopLink, TopLink是Oracle提供的数据接口的实现,应用在 Weblogic的应用服务器上。 后来捐给了 Eclipse, Eclipse很高兴的发扬光大, 改了个名字, 而且很自然的集成到 Eclipse的IDE中了。
3.在Eclipse中建立 JPA项目
- File->New->Other
- 找到JPA目录下的 JPA Project
3.下一步直到出现如下页面
因为JPA只是接口, 所以需要下载实现。 点击下载按钮, 下载之后会出现如上效果。
下面有一个 Add connection,可以添加数据库连接, 有连接之后后面就可以把数据库的表导出为实体类。
这里不添加也可以在项目创建完成之后,在右键单击项目进入属性页面的 JPA中设置。
-
点击Finish创建完成, 目录结构如下:
默认会创建一个persistence.xml的配置文件。 -
连接不同的数据库, 需要下载对应的驱动, 自动导入到项目的路径中
-
从Table导出实体类,
右键 New 选择JPA Entities from Tables
导出的是基于注解的类, 类的映射会自动加到persistence.xml。
这里导出的是User 表,表很简单,只有id和name两个属性。 默认导出到 model包下
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="jpa">
<class>model.User</class>
</persistence-unit>
</persistence>
基于注解的映射是JPA较为常见的方式,如有已经有类或是习惯hibernate早期XML的映射配置, 要使用 XML的方式配置映射,选择 EclipseLink下面的Dynamic Entities from Tables 导出XML的映射。
1.会产生配置文件: eclipselink-orm.xml
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.1" xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/orm http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_1.xsd">
<named-query name="User.findAll">
<query>select u from User u</query>
</named-query>
<entity class="model.User" access="VIRTUAL">
<attributes>
<id name="id" attribute-type="int">
</id>
<basic name="name" attribute-type="String">
</basic>
</attributes>
</entity>
</entity-mappings>
2.会把产生的文件添加到persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="jpa">
<mapping-file>META-INF/eclipselink-orm.xml</mapping-file>
</persistence-unit>
</persistence>
要运行测试的话, 需要做一些改动, 以 XML为例,附上改动后完整的代码:
- eclipselink-orm.xml
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.1" xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/orm http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_1.xsd">
<named-query name="User.findAll">
<query>select u from User u</query>
</named-query>
<entity class="model.User" access="VIRTUAL">
<attributes>
<id name="id" attribute-type="String">
</id>
<basic name="name" attribute-type="String">
</basic>
</attributes>
</entity>
</entity-mappings>
- persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="jpaProj">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<mapping-file>META-INF/eclipselink-orm.xml</mapping-file>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/ssmi?serverTimezone=UTC" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="123456" />
</properties>
</persistence-unit>
</persistence>
- User.java
public class User {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4.JpaDemo.java
public class JpaDemo {
/**
* @Title: main
* @Description: TODO
* @param args
*/
public static void main(String[] args) {
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jpaProj");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
// List<User> result = entityManager.createNamedQuery("User.findAll").getResultList();
List<User> result = entityManager.createQuery("select u " + "from User u ").getResultList();
for (User user : result) {
System.out.println(user.getName());
}
entityManager.getTransaction().commit();
entityManager.close();
}
}
注意: 类和表的名字保持一致。
请再驻足一分钟,并帮忙点击一下鼠标。
博主正在参加2018博客之星评选,如果本博客有帮到您或是有缘看到这篇的话,请帮忙投一下 180 号, oscar999。
投票地址:https://bss.csdn.net/m/topic/blog_star2018
感激之致,顺祝新年快乐!