转载请标明出处:https://blog.csdn.net/men_ma/article/details/106847165.
本文出自 不怕报错 就怕不报错的小猿猿 的博客
hibernate框架入门(增删改查)
hibernate框架简介
它是一个ORM框架/持久层框架,也是jdbc的一个框架,object reference mapping(全称:对象关系映射),什么意思呢,以前我们操作数据库分六部走,加载驱动、执行sql到关闭资源这一过程六个步骤,那么hibernate呢,他就做到一点,只需一步,操作数据库就可以了,不用我们写SQL语句,也不用配置servlet,可以动态调用方法,它简化的是我们数据库的操作这一块
1.基于maven项目上用hibernate做增删改查(步骤)
1.1 配置pom.xml(注意版本号)
pom.xml:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xiaoqing</groupId>
<artifactId>xiao_hibernateFirst</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>xiao_hibernateFirst Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<servlet.version>4.0.1</servlet.version>
<junit.version>3.8.1</junit.version>
<Mysql.version>5.1.44</Mysql.version>
<JSTL.version>1.2</JSTL.version>
<tomcat.version>8.0.47</tomcat.version>
<hibernate.version>5.2.12.Final</hibernate.version>
</properties>
<dependencies>
<!--junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<!--servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<!--mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${Mysql.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${JSTL.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jsp-api -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jsp-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
</dependencies>
<build>
<finalName>xiao_hibernateFirst</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
检查jar包是否下载完整:

1.2 配置web.xml
web.xml:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Archetype Created Web Application</display-name>
<!--配置中央过滤器 -->
<filter>
<filter-name>encodingFiter</filter-name>
<filter-class>com.xiaoqing.util.EncodingFiter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFiter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--配置过滤器 -->
<filter>
<filter-name>struts2Filter</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2Filter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
</web-app>
1.3 配置hibernate.cfg.xml(文件名必须一样)
目录:

数据库表:

hibernate.cfg.xml配置DTD约束(方法,技巧):
目的:出现如下图所示

方法及技巧:

展开之后再滑到最后


现成代码如下:hibernate.cfg.xml(整个配置)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 1. 数据库相关 -->
<!-- |||| -->
<!-- 连接账户名称 -->
<property name="connection.username">root</property>
<!-- 连接账户密码 -->
<property name="connection.password">123</property>
<!-- 连接的绝对路径 -->
<property name="connection.url">jdbc:mysql://localhost:3306/t243?useUnicode=true&characterEncoding=UTF-8&userSSL=false</property>
<!-- 驱动的绝对路径 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库方言配置 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 配置本地事务(No CurrentSessionContext configured!) -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- 2. 调试相关 -->
<!-- show_sql:hibernate 运行过程是否展示自动生成的SQL代码 -->
<property name="show_sql">true</property>
<!-- format_sql:是否规范化输出SQL代码 -->
<property name="format_sql">true</property>
<!-- 3. 添加实体映射文件 -->
<mapping resource="com/xiaoqing/one/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
1.4 编写实体类User.java(根据数据库)

User.java:
public class User implements Serializable{
private Integer id;
private String userName;
private String userPwd;
private String realName;
private String sex;
private Date birthday;
private Timestamp createDatetime;
private String remark;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Timestamp getCreateDatetime() {
return createDatetime;
}
public void setCreateDatetime(Timestamp createDatetime) {
this.createDatetime = createDatetime;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", userPwd=" + userPwd + ", realName=" + realName
+ ", sex=" + sex + ", birthday=" + birthday + ", createDatetime=" + createDatetime + ", remark="
+ remark + "]";
}
public User(Integer id, String userName, String userPwd, String realName, String sex, Date birthday,
Timestamp createDatetime, String remark) {
this.id = id;
this.userName = userName;
this.userPwd = userPwd;
this.realName = realName;
this.sex = sex;
this.birthday = birthday;
this.createDatetime = createDatetime;
this.remark = remark;
}
public User( String userName, String userPwd, String realName, String sex, Date birthday,String remark) {
this.userName = userName;
this.userPwd = userPwd;
this.realName = realName;
this.sex = sex;
this.birthday = birthday;
this.remark = remark;
}
public User() {
}
}
根据实体类再配置一个User.hbm.xml文件(注意:有多少个实体类就配置多少个xml文件,并且xml文件要与实体类User放同一目录下):
这里的xml也要配置DTD约束,与前面的
hibernate.hbm.xml步骤差不多,最后一步有点区别


展开之后再滑到最后

User.hbm.xml:
<?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="com.xiaoqing.entity.User" table="t_user_hb">
<!--
id:用于设置数据库表结构中主键列的方式
name:实体类中属性名称
type:java中的数据类型
column:数据库表字段名称
-->
<id name="id" type="java.lang.Integer" column="id">
<!--
class:定义主键列生成的方式(三种):hibernate管理、数据库管理、开发者管理
increment(hibernate管理),identity、sequcene、native(数据库管理)、assgine(开发者管理)
-->
<generator class="increment"></generator>
</id>
<!--
property标签:
name:实体类中的属性(映射的是表的非主键字段)
type:属性对应的类型
column:属性对应的表中的哪一个列段
-->
<property name="userName" type="java.lang.String" column="user_name"></property>
<property name="userPwd" type="java.lang.String" column="user_pwd"></property>
<property name="realName" type="java.lang.String" column="real_name"></property>
<property name="sex" type="java.lang.String" column="sex"></property>
<property name="birthday" type="java.util.Date" column="birthday"></property>
<property name="createDatetime" insert="false" update="false" type="timestamp" column="create_datetime"></property>
<property name="remark" type="java.lang.String" column="remark"></property>
</class>
</hibernate-mapping>
记得配置好之后再回到hibernate.cfg,xml中的后面加上实体类映射文件(千万别忘了)

1.5 写测试类(增删改查)
1.5.1 查询功能
查询QueryDemo:
package com.xiaoqing.one.test;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* hibernate 中的查询案例
* @author 晴sister
*
*/
public class QueryDemo {
public static void main(String[] args) {
// 对hibernate.cfg.xml进行建模拿到sessionfactory工厂
Configuration configure = new Configuration().configure("hibernate.cfg.xml");
SessionFactory sessionFactory = configure.buildSessionFactory();
// 通过工厂获取到session会话(操作数据库的)
Session session = sessionFactory.openSession();
// 直接操作数据库
List list = session.createQuery(" from User").list();
for (Object object : list) {
System.out.println(object);
}
// 关闭资源
session.close();
}
}
结果:

1.5.2 增加功能
增加AddDome:
/**
* hibernate中的增加案例
* @author 晴sister
*
*/
public class AddDemo {
public static void main(String[] args) {
// 对hibernate.cfg.xml进行建模拿到sessionfactory工厂
Configuration configure = new Configuration().configure("hibernate.cfg.xml");
SessionFactory sessionFactory = configure.buildSessionFactory();
// 通过工厂获取到session会话(操作数据库的)
Session session = sessionFactory.openSession();
// 获取事务对象
Transaction transaction = session.beginTransaction();
// 直接操作数据库
session.save(new User("xiaoqing", "123456", "小晴", "男", new Date(System.currentTimeMillis()), "暂无"));
// 提交事务
transaction.commit();
// 关闭资源
session.close();
}
}
结果:


1.5.3 修改功能
修改EditDome:
/**
* hibernate中的修改案例
* @author 晴sister
*
*/
public class EditDemo {
public static void main(String[] args) {
// 对hibernate.cfg.xml进行建模拿到sessionfactory工厂
Configuration configure = new Configuration().configure("hibernate.cfg.xml");
SessionFactory sessionFactory = configure.buildSessionFactory();
// 通过工厂获取到session会话(操作数据库的)
Session session = sessionFactory.openSession();
// 获取事务对象
Transaction transaction = session.beginTransaction();
// 直接操作数据库
// 修改方式一:
/* User user=new User("xiaoqing2", "123456", "小晴", "男", new Date(System.currentTimeMillis()), "暂无2");
user.setId(15);
session.update(user);*/
// 修改方式二:常用
User user=session.get(User.class, 15);
System.out.println(user);
user.setRealName("小晴3");
// 提交事务
transaction.commit();
// 关闭资源
session.close();
}
}
结果:


1.5.4 删除功能
删除DelDemo:
/**
* hibernate中的删除案例
* @author 晴sister
*
*/
public class DelDemo {
public static void main(String[] args) {
// 对hibernate.cfg.xml进行建模拿到sessionfactory工厂
Configuration configure = new Configuration().configure("hibernate.cfg.xml");
SessionFactory sessionFactory = configure.buildSessionFactory();
// 通过工厂获取到session会话(操作数据库的)
Session session = sessionFactory.openSession();
// 获取事务对象
Transaction transaction = session.beginTransaction();
// 直接操作数据库
User user=new User();
user.setId(15);
session.delete(user);
// 提交事务
transaction.commit();
// 关闭资源
session.close();
}
}
结果:

总结
今天就分享到这里啦!!!
本文介绍Hibernate框架,一个简化数据库操作的ORM框架。通过基于Maven项目的实例,详细讲解了使用Hibernate进行增删改查的步骤,包括配置pom.xml、web.xml、hibernate.cfg.xml,编写实体类和测试类。
130

被折叠的 条评论
为什么被折叠?



