Hibernate对JPA的支持

1.配置src/META-INF下persistence.xml注意文件名是固定的。

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <persistence xmlns="http://java.sun.com/xml/ns/persistence"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
5 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
6
7 <persistence-unit name="hibPU" transaction-type="RESOURCE_LOCAL">
8 <provider>org.hibernate.ejb.HibernatePersistence</provider>
9 <properties>
10 <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
11 <property name = "hibernate.connection.driver_class" value = "com.mysql.jdbc.Driver"/>
12 <property name = "hibernate.connection.url" value = "jdbc:mysql://localhost:3306/hib"/>
13 <property name = "hibernate.connection.username" value = "root"/>
14 <property name = "hibernate.connection.password" value = "123456"/>
15 <property name = "hibernate.hbm2ddl.auto" value = "update"/>
16 <property name="hibernate.show_sql" value="true"/>
17 <property name="hibernate.format_sql" value="true"/>
18 </properties>
19 </persistence-unit>
20
21 </persistence>

持久化单元的名称属性name是程序中引用的。provider的类所在的包必须有,否则报错。配置的属性名必须带hibernate前缀,如hibernate.dialect,否则报错。

hibernate.hbm2ddl.auto为update的意思是即便持久化类对应的表不存在,那么进行持久化操作时会创建表,如果存在则不创建。如果为create则每次加载都重新生成表。

2.持久化类可以采用注解方式配置映射,也可以采用xml文件的方式。如User.java对应User.hbm.xml放到与User的相同目录下,则即便在hibernate.cfg.xml中没有配置mapping resource,仍然有效。采用注解方式,可以不在hibernate.cfg.xml中配置mapping,如果要配置,则用<mapping class="com.tazi.domin.User"/>而不再是<mapping resource="com/tazi/domin/User.hbm.xml"/>.

 1 package com.tazi.domin;
2
3 import javax.persistence.Column;
4 import javax.persistence.Entity;
5 import javax.persistence.GeneratedValue;
6 import javax.persistence.GenerationType;
7 import javax.persistence.Id;
8 import javax.persistence.Table;
9
10 @Entity @Table(name="users")
11 public class User {
12 @Id
13 @GeneratedValue(strategy=GenerationType.IDENTITY)
14 private Integer id;
15 @Column
16 private String password;
17 //@Column
18 //如果不加@Column则默认也会加上,除非使用@Transient
19 private String username;
20 public String getPassword() {
21 return password;
22 }
23 public void setPassword(String password) {
24 this.password = password;
25 }
26 public String getUsername() {
27 return username;
28 }
29 public void setUsername(String username) {
30 this.username = username;
31 }
32 public Integer getId() {
33 return id;
34 }
35 public void setId(Integer id) {
36 this.id = id;
37 }
38 }

3.使用EntityManager操作数据

首先根据persistence-unit中的name创建实体管理器工厂。

 1         EntityManagerFactory emf=Persistence.createEntityManagerFactory("hibPU");
2 EntityManager em=emf.createEntityManager();
3 EntityTransaction tx=em.getTransaction();
4
5 User user=new User();
6 user.setUsername("tazi");
7 user.setPassword("12345");
8 tx.begin();
9 em.persist(user);
10 tx.commit();
11 em.close();
12 emf.close();

输出:

1 Hibernate: 
2 insert
3 into
4 users
5 (password, username)
6 values
7 (?, ?)






原文地址:https://www.cnblogs.com/tazi/p/2303610.html