03 Hibernate入门
Posted zhaochengf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字搭建开发环境[重点]
<?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>
@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入门的主要内容,如果未能解决你的问题,请参考以下文章