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_2_0.xsd"
6 version="2.0">
7
8 <!--配置持久化单元 -->
9 <persistence-unit name="unit" transaction-type="RESOURCE_LOCAL">
10 <!--配置jpa持久化类提供者 -->
11 <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
12 <!--配置数据库 Hibernate基本信息 -->
13 <properties>
14 <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
15 <property name="hibernate.connection.url" value="jdbc:mysql:///day581"/>
16 <property name="hibernate.connection.username" value="root"/>
17 <property name="hibernate.connection.password" value="root"/>
18 <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
19 <property name="hibernate.hbm2ddl.auto" value="update"/>
20 <property name="hibernate.show_sql" value="true"/>
21 <property name="hibernate.format_sql" value="true"/>
22 <property name="hibernate.connection.isolation" value="4"/>
23 <!-- c3p0连接池 -->
24 <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>
25 </properties>
26 </persistence-unit>
27 </persistence>

2.实体类编写

  1 package huguangqin.com.cnblogs.entity;
2 import java.io.Serializable;
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
11 @Table(name = "cst_customer")
12 public class Customer implements Serializable {
13 private static final long serialVersionUID = 1L;
14
15 @Id
16 @GeneratedValue(strategy = GenerationType.IDENTITY)
17 @Column(name = "cust_id")
18 private Long custId;
19
20 @Column(name = "cust_name")
21 private String custName;
22
23 @Column(name = "cust_source")
24 private String custSource;
25
26 @Column(name = "cust_industry")
27 private String custIndustry;
28
29 @Column(name = "cust_level")
30 private String custLevel;
31
32 @Column(name = "cust_address")
33 private String custAddress;
34
35 @Column(name = "cust_phone")
36 private String custPhone;
37
38 public Long getCustId() {
39 return custId;
40 }
41
42 public void setCustId(Long custId) {
43 this.custId = custId;
44 }
45
46 public String getCustName() {
47 return custName;
48 }
49
50 public void setCustName(String custName) {
51 this.custName = custName;
52 }
53
54 public String getCustSource() {
55 return custSource;
56 }
57
58 public void setCustSource(String custSource) {
59 this.custSource = custSource;
60 }
61
62 public String getCustIndustry() {
63 return custIndustry;
64 }
65
66 public void setCustIndustry(String custIndustry) {
67 this.custIndustry = custIndustry;
68 }
69
70 public String getCustLevel() {
71 return custLevel;
72 }
73
74 public void setCustLevel(String custLevel) {
75 this.custLevel = custLevel;
76 }
77
78 public String getCustAddress() {
79 return custAddress;
80 }
81
82 public void setCustAddress(String custAddress) {
83 this.custAddress = custAddress;
84 }
85
86 public String getCustPhone() {
87 return custPhone;
88 }
89
90 public void setCustPhone(String custPhone) {
91 this.custPhone = custPhone;
92 }
93
94 // toString
95 @Override
96 public String toString() {
97 return "Customer [custId=" + custId + ", custName=" + custName + ", custSource=" + custSource
98 + ", custIndustry=" + custIndustry + ", custLevel=" + custLevel + ", custAddress=" + custAddress
99 + ", custPhone=" + custPhone + "]";
100 }
101
102 }
103

3.工具类-JPAUtil,用于启动创建一次EntityManagerFactory,并获取EntityManager
   

  1  package huguangqin.com.cnblogs.util;
2 import javax.persistence.EntityManager;
3 import javax.persistence.EntityManagerFactory;
4 import javax.persistence.Persistence;
5
6 public class JPAUtil {
7 private static EntityManagerFactory factory;
8
9 static {
10 factory = Persistence.createEntityManagerFactory("unit");
11 }
12
13 public static EntityManager getEntityManager() {
14 return factory.createEntityManager();
15 }
16 }
17

4.测试代码

  1 package huguangqin.com.cnblogs.demo;
2
3 import javax.persistence.EntityManager;
4 import javax.persistence.EntityTransaction;
5
6 import org.junit.Test;
7
8 import huguangqin.com.cnblogs.entity.Customer;
9 import huguangqin.com.cnblogs.util.JPAUtil;
10
11 /**
12 * 保存一个数据到客户表中:persist
13 */
14 public class JPATest1 {
15 @Test
16 public void addTest() {
17 // 获取EntityManager
18 EntityManager em = JPAUtil.getEntityManager();
19 // 得到事务对象
20 EntityTransaction et = em.getTransaction();
21 // 开启事务
22 et.begin();
23 // CRUD
24 Customer cust = new Customer();
25 cust.setCustName("阿里");
26 // 持久化
27 em.persist(cust);
28 // 提交事务
29 et.commit();
30 // 关闭资源
31 em.close();
32 }
33
34 /**
35 * 根据id查询:find
36 */
37 @Test
38 public void findTest() {
39 // 获取EntityManager
40 EntityManager em = JPAUtil.getEntityManager();
41 // 得到事务对象
42 EntityTransaction et = em.getTransaction();
43 // 开启事务
44 et.begin();
45 // 根据ID查询
46 Customer customer = em.find(Customer.class, 1L);
47 System.out.println(customer);
48
49 // 提交事务
50 et.commit();
51 // 关闭资源
52 em.close();
53 }
54
55 /**
56 * 延迟加载测试(getReference),用到的时候才发送sql
57 */
58 @Test
59 public void delayTest() {
60 // 获取EntityManager
61 EntityManager em = JPAUtil.getEntityManager();
62 // 获取事务对象
63 EntityTransaction et = em.getTransaction();
64 // 开启事务
65 et.begin();
66 // 延迟加载
67 Customer cust = em.getReference(Customer.class, 1L);
68 System.out.println(cust);
69 // 提交事务
70 et.commit();
71 // 关闭资源
72 em.close();
73 }
74
75 /**
76 * 修改:查询-修改(setter)
77 */
78 @Test
79 public void updateTest() {
80 // 获取EntityManager
81 EntityManager em = JPAUtil.getEntityManager();
82 // 获取事务对象
83 EntityTransaction et = em.getTransaction();
84 // 开启事务
85 et.begin();
86 // 修改
87 Customer cust = em.find(Customer.class, 1L);
88 cust.setCustName("Tecent");
89
90 // 提交事务
91 et.commit();
92 // 关闭资源
93 em.close();
94 }
95
96 /**
97 *删除 remove
98 */
99 @Test
100 public void delTest() {
101 // 获取EntityManager
102 EntityManager em = JPAUtil.getEntityManager();
103 // 获取事务对象
104 EntityTransaction et = em.getTransaction();
105 // 开启事务
106 et.begin();
107 // 删除
108 Customer cust = em.find(Customer.class, 1L);
109 em.remove(cust);
110 // 提交事务
111 et.commit();
112 // 关闭资源
113 em.close();
114 }
115 }
116

Hibernate笔记7--JPA CRUD的更多相关文章

  1. 框架Hibernate笔记系列 基础Session

    标题:框架Hibernate笔记 资料地址: 1. www.icoolxue.com 孔浩 1.背景简介 Hibenate是JBoss公司的产品.它是数据持久化的框架.Usually,我们使用JDBC ...

  2. Hibernate注解与JPA

    Hibernate注解与JPA - charming的专栏 - CSDN博客http://blog.csdn.net/zxc123e/article/details/51499652 之前记录的一些东 ...

  3. Hibernate笔记一

    背景 jdbc的优缺点 A:直接操作底层,提供了简单,便捷的访问数据库方法,跨平台比较强,灵活,可以写很多赋值的SQL语句:是最底层的数据库操作,所以效率比较高,Sql语句可以自己选择写,采用效率最高 ...

  4. hibernate笔记--cascade级联以及inverse属性

    cascade : 不管是单向多对一还是一对多,或者是双向的一对多关系,在一的一端映射文件中有一个set标签,在多的一端有many-to-one标签,拿前几篇笔记里讲的Grade和Student举例, ...

  5. JPA学习笔记1——JPA基础

    1.JPA简介: Java持久化规范,是从EJB2.x以前的实体Bean(Entity bean)分离出来的,EJB3以后不再有实体bean,而是将实体bean放到JPA中实现.JPA是sun提出的一 ...

  6. Hibernate笔记——Hibernate介绍和初次环境配置

    Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate ...

  7. 【hibernate】spring+ jpa + hibername 配置过程遇到的问题

    org.springframework.data.jpa.domain.support.AuditingEntityListener Auditing: 审计:查账Hades:Hades是一个开源库, ...

  8. hibernate笔记加强版

    hibernate 一. hibernate介绍 hibernate事实上就是ormapping框架,此框架的作用就是简单话数据库的操作. hibernate就是将用户提交的代码.參照持久化类配置文件 ...

  9. 再谈Hibernate级联删除——JPA下的Hibernate实现一对多级联删除CascadeType.DELETE_ORPHAN

    声明: 1.本文系原创,非抄袭或转载过来的. 2.本文论点都亲手做过实验论证. 3.本文所讲的Hibernate配置都基于注解的方式,hbm语法未提供. 非常多人对持久层概念搞不清JPA.Hibern ...

随机推荐

  1. java类什么时候初始化?

    Java虚拟机规范中并没有进行强制玉树什么情况下需要开始类加载过程.但是对于初始化阶段,虚拟机规范则是严格规定了有且仅有5种情况必须立即对类进行“初始化”(而加载,验证,准备自然需要在此之前开始): ...

  2. 4.Windows应急响应:勒索病毒

    0x00 前言 勒索病毒,是一种新型电脑病毒,主要以邮件.程序木马.网页挂马的形式进行传播.该病毒性质恶劣. 危害极大,一旦感染将给用户带来无法估量的损失.这种病毒利用各种加密算法对文件进行加密,被感 ...

  3. 17. PHP+Mysql注入防护与绕过

    黑名单关键字过滤与绕过 过滤关键字and.or PHP匹配函数代码如下: preg_match('/(and|or)/i', $id) 如何Bypass,过滤注入测试语句: 1 or 1 = 1   ...

  4. mooon模板的automake、autoconf、m4和libtool版本信息

    autoconf --version autoconf (GNU Autoconf) 2.59 automake --version automake (GNU automake) 1.9.6 m4 ...

  5. [CentOS7] 设备与文件名对应表

  6. Java面向对象的三大特性 继承

    继承是类与类的一种关系,是“is a"关系  子类拥有父类的属性和方法,private除外 class 子类 extends 父类   方法的重写 调用方法时会优先调用子类的方法 重写时,返 ...

  7. PHP现阶段发现的不足点

    1.php测试单元的实现(参考文档:https://blog.csdn.net/weixin_41282397/article/details/85052015)

  8. 复制或合并map

    1.map之间实现复制或合并 { // Map 能像数组一样被复制: let original = new Map([ [1, 'tom'] ]); let clone = new Map(origi ...

  9. CodeForces 118C 【模拟】

    思路: 枚举0-9之间的数,然后判断. 然后一鼓作气打成了大模拟....我日啊... 心疼自己. #include <bits/stdc++.h> using namespace std; ...

  10. luogu1975 排队(分块)

    luogu1975 排队(分块) 给你一个长度为n的序列,每次交换给定的两个数,输出每次操作后的逆序对个数. 首先考虑求出刚开始的逆序对.接着相当于带修改的求区间中比x大的数. 可以用分块,每个块内排 ...