hibernate框架入门(增删改查)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请标明出处:https://blog.csdn.net/men_ma/article/details/106847165.
本文出自 不怕报错 就怕不报错的小猿猿 的博客

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&amp;characterEncoding=UTF-8&amp;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();
	}
	
}

结果:
在这里插入图片描述

总结

今天就分享到这里啦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值