Hibernate笔记7--JPA CRUD

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 
时间: 2024-08-11 07:39:08

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

Hibernate中关联关系的CRUD(增删改查)

关联关系的CRUD(增删改查) 一.增加数据 1.User和Group的关联关系:User对Group是Many-To-One,Group对User是One-To-Many 2.默认情况下,不会自动保存尚未保存关联的对象.因为对象没有保存的情况下,对象是Transient状态,此时数据库中并没有存储,所以获取不到该对象. 3.使用级联cascade方式可以自动将关联的对象进行存储.其取值有ALL,PERSIST,REFRESH,REMOVE,DETACH,MERGE这几种取值.其中,ALL表示在

Hibernate笔记①--myeclipse制动配置hibernate

Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命 意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任. Hibernate笔记①--myeclipse制动配置hibernate

学习hibernate笔记

以前学习java的时候,一开始就学习了hibernate,那时候总觉得ssh非常高大上,所以就急忙看了下相关视频.不过因为实际需要不高,所以后来一直没有使用上hibernate组件.现在一年过去了,也疯狂学习了java一段时间了,做过几个不大的项目,但是总算对java有些了解.现在参加了工作,公司使用的就是ssh,所以这两天又重新开始捣鼓hibernate.这次学习直接使用editplus,直接开发.看了官网的demo,发现英语也没有想象中那么困难.哈哈,把自己的学习记录下来吧.这里主要记录三个

eclipse从数据库逆向生成Hibernate实体类(eclipse中反向生成hibernate实体类+jpa注释)

eclipse从数据库逆向生成Hibernate实体类 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进行完任意一方的设计后再去花时间去自己匹配建立另一方的设计. 原因是: 1. 1.5倍工作量,浪费时间.(时间对公司来说很重要) 2. 无法

框架Hibernate笔记系列 基础 Session One

标题:框架Hibernate笔记 资料地址: 1. www.icoolxue.com 孔浩 1.背景简介 Hibenate是JBoss公司的产品.它是数据持久化的框架.Usually,我们使用JDBC来access DB,我们要先连接数据库,然后与数据库交互,然后关闭连接.使用了Hibernate之后,它实现了对JDBC的封装.跟数据库建立连接和关闭连接都由Hibernate来管理,我们只要写交互代码就可以了. 目前,使用mybatis的比较多.原因在于使用Hibernate效率不高.(In t

hibernate笔记(一)

SSH框架: Struts框架, 基于mvc模式的应用层框架技术! Hibernate,    基于持久层的框架(数据访问层使用)! Spring,   创建对象处理对象的依赖关系以及框架整合! Dao代码,如何编写? - 操作XML数据 - 使用Jdbc技术 原始的jdbc操作, Connection/Statement/ResultSet 自定义一个持久层框架, 封装了dao的通用方法 DbUtils组件, 轻量级的dao的组件: Hibernate技术  [hibernate最终执行的也是

Hibernate笔记②--hibernate类生成表、id生成策略、级联设置、继承映射

一.多表的一个关联关系 老师和学生是一对多的关系 student:tid属性 外键约束 对应teacher表中的id属性 teacher:id 在myeclipse的db窗口中选中两个表来生成类. ? 写一个CRUD //老师和学生实体保存 ????public void save(){ ????????Teacher t=new Teacher(); ????????t.setName("彭老师"); ???????? ????????Student s1=new Student()

hibernate笔记

Hibernate的作用: 1.可以解决以面向对象的方式操作数据库的问题 请求参数(String)→Strut2→Action(对象)→业务逻辑组件(面向对象) 2.所以任何一个ORM框架都可以代替Hibernate,JPA更加可以:Spring能做什么? A.解决各层组件之间的硬编码耦合(类名的直接耦合) 可以让各组件之间以“面向接口”的方式编程,从而提供更好的可扩展性 B.能解决事务.权限检查等这种具有通用性质.横切性质的处理逻辑 C.Spring提供了对大部分操作的简化功能 Spring再

Hibernate系列(五):利用Hibernate完成简单的CRUD操作

这里利用Hibernate操作数据库完成简单的CRUD操作. 首先,我们需要先写一个javabean: package cn.itcast.domain; import java.util.Date; public class User { private int id; private String name; private Date birthday; public int getId() { return id; } public void setId(int id) { this.id