Spring JPA的使用
-
搭建环境的步骤
-
创建maven,引入坐标
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.hibernate.version>5.0.7.Final</project.hibernate.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--hibernate对jpa的支持包--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>${project.hibernate.version}</version> </dependency> <!--c3p0--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>${project.hibernate.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.8</version> </dependency> </dependencies>
-
配置jpa的核心配置文件
- 配置到类路径下(resources文件夹下)的一个叫做META-INF的文件夹下(命名:persistence.xml)
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> <!--需要配置persistence-unit结点 持久化单元: name:持久化单元名称,随便写 transaction-type:事务管理的方式 JPA:分布式事务管理(不同的表分散到不同的数据库使用JPA) RESOURCE_LOCAL:本地事务管理(所有的数据库表存在一个数据库中使用本地事务管理) --> <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL"> <!--jpa的实现方式--> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <properties> <!--数据库信息 用户名:javax.persistence.jdbc.user 密码:javax.persistence.jdbc.password 驱动:javax.persistence.jdbc.driver 数据库地址:javax.persistence.jdbc.url --> <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"/> <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///eesy"/> <!--可选的配置,配置jpa实现方(Hibernate的配置信息)的配置信息 显示sql:false|true 自动创建数据库表:hibernate.hbm2ddl.auto create:程序运行时创建数据库表(如果有表,先删除表,再创建表) update:程序运行时创建数据库表(如果有表,不会创建表) none:不会创建表 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.hbm2ddl.auto" value="create"/> </properties> </persistence-unit> </persistence>
-
编写实体类
-
配置实体类和表,类中的属性和表中字段的映射关系
import javax.persistence.*; /** * 配置映射关系 * 1.实体类和表的映射关系 * @Entity:声明此类是个实体类 * @Table:实体类和表的映射关系 * name属性:配置数据库表的名称 * 2.实体类中属性和表中字段的映射关系 */ @Entity @Table(name = "customer") public class Customer { /** * @Id:声明主键的配置 * @GeneratedValue:配置主键的生成策略 * GenerationType.IDENTITY:自增(底层数据库必须支持自动增长---mysql数据库) * GenerationType.SEQUENCE:序列(底层数据库必须支持序列---oracle数据库) * GenerationType.TABLE:jpa提供的一种机制,通过一张新的数据库表的形成帮助我们完成自增 * GenerationType.AUTO:由程序自动的选择主键生成策略 * @Column:配置属性和字段的映射关系 * name:数据库表中字段的名 */ @Id //声明主键的配置 @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Integer id; @Column(name = "name") private String name; @Column(name = "source") private String source; @Column(name = "industry")//客户来源 private String industry; @Column(name = "level")//客户所属行业 private String level; @Column(name = "address")//客户级别 private String address; @Column(name = "phone") private String phone; }
-
保存客户到数据库中
public class JpaTest { /* * 测试jpa的保存(保存一个客户到数据库中) * JPA的操作步骤 * 1.加载配置文件创建工厂(实体管理类工厂)对象 * Persistence 静态方法createEntityManagerFactory(根据持久化单元名称创建实体管理器工厂) * EntityManagerFactory:实体管理器工厂,用来(createEntityManager方法)创建实体管理器 * 内部维护了很多内容: * 维护了数据库信息 * 维护了缓存信息 * 维护了所有的实体管理类对象 * 在创建EntityManagerFactory的过程中会根据配置创建数据库表 * EntityManagerFactory的创建过程比较浪费资源,是线程安全的对象(多个线程访问同一个EntityManagerFactory不会有线程安全问题) * 2.通过实体管理类工厂获取实体管理类 * EntityManager对象,实体类管理器 * presist:保存 * merge:更新 * remove:删除 * find/getRefrence:根据id查询 * 3.获取事务对象,开启事务 * 4.完成增删改查 * 5.提交事务(或回滚) * 6.释放资源 * */ @Test public void testSave(){ //1.加载配置文件创建工厂(实体管理类工厂)对象,参数:持久化单元名称 EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa"); //2.通过实体管理类工厂获取实体管理类 EntityManager em = factory.createEntityManager(); //3.获取事务对象,开启事务 EntityTransaction tx = em.getTransaction(); //获取事务对象 tx.begin(); //开启事务 //4.完成增删改查(保存客户到数据库中) Customer customer = new Customer(); customer.setName("传智播客"); customer.setIndustry("IT"); em.persist(customer); //保存操作 //5.提交事务(或回滚) tx.commit(); //6.释放资源 em.close(); factory.close(); } }
-