03 Hibernate入门
Hibernate 说明
由于JPA是sun公司制定的API规范,所以我们不需要导入额外的JPA相关的jar包,只需要导入JPA的提供商的jar包。我们选择Hibernate作为JPA的提供商,所以需要导入Hibernate的相关jar包。
相关网站
ORM项目:http://hibernate.org/orm/
创建Maven项目
- 省略
在pom.xml中添加依赖
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.hibernate.version>5.0.7.Final</project.hibernate.version>
- </properties>
- <dependencies>
- <!-- junit -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <scope>test</scope>
- </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>
- <!-- log日志 -->
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.17</version>
- </dependency>
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>1.16.18</version>
- <scope>provided</scope>
- </dependency>
- <!-- Mysql-->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.47</version>
- </dependency>
- </dependencies>
客户的数据库表
- /*创建客户表*/
- CREATE TABLE customer (
- cid bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
- cname varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
- source varchar(32) DEFAULT NULL COMMENT '客户信息来源',
- industry varchar(32) DEFAULT NULL COMMENT '客户所属行业',
- level varchar(32) DEFAULT NULL COMMENT '客户级别',
- address varchar(128) DEFAULT NULL COMMENT '客户联系地址',
- phone varchar(64) DEFAULT NULL COMMENT '客户联系电话',
- PRIMARY KEY (`cid`)
- ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
客户的实体类
- /**
- * * 所有的注解都是使用JPA的规范提供的注解,
- * * 所以在导入注解包的时候,一定要导入javax.persistence下的
- */
- @Entity //声明实体类
- @Table(name="customer") //建立实体类和表的映射关系
- @Data
- public class Customer {
- @Id//声明当前私有属性为主键
- @GeneratedValue(strategy=GenerationType.IDENTITY) //配置主键的生成策略
- @Column(name="cid") //指定和表中cid字段的映射关系
- private Long cId;
- @Column(name="cname") //指定和表中cname字段的映射关系
- private String cName;
- @Column(name="source")//指定和表中source字段的映射关系
- private String source;
- @Column(name="industry")//指定和表中industry字段的映射关系
- private String industry;
- @Column(name="level")//指定和表中level字段的映射关系
- private String level;
- @Column(name="address")//指定和表中address字段的映射关系
- private String address;
- @Column(name="phone")//指定和表中phone字段的映射关系
- private String phone;
常用注解的说明
- @Entity
- 作用:指定当前类是实体类。
- @Table
- 作用:指定实体类和表之间的对应关系。
- 属性:
- name:指定数据库表的名称
- @Id
- 作用:指定当前字段是主键。
- @GeneratedValue
- 作用:指定主键的生成方式。。
- 属性:
- strategy :指定主键生成策略。
- @Column
- 作用:指定实体类属性和数据库表之间的对应关系
- 属性:
- name:指定数据库表的列名称。
- unique:是否唯一
- nullable:是否可以为空
- inserttable:是否可以插入
- updateable:是否可以更新
- columnDefinition: 定义建表时创建此列的DDL
- secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字搭建开发环境[重点]
配置JPA的核心配置文件
在java工程的src路径下创建一个名为META-INF的文件夹,在此文件夹下创建一个名为persistence.xml的配置文件
- <?xml version="1.0" encoding="UTF-8"?>
- <persistence xmlns="http://java.sun.com/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
- http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
- version="2.0">
- <!--配置持久化单元
- name:持久化单元名称
- transaction-type:事务类型
- RESOURCE_LOCAL:本地事务管理
- JTA:分布式事务管理 -->
- <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
- <!--配置JPA规范的服务提供商 -->
- <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
- <properties>
- <!-- 数据库驱动 -->
- <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
- <!-- 数据库地址 -->
- <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/ssh" />
- <!-- 数据库用户名 -->
- <property name="javax.persistence.jdbc.user" value="root" />
- <!-- 数据库密码 -->
- <property name="javax.persistence.jdbc.password" value="1234" />
- <!--jpa提供者的可选配置:我们的JPA规范的提供者为hibernate,所以jpa的核心配置中兼容hibernate的配 -->
- <property name="hibernate.show_sql" value="true" />
- <property name="hibernate.format_sql" value="true" />
- <property name="hibernate.hbm2ddl.auto" value="create" />
- </properties>
- </persistence-unit>
- </persistence>
实现CRUD操作
新增操作
- @Test
public void create() {- /**
- * 创建实体管理类工厂,借助Persistence的静态方法获取
- * 其中传递的参数为持久化单元名称,需要jpa配置文件中指定
- */
- EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
- //创建实体管理类
- EntityManager em = factory.createEntityManager();
- //获取事务对象
- EntityTransaction tx = em.getTransaction();
- //开启事务
- tx.begin();
- Customer c = new Customer();
- c.setCustName("张三");
- //保存操作
- em.persist(c);
- //提交事务
- tx.commit();
- //释放资源
- em.close();
- factory.close();
- }
修改操作
- public void merge() {
- /**
- * 创建实体管理类工厂,借助Persistence的静态方法获取
- * 其中传递的参数为持久化单元名称,需要jpa配置文件中指定
- */
- EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
- //创建实体管理类
- EntityManager em = factory.createEntityManager();
- //获取事务对象
- EntityTransaction tx = em.getTransaction();
- tx.begin();
- Customer c = em.find(Customer.class, 1L);
- c.setCustName("李四");
- em.merge(c);
- //提交事务
- tx.commit();
- //释放资源
- em.close();
- factory.close();
- }
查询操作
- @Test
- public void read() {
- /**
- * 创建实体管理类工厂,借助Persistence的静态方法获取
- * 其中传递的参数为持久化单元名称,需要jpa配置文件中指定
- */
- EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
- //创建实体管理类
- EntityManager em = factory.createEntityManager();
- //获取事务对象
- EntityTransaction tx = em.getTransaction();
- Customer c = em.find(Customer.class, 1L);
- //释放资源
- em.close();
- factory.close();
- }
删除操作
- public void remove() {
- /**
- * 创建实体管理类工厂,借助Persistence的静态方法获取
- * 其中传递的参数为持久化单元名称,需要jpa配置文件中指定
- */
- EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
- //创建实体管理类
- EntityManager em = factory.createEntityManager();
- //获取事务对象
- EntityTransaction tx = em.getTransaction();
- tx.begin();
- Customer c = em.find(Customer.class, 1L);
- em.remove(c);
- //提交事务
- tx.commit();
- //释放资源
- em.close();
- factory.close();
- }
03 Hibernate入门的更多相关文章
- 三大框架之hibernate入门
hibernate入门 1.orm hibernate是一个经典的开源的orm[数据访问中间件]框架 ORM( Object Relation Mapping)对象关 ...
- Hibernate入门案例及增删改查
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...
- Hibernate入门案例 增删改
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...
- Hibernate入门6.Hibernate检索方式
Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...
- Hibernate入门5持久化对象关系和批量处理技术
Hibernate入门5持久化对象关系和批量处理技术 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hiberna ...
- Hibernate入门4.核心技能
Hibernate入门4.核心技能 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hibernate3的基本知识, ...
- Hibernate入门3.配置映射文件深入
Hibernate入门3.配置映射文件深入 2013.11.27 前言: 之前的两节是在Java项目中如何使用hibernate,并且通过一个简单地项目实践,期间有很多的错误,一般都是因为配置包的问题 ...
- 简单的Hibernate入门简介
其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西, ...
- Hibernate入门(1)-第一个Hibernate程序
Hibernate入门(1)-第一个Hibernate程序 Hibernate是最著名的ORM工具之一,本系列文章主要学习Hibernate的用法,不涉及Hibernate的原理.本文介绍第一个Hib ...
随机推荐
- selenium中quit与close方法的区别
https://blog.csdn.net/lbxoqy/article/details/71981222
- Qt foreach关键字用法
Qt提供一个关键字 foreach (实际是 <QtGlobal> 里定义的一个宏)用于方便地访问容器里所有数据项. foreach 关键字用于遍历容路中所有的项,使用 foreach 的 ...
- VisionPro连接Dalsa线扫相机
1 环境配置 硬件:编码器(提供编码信号的PLC) 线扫相机 镜头 相机线缆 图像采集卡(Dalsa_Xcelera-CL_PX4 Dual) 软件:VisionPro 8.2 VisionPro软件 ...
- IPFS私有网络搭建总结
参考:https://mp.weixin.qq.com/s/IKcXAjcX_BxI4siBeVsJUw 测试环境 节点A.B.C为局域网内三台部署了IPFS的节点,A为win7,B为Redhat L ...
- 吴裕雄--天生自然 R语言开发学习:时间序列(续二)
#-----------------------------------------# # R in Action (2nd ed): Chapter 15 # # Time series # # r ...
- tomcat——nginx负载均衡
Tomcat一般应用在这种小型系统中应用非常广泛,是开发调试jsp的首先应用.Tomcat和其他web软甲一样具有解析HTML语言的功能,但是处理效率远不及Apacge和Nginx,所以Tomcat一 ...
- 一分钟搞定pychram远程调试和同步代码
首先说一下需求,否则很多人都不知道pycharm这个远程同步和调试到底是干嘛使的. 需求很简单,我想要在本地的windows机器上跑一个程序,但是程序运行会加载一些很占内存的树型数据结构,称其为tre ...
- 1122 Hamiltonian Cycle (25 分)
1122 Hamiltonian Cycle (25 分) The "Hamilton cycle problem" is to find a simple cycle that ...
- numpy的基础计算2
import numpy as np A = np.arange(14,2,-1).reshape((3,4)) #平均值 print(np.mean(A)) print(A.mean()) prin ...
- Autowired和Resource区别
@Autowired和@Resource熟悉吧?是不是经常复制粘贴顺手就来,两者都是用来给成员变量自动装载,可是它俩到底有啥区别呢? 1.@Autowired与@Resource都可以用来装配bean ...