注:本文使用maven创建项目。
(一)Hibernate简介:
Hibernate是一个ORM框架,可以将对数据库的操作转换为对实体类Class的操作,使用Hibernate后,用户可以通过操作实体类Class操作数据库的表。
(二)Hibernate使用:
一、手动创建:
1.项目结构:
2.建表:
3.pom.xml中导入相关依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>t00</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<!--导入相关依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--JDBC java连接mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!--hibernate依赖-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.10.Final</version>
</dependency>
</dependencies>
<!--添加资源文件的指定-->
<build>
<resources>
<!--src/main/java下的xml和properties文件在编译时都会被加到编译目录下-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<!--src/main/resources下的xml和properties文件在编译时都会被加到编译目录下-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>
4.创建Hibernate核心配置文件hibernate.cfg.xml:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!--核心配置文件-->
<hibernate-configuration>
<session-factory>
<!--数据源配置-->
<property name="connection.url">jdbc:mysql://localhost:3306/javawebcourse</property>
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.username">Cailinhao</property>
<property name="connection.password">CAIlinhao11014359</property>
<!--打印SQL语句-->
<property name="show_sql">true</property>
<!--格式化SQL语句-->
<property name="format_sql">true</property>
<!--数据库方言,方便根据不同方言自动生成SQL语句-->
<property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
<!--没有表时是否自动生成在数据库生成表-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--数据库连接池,这里使用C3P0-->
<!--连接数量不够时每次自增的个数-->
<property name="hibernate.c3p0.acquire_increment">10</property>
<!--设置连接失效时间-->
<property name="c3p0.idle_test_period">10000</property>
<!--设置连接超时时间-->
<property name="c3p0.timeout">5000</property>
<!--设置最大连接数-->
<property name="c3p0.max_size">30</property>
<!--设置最小连接数-->
<property name="c3p0.min_size">5</property>
<!--设置statement最大线程数-->
<property name="hibernate.c3p0.max_statements">10</property>
<!--注册实体类和xml映射文件-->
<mapping class="org.example.Entity.UserEntity"/>
<mapping resource="org/example/Entity/UserEntity.hbm.xml"/>
</session-factory>
</hibernate-configuration>
5.创建实体类UserEntity.java:
package org.example.Entity;
public class UserEntity {
//属性要与表的字段名对应
private String userid;
private String username;
private String password;
//每个属性要有get、set方法
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
6.创建实体类-关系映射文件UserEntity.hbm.xml:
用于将实体类UserEntity的各个属性和数据库表user的各个字段对应起来。
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--配置实体类和表的映射关系
name:实体类的全限定名
table:数据库表名
-->
<class name="org.example.Entity.UserEntity" table="user" schema="javawebcourse">
<!--主键用id,其他属性用property-->
<!--表的字段名与实体类名匹配-->
<id name="userid" column="userid" type="java.lang.String"/>
<property name="username" column="username" type="java.lang.String"/>
<property name="password" column="password" type="java.lang.String"/>
</class>
</hibernate-mapping>
7.调用Hibernate API完成操作:
具体增删查改方法见下文。
二、自动部署:
自动部署省去了创建实体类和实体关系映射文件的步骤,我们只需要编写核心配置文件即可。
1.建表。
具体表结构同上。
2.pom.xml中导入相关依赖:
具体同上。
3.添加框架支持。
右键module,点击Add Framework Support,添加Hibernate依赖。
4.添加数据库可视化。
5.自动生成实体类及实体类映射文件。
6.配置Hibernate核心配置文件。
具体内容同上。
7.调用Hibernate API完成操作。
具体增删查改方法见下文。
(三)Hibernate完成增删查改:
1.增:save
@Test
public void insert(){
//创建SessionFactory,从根路径下获取核心配置文件
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
//创建session
Session session = factory.openSession();
//创建事务
Transaction transaction = session.beginTransaction();
//创建实体类对象并给相应属性赋值
UserEntity user = new UserEntity();
user.setUserid("005");
user.setUsername("zhangsan");
user.setPassword("15963307522");
//使用save方法插入
session.save(user);
//提交事务
transaction.commit();
//关闭SessionFactory
factory.close();
}
2.删:delete
默认先调用SQL :select,后执行SQL :delete
@Test
public void delete(){
//创建SessionFactory,从根路径下获取核心配置文件
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
//创建session
Session session = factory.openSession();
//创建事务
Transaction transaction = session.beginTransaction();
//创建实体类对象并给相应属性赋值
UserEntity user = new UserEntity();
user.setUserid("005");
//使用delete方法删除
session.delete(user);
//提交事务
transaction.commit();
//关闭SessionFactory
factory.close();
}
3.查:get
@Test
public void select(){
//创建SessionFactory,从根路径下获取核心配置文件
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
//创建session
Session session = factory.openSession();
//创建事务
Transaction transaction = session.beginTransaction();
//使用get方法查找
UserEntity user = session.get(UserEntity.class, "1667957271623");
System.out.println(user);
//提交事务
transaction.commit();
//关闭SessionFactory
factory.close();
}
4.改:update
默认先调用SQL :select,后执行SQL :update
@Test
public void update(){
//创建SessionFactory,从根路径下获取核心配置文件
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
//创建session
Session session = factory.openSession();
//创建事务
Transaction transaction = session.beginTransaction();
//先查数据
UserEntity user = session.get(UserEntity.class, "1667957271623");
//再改数据
user.setUsername("zhangsan");
//使用update方法更新据
session.update(user);
//提交事务
transaction.commit();
//关闭SessionFactory
factory.close();
}