JPA入门--(二)JPA入门案例:实现客户的保存操作
jpa入门案例:实现客户的保存操作
一. 首先新建一个空项目,命名为:ORM。
二.创建一个maven项目。
三.创建数据库表和客户实体类:
(1)创建数据库和数据表:
/*创建客户表*/ CREATE TABLE t_customer ( cust_id bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)', cust_name varchar(32) NOT NULL COMMENT '客户名称(公司名称)', cust_source varchar(32) DEFAULT NULL COMMENT '客户信息来源', cust_industry varchar(32) DEFAULT NULL COMMENT '客户所属行业', cust_level varchar(32) DEFAULT NULL COMMENT '客户级别', cust_address varchar(128) DEFAULT NULL COMMENT '客户联系地址', cust_phone varchar(64) DEFAULT NULL COMMENT '客户联系电话', PRIMARY KEY (`cust_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; |
(2)创建客户实体类:
package com.hlx.domain; import java.io.Serializable; public class Customer1 implements Serializable { private Long custId; private String custName; private String custSource; private String custIndustry; private String custLevel; private String custAddress; private String custPhone; public Long getCustId() { return custId; } public void setCustId(Long custId) { this.custId = custId; } public String getCustName() { return custName; } public void setCustName(String custName) { this.custName = custName; } public String getCustSource() { return custSource; } public void setCustSource(String custSource) { this.custSource = custSource; } public String getCustIndustry() { return custIndustry; } public void setCustIndustry(String custIndustry) { this.custIndustry = custIndustry; } public String getCustLevel() { return custLevel; } public void setCustLevel(String custLevel) { this.custLevel = custLevel; } public String getCustAddress() { return custAddress; } public void setCustAddress(String custAddress) { this.custAddress = custAddress; } public String getCustPhone() { return custPhone; } public void setCustPhone(String custPhone) { this.custPhone = custPhone; } } |
四.引入坐标:
<?xml version="1.0" encoding="UTF-8"?> |
五.配置jpa的核心配置文件
1. 在资源文件夹下新建一个META-INF目录,并在该目录下创建一个文件,名为persistence.xml。
2. 根据IDEA自带的persistence.xml模板引入相关约束。
3. persistence.xml文件约束导入
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> </persistence> |
4. 对核心配置文件进行相关配置的编写
配置配置persistence-unit节点(必选)
持久化单元:
name:持久化单元名称
transaction-type:事务管理的方式
JPA:分布式事务管理(如不同表分布到不同数据库)
RESOURCE_LOCAL:本地事务管理(目前所有表都存在于一个数据库中,所以这些事务用的是本地事务管理)
(1)配置jpa实现方式(必选)
<!-- jpa实现方式配置【必选】 --> |
【注】IDEA中查找类路径全名的方法(本例中查找HibernatePersistenceProvider类):
双击shift键,弹出如下搜索框,查找HibernatePersistenceProvider。
然后点击进入该类,右键选择Copy Reference。
(2)配置数据库信息(必选)
<!-- |
(3)配置jpa实现方的配置信息(可选)
<!-- 配置jpa实现方的配置信息【可选】 |
(4)编写完的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:分布式事务管理(如不同表分布到不同数据库) 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.passwd 驱动:javax.persistence.jdbc.driver 数据库地址:javax.persistence.jdbc.url --> <property name="javax.persistence.jdbc.user" value="root"/> <property name="javax.persistence.jdbc.passwd" value="123456"/> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa_hibernate01"/> <!-- 配置jpa实现方的配置信息【可选】 显示sql:hibernate.show_sql 自动创建数据库表:hibernate.hbm2ddl.auto create:程序运行时创建数据库表(若有表,先删除表再创建) update:程序运行时创建表(若有表则不会创建) none:不会创建表 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit> </persistence> |
六.编写测试类进行测试
1. 在项目的test目录下的java目录下新建一个测试类JPATest.java。
2. 编写测试类JPATest.java
package com.hlx.test; import com.hlx.domain.Customer; import org.junit.Test; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class JPATest { /** * 测试jpa的保存 * 案例:保存一个客户到数据库中 * jpa操作步骤: * 1. 加载配置文件,创建工厂(实体管理器工厂)对象 * 2. 通过实体管理类工厂获取实体管理器 * 3. 获取事务对象,开启事务 * 4. 完成增删改查操作 * 5. 提交事务(回滚事务) * 6. 释放资源 */ @Test public void testSave(){ // 1. 加载配置文件,创建工厂(实体管理器工厂)对象 EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJPA"); // 2. 通过实体管理类工厂获取实体管理器 EntityManager manager = factory.createEntityManager(); // 3. 获取事务对象,开启事务 EntityTransaction transaction = manager.getTransaction(); transaction.begin(); // 4. 完成增删改查操作 // 例:保存一个客户到数据库中 // 例:保存一个客户到数据库中 Customer customer = new Customer(); customer.setCustName("Li Ming"); customer.setCustIndustry("edu"); customer.setCustLevel("*****"); customer.setCustAddress("England"); customer.setCustPhone("13898986767"); manager.persist(customer); // 保存操作 // 5. 提交事务(回滚事务) transaction.commit(); // 6. 释放资源 manager.close(); factory.close(); } } |
3. 先查看数据表,表中没有任何记录。
4. 运行测试类:
5. 控制台输出信息:
log4j:WARN No appenders could be found for logger (org.jboss.logging). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Hibernate: insert into t_customer (cust_address, cust_industry, cust_level, cust_name, cust_phone, cust_source) values (?, ?, ?, ?, ?, ?)
Process finished with exit code 0 |