Hibernate 说明

由于JPA是sun公司制定的API规范,所以我们不需要导入额外的JPA相关的jar包,只需要导入JPA的提供商的jar包。我们选择Hibernate作为JPA的提供商,所以需要导入Hibernate的相关jar包。

相关网站

官方网站:http://hibernate.org/

ORM项目:http://hibernate.org/orm/

创建Maven项目

  1. 省略

在pom.xml中添加依赖

  1. <properties>
  2. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3. <project.hibernate.version>5.0.7.Final</project.hibernate.version>
  4. </properties>
  5.  
  6. <dependencies>
  7. <!-- junit -->
  8. <dependency>
  9. <groupId>junit</groupId>
  10. <artifactId>junit</artifactId>
  11. <version>4.12</version>
  12. <scope>test</scope>
  13. </dependency>
  14.  
  15. <!-- hibernate对jpa的支持包 -->
  16. <dependency>
  17. <groupId>org.hibernate</groupId>
  18. <artifactId>hibernate-entitymanager</artifactId>
  19. <version>${project.hibernate.version}</version>
  20. </dependency>
  21.  
  22. <!-- c3p0 -->
  23. <dependency>
  24. <groupId>org.hibernate</groupId>
  25. <artifactId>hibernate-c3p0</artifactId>
  26. <version>${project.hibernate.version}</version>
  27. </dependency>
  28.  
  29. <!-- log日志 -->
  30. <dependency>
  31. <groupId>log4j</groupId>
  32. <artifactId>log4j</artifactId>
  33. <version>1.2.17</version>
  34. </dependency>
  35.  
  36. <dependency>
  37. <groupId>org.projectlombok</groupId>
  38. <artifactId>lombok</artifactId>
  39. <version>1.16.18</version>
  40. <scope>provided</scope>
  41. </dependency>
  42.  
  43. <!-- Mysql-->
  44. <dependency>
  45. <groupId>mysql</groupId>
  46. <artifactId>mysql-connector-java</artifactId>
  47. <version>5.1.47</version>
  48. </dependency>
  49. </dependencies>

客户的数据库表

  1. /*创建客户表*/
  2. CREATE TABLE customer (
  3. cid bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
  4. cname varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
  5. source varchar(32) DEFAULT NULL COMMENT '客户信息来源',
  6. industry varchar(32) DEFAULT NULL COMMENT '客户所属行业',
  7. level varchar(32) DEFAULT NULL COMMENT '客户级别',
  8. address varchar(128) DEFAULT NULL COMMENT '客户联系地址',
  9. phone varchar(64) DEFAULT NULL COMMENT '客户联系电话',
  10. PRIMARY KEY (`cid`)
  11. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

客户的实体类

  1. /**
  2. * * 所有的注解都是使用JPA的规范提供的注解,
  3. * * 所以在导入注解包的时候,一定要导入javax.persistence下的
  4. */
  5. @Entity //声明实体类
  6. @Table(name="customer") //建立实体类和表的映射关系
  7. @Data
  8. public class Customer {
  9.  
  10. @Id//声明当前私有属性为主键
  11. @GeneratedValue(strategy=GenerationType.IDENTITY) //配置主键的生成策略
  12. @Column(name="cid") //指定和表中cid字段的映射关系
  13. private Long cId;
  14.  
  15. @Column(name="cname") //指定和表中cname字段的映射关系
  16. private String cName;
  17.  
  18. @Column(name="source")//指定和表中source字段的映射关系
  19. private String source;
  20.  
  21. @Column(name="industry")//指定和表中industry字段的映射关系
  22. private String industry;
  23.  
  24. @Column(name="level")//指定和表中level字段的映射关系
  25. private String level;
  26.  
  27. @Column(name="address")//指定和表中address字段的映射关系
  28. private String address;
  29.  
  30. @Column(name="phone")//指定和表中phone字段的映射关系
  31. private String phone;

常用注解的说明

  1. @Entity
  2. 作用:指定当前类是实体类。
  3. @Table
  4. 作用:指定实体类和表之间的对应关系。
  5. 属性:
  6. name:指定数据库表的名称
  7. @Id
  8. 作用:指定当前字段是主键。
  9. @GeneratedValue
  10. 作用:指定主键的生成方式。。
  11. 属性:
  12. strategy :指定主键生成策略。
  13. @Column
  14. 作用:指定实体类属性和数据库表之间的对应关系
  15. 属性:
  16. name:指定数据库表的列名称。
  17. unique:是否唯一
  18. nullable:是否可以为空
  19. inserttable:是否可以插入
  20. updateable:是否可以更新
  21. columnDefinition: 定义建表时创建此列的DDL
  22. secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字搭建开发环境[重点]

配置JPA的核心配置文件

在java工程的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. name:持久化单元名称
  9. transaction-type:事务类型
  10. RESOURCE_LOCAL:本地事务管理
  11. JTA:分布式事务管理 -->
  12. <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
  13. <!--配置JPA规范的服务提供商 -->
  14. <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
  15. <properties>
  16. <!-- 数据库驱动 -->
  17. <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
  18. <!-- 数据库地址 -->
  19. <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/ssh" />
  20. <!-- 数据库用户名 -->
  21. <property name="javax.persistence.jdbc.user" value="root" />
  22. <!-- 数据库密码 -->
  23. <property name="javax.persistence.jdbc.password" value="1234" />
  24.  
  25. <!--jpa提供者的可选配置:我们的JPA规范的提供者为hibernate,所以jpa的核心配置中兼容hibernate的配 -->
  26. <property name="hibernate.show_sql" value="true" />
  27. <property name="hibernate.format_sql" value="true" />
  28. <property name="hibernate.hbm2ddl.auto" value="create" />
  29. </properties>
  30. </persistence-unit>
  31. </persistence>

实现CRUD操作

新增操作

  1. @Test
    public void create() {
  2. /**
  3. * 创建实体管理类工厂,借助Persistence的静态方法获取
  4. * 其中传递的参数为持久化单元名称,需要jpa配置文件中指定
  5. */
  6. EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
  7. //创建实体管理类
  8. EntityManager em = factory.createEntityManager();
  9. //获取事务对象
  10. EntityTransaction tx = em.getTransaction();
  11. //开启事务
  12. tx.begin();
  13. Customer c = new Customer();
  14. c.setCustName("张三");
  15. //保存操作
  16. em.persist(c);
  17. //提交事务
  18. tx.commit();
  19. //释放资源
  20. em.close();
  21. factory.close();
  22. }

修改操作

  1. public void merge() {
  2. /**
  3. * 创建实体管理类工厂,借助Persistence的静态方法获取
  4. * 其中传递的参数为持久化单元名称,需要jpa配置文件中指定
  5. */
  6. EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
  7. //创建实体管理类
  8. EntityManager em = factory.createEntityManager();
  9. //获取事务对象
  10. EntityTransaction tx = em.getTransaction();
  11. tx.begin();
  12. Customer c = em.find(Customer.class, 1L);
  13. c.setCustName("李四");
  14. em.merge(c);
  15. //提交事务
  16. tx.commit();
  17. //释放资源
  18. em.close();
  19. factory.close();
  20. }

查询操作

  1. @Test
  2. public void read() {
  3. /**
  4. * 创建实体管理类工厂,借助Persistence的静态方法获取
  5. * 其中传递的参数为持久化单元名称,需要jpa配置文件中指定
  6. */
  7. EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
  8. //创建实体管理类
  9. EntityManager em = factory.createEntityManager();
  10. //获取事务对象
  11. EntityTransaction tx = em.getTransaction();
  12. Customer c = em.find(Customer.class, 1L);
  13. //释放资源
  14. em.close();
  15. factory.close();
  16. }

删除操作

  1. public void remove() {
  2. /**
  3. * 创建实体管理类工厂,借助Persistence的静态方法获取
  4. * 其中传递的参数为持久化单元名称,需要jpa配置文件中指定
  5. */
  6. EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
  7. //创建实体管理类
  8. EntityManager em = factory.createEntityManager();
  9. //获取事务对象
  10. EntityTransaction tx = em.getTransaction();
  11. tx.begin();
  12. Customer c = em.find(Customer.class, 1L);
  13. em.remove(c);
  14. //提交事务
  15. tx.commit();
  16. //释放资源
  17. em.close();
  18. factory.close();
  19. }

03 Hibernate入门的更多相关文章

  1. 三大框架之hibernate入门

    hibernate入门   1.orm      hibernate是一个经典的开源的orm[数据访问中间件]框架           ORM( Object Relation Mapping)对象关 ...

  2. Hibernate入门案例及增删改查

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  3. Hibernate入门案例 增删改

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  4. Hibernate入门6.Hibernate检索方式

    Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...

  5. Hibernate入门5持久化对象关系和批量处理技术

    Hibernate入门5持久化对象关系和批量处理技术 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hiberna ...

  6. Hibernate入门4.核心技能

    Hibernate入门4.核心技能 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hibernate3的基本知识, ...

  7. Hibernate入门3.配置映射文件深入

    Hibernate入门3.配置映射文件深入 2013.11.27 前言: 之前的两节是在Java项目中如何使用hibernate,并且通过一个简单地项目实践,期间有很多的错误,一般都是因为配置包的问题 ...

  8. 简单的Hibernate入门简介

    其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西, ...

  9. Hibernate入门(1)-第一个Hibernate程序

    Hibernate入门(1)-第一个Hibernate程序 Hibernate是最著名的ORM工具之一,本系列文章主要学习Hibernate的用法,不涉及Hibernate的原理.本文介绍第一个Hib ...

随机推荐

  1. selenium中quit与close方法的区别

    https://blog.csdn.net/lbxoqy/article/details/71981222

  2. Qt foreach关键字用法

    Qt提供一个关键字 foreach (实际是 <QtGlobal> 里定义的一个宏)用于方便地访问容器里所有数据项. foreach 关键字用于遍历容路中所有的项,使用 foreach 的 ...

  3. VisionPro连接Dalsa线扫相机

    1 环境配置 硬件:编码器(提供编码信号的PLC) 线扫相机 镜头 相机线缆 图像采集卡(Dalsa_Xcelera-CL_PX4 Dual) 软件:VisionPro 8.2 VisionPro软件 ...

  4. IPFS私有网络搭建总结

    参考:https://mp.weixin.qq.com/s/IKcXAjcX_BxI4siBeVsJUw 测试环境 节点A.B.C为局域网内三台部署了IPFS的节点,A为win7,B为Redhat L ...

  5. 吴裕雄--天生自然 R语言开发学习:时间序列(续二)

    #-----------------------------------------# # R in Action (2nd ed): Chapter 15 # # Time series # # r ...

  6. tomcat——nginx负载均衡

    Tomcat一般应用在这种小型系统中应用非常广泛,是开发调试jsp的首先应用.Tomcat和其他web软甲一样具有解析HTML语言的功能,但是处理效率远不及Apacge和Nginx,所以Tomcat一 ...

  7. 一分钟搞定pychram远程调试和同步代码

    首先说一下需求,否则很多人都不知道pycharm这个远程同步和调试到底是干嘛使的. 需求很简单,我想要在本地的windows机器上跑一个程序,但是程序运行会加载一些很占内存的树型数据结构,称其为tre ...

  8. 1122 Hamiltonian Cycle (25 分)

    1122 Hamiltonian Cycle (25 分) The "Hamilton cycle problem" is to find a simple cycle that ...

  9. numpy的基础计算2

    import numpy as np A = np.arange(14,2,-1).reshape((3,4)) #平均值 print(np.mean(A)) print(A.mean()) prin ...

  10. Autowired和Resource区别

    @Autowired和@Resource熟悉吧?是不是经常复制粘贴顺手就来,两者都是用来给成员变量自动装载,可是它俩到底有啥区别呢? 1.@Autowired与@Resource都可以用来装配bean ...