Hibernate学习笔记_02

Hibernate学习笔记_02

Hibernate的快速入门(实现增删改查)

PS:

  1. 我所使用环境及配置是JDK8+Eclipse+MySQL8.0
  2. 本文以 Hibernate 3.6.10 版本为例,大家可以去官方网址 http://sourceforge.net/projects/hibernate/files/hibernate3/ 中下载对应的版本,但官网下载速度太慢,更推荐https://www.7down.com/soft/159644.html
    该网站的下载教程如下
    在这里插入图片描述
    在这里插入图片描述
    PS:
    记得将下载的文件内的以下jar包导入工程中,导入方法不再赘述,以下是所需的 JAR 包及其说明
名称 说明
hibernate3.jar Hibernate 的核心包
antlr-2.7.6.jar 语言转换工具,Hibernate 利用它实现 HQL 到 SQL 的转换
commons-collections-3.1.jar collections Apache 的工具集,用于增强 Java 对集合的处理能力
dom4j-l.6.1.jar dom4j XML解析器
javassist-3.12.0.GA.jar 代码生成工具,Hibernate 利用它在运行时扩展 Java 类
jta-1.1.jar 标准的 JAVA 事务(跨数据库)处理接口
slf4j-api-l.6.1.jar 只是一个接口,用于整合 log4j
log4j-l.2.17.jar Hibernate 使用的一个日志系统
slf4j-log4jl2-l.7.12.jar Log4j 日志文件核心 JAR
hibernate-jpa-2.0-api-1.0.1.Final.jar JPA 接口开发包

该表格参考:http://c.biancheng.net/view/4170.html
PS:
大家别忘了导入MySQL8.0相关的jar包!

1、建立数据库

使用Navicat进行可视化建表,其他小伙伴也可用终端命令进行建表

2、编写实体类

在项目的 src 目录下创建一个名称为 com.domain 的包,在包中创建一个实体类 User(即对应数据库表 user),并定义其属性(包括 id、username、password)以及相应的 getter 和 setter 方法。

package com.domain;

/** 
* @ClassName: User 
* @Description: TODO(一个持久化的用户类) 
* @author C137-Rick~18202121
* @date 2020年2月28日 下午3:44:16 
*  
*/
public class User {
	private String username;
	private String password;
	private int id;
	
	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;
	}
	public int getId() {
		return id;
	}
	public void setId(int i) {
		this.id = i;
	}
}

3、编写映射文件

在 com.domain 包中,创建一个名称为 User.hbm.xml 的映射文件,编辑后如下所示。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
   <!-- 配置表与实体对象的关系 -->
   <!-- package属性:填写一个包名.在元素内部凡是需要书写完整类名的属性,可以直接写简答类名了. -->
<hibernate-mapping package="com.domain">
    <!-- 
		class元素: 配置实体与表的对应关系的
		name: 完整类名
		table:数据库表名
	 -->
    <class name="User" table="user">
        <!-- id元素:配置主键映射的属性
		name: 填写主键对应属性名
		column(可选): 填写表中的主键列名.默认值:列名会默认使用属性名
		type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
				每个类型有三种填法: java类型|hibernate类型|数据库类型
		not-null(可选):配置该属性()是否不能为空. 默认值:false
		length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
		 -->
        <id name="username" column="username">
            <!-- 主键生成策略 <generator class="native" />-->
            
        </id>
      	<!-- property元素:除id之外的普通属性映射
			1、name: 填写属性名
			2column(可选): 填写列名
			3type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
			每个类型有三种填法: java类型、hibernate类型、数据库类型
			4、not-null(可选):配置该属性()是否不能为空. 默认值:false
			5length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
		 -->
        <property name="password"/>
        <property name="id"/>
    </class>
</hibernate-mapping>

4、编写核心配置文件 hibernate.cfg.xml

在 src 目录下创建一个名称为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>
		 <!-- 数据库驱动 MySQL8.0记得加cj和同一时区 -->
		<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
		 <!-- 数据库url -->
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_test?serverTimezone=UTC</property>
		 <!-- 数据库连接用户名 -->
		<property name="hibernate.connection.username">root</property>
		 <!-- 数据库连接密码 -->
		<property name="hibernate.connection.password">wzh666</property>
		<!-- 数据库方言
			#hibernate.dialect org.hibernate.dialect.MySQLDialect
			#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
			#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
			不同的数据库中,sql语法略有区别. 指定方言可以让hibernate框架在生成sql语句时.针对数据库的方言生成.
			sql99标准: DDL 定义语言  库表的增删改查
					   DCL 控制语言  事务 权限
					   DML 操纵语言  增删改查
					   
			注意: MYSQL在选择方言时,请选择最短的方言.
		 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<!-- 将hibernate生成的sql语句打印到控制台 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 将hibernate生成的sql语句格式化(语法缩进) -->
		<property name="hibernate.format_sql">true</property>
		<!-- 
			## auto schema export  自动导出表结构. 自动建表
			#hibernate.hbm2ddl.auto create		自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用)
			#hibernate.hbm2ddl.auto create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
			#hibernate.hbm2ddl.auto update(推荐使用) 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据).
			#hibernate.hbm2ddl.auto validate	校验.不自动生成表.每次启动会校验数据库中表是否正确.校验失败.
		 -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		<!-- 引入orm元数据
			路径书写: 填写src下的路径
		 -->
		<mapping resource="com/domain/User.hbm.xml" />
	</session-factory>
</hibernate-configuration>

随后在项目的 src 目录下创建一个名称为 com.test 的包,在该包下创建一个名称为HibernateTest的测试类。

5、增删改查

@Test
	public void addTest(){
		// 1.创建Configuration对象并加载hibernate.cfg.xml配置文件
        Configuration config = new Configuration().configure();
        // 2.获取SessionFactory
        SessionFactory sessionFactory = config.buildSessionFactory();
        // 3.得到一个Session
        Session session = sessionFactory.openSession();
        // 4.开启事务
        Transaction transaction = session.beginTransaction();
        // 5.执行持久化操作
        User user = new User();
        user.setUsername("zhangsan");
        user.setPassword("123");
        user.setId(1);
        // 将对象保存到表中
        session.save(user);
        // 6.提交事务
        transaction.commit();
        // 7.关闭资源
        session.close();
        sessionFactory.close();
	}

@Test
	public void deleteTest(){
		// 1.创建Configuration对象并加载hibernate.cfg.xml配置文件
        Configuration config = new Configuration().configure();
        // 2.获取SessionFactory
        SessionFactory sessionFactory = config.buildSessionFactory();
        // 3.得到一个Session
        Session session = sessionFactory.openSession();
        // 4.开启事务
        Transaction transaction = session.beginTransaction();
        // 5.执行持久化操作
        User user = (User) session.get(User.class, "zhangsan");
        session.delete(user);
        // 将对象保存到表中
        session.save(user);
        // 6.提交事务
        transaction.commit();
        // 7.关闭资源
        session.close();
        sessionFactory.close();
	}

@Test
	public void updateTest(){
		// 1.创建Configuration对象并加载hibernate.cfg.xml配置文件
        Configuration config = new Configuration().configure();
        // 2.获取SessionFactory
        SessionFactory sessionFactory = config.buildSessionFactory();
        // 3.得到一个Session
        Session session = sessionFactory.openSession();
        // 4.开启事务
        Transaction transaction = session.beginTransaction();
        // 5.执行持久化操作
        User user = new User();
        user.setUsername("zhangsan");
        user.setPassword("123");
        user.setId(1);
        // 将对象保存到表中
        session.update(user);
        // 6.提交事务
        transaction.commit();
        // 7.关闭资源
        session.close();
        sessionFactory.close();
	}

@Test
	public void getTest(){
		// 1.创建Configuration对象并加载hibernate.cfg.xml配置文件
        Configuration config = new Configuration().configure();
        // 2.获取SessionFactory
        SessionFactory sessionFactory = config.buildSessionFactory();
        // 3.得到一个Session
        Session session = sessionFactory.openSession();
        // 4.开启事务
        Transaction transaction = session.beginTransaction();
        // 5.执行持久化操作
        User user = (User) session.get(User.class,"zhangsan");
        System.out.println(user.getUsername());
        // 6.提交事务
        transaction.commit();
        // 7.关闭资源
        session.close();
        sessionFactory.close();
	}
发布了12 篇原创文章 · 获赞 16 · 访问量 527

猜你喜欢

转载自blog.csdn.net/weixin_45914074/article/details/104563122