Hibernate(一)hibernate的使用

本文详细介绍了Hibernate框架的概念、优点及组成部分,包括配置文件、实体类和映射文件的创建过程。并通过一个实例演示了如何使用Hibernate进行数据库操作,从实体类定义、映射文件配置到单元测试,帮助初学者快速上手。

一、hibernate概念:

1、hibernate是对ORM(对象关系映射)思想的实现。对JDBC进行了封装,简化了对JDBC的操作。是一个数据层的框架。

2、优点:

●大大简化了数据访问层的代码。

●支持多种数据库。


二、hibernate主要组成:

  1. hibernate.cfg.xml文件。这是hibernate的主要配置文件,用来配置连接数据库的
    参数以及框架所要用到的参数。
  2. Java实体类。与数据库中表的字段对应。
  3. 实体类名. hbm.xml。映射文件,将实体类与表相关联。

 


三、hibernate使用:

可在官网下载hibernate的文档。里面有更详细的配置教程。

1、导入jar包。

其中hibernate3.jarhibernate的核心jia包。dom4j包用于解析xmlmysql-connector-java-5.1.45-bin.jar用于连接数据库。

      


2、配置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://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

	<session-factory>

		<!-- 数据库连接参数设置 -->
		<!-- jdbc驱动 com.mysql.jdbc.Driver -->
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		
		<!-- jdbc:mysql://localhost:3306/数据库名?useSSL=false&amp;serverTimezone=UTC -->
		<property name="connection.url">jdbc:mysql://localhost:3306/hibernatetest?useSSL=false&amp;serverTimezone=UTC</property>
		
		<!-- 数据库用户名 root -->
		<property name="connection.username">root</property>
		
		<!-- 数据库密码 -->
		<property name="connection.password">123456</property>

		<!-- 数据库连接池大小 -->
		<property name="connection.pool_size">1</property>

		<!-- 方言,不同数据库sql语法不同 配置相应数据库的方言才能是hibernate更好的支持所使用的数据库 -->
		<!-- 此处使用的数据库为mysql -->
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

		<!-- session与当前线程绑定  session为hibernate和数据库之间的会话 -->
		<property name="current_session_context_class">thread</property>


		<!-- 是否在控制台打印sql语句  设为true可以在控制台看到执行过程中自动生成的sql语句 -->
		<property name="show_sql">true</property>

		<!-- 格式化sql语句  使sql看起来更清晰 -->
		<property name="format_sql">true</property>
	
		<!-- ddl策略  -->
		<property name="hbm2ddl.auto">update</property>

		<!-- 加入映射文件 目前实体类和映射文件还未写   这步在实体类和映射文件写好后再加入-->
		<!-- 每新建一个实体类和映射文件后都需要在此配置映射文件 -->
		<!-- cn/otote/entity/为包名  User.hbm.xml为映射文件 -->
		<mapping resource="cn/otote/entity/User.hbm.xml" />
		
	</session-factory>

</hibernate-configuration>

 

其他配置选项可根据需求自行增加,可以在官网下载的文档找到相应的配置信息。


3、建一个实体类:

新建一个用户实体类用于测试。用户的属性有id、userName、age、sex。并生成set、get方法。

package cn.otote.entity;

public class User {
	
	private Integer id;
	
	private String userName;
	
	private Integer age;
	
	private String sex;

	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 Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", userName=" + userName + ", age=" + age + ", sex=" + sex + "]";
	}
	
	
}

 


4、配置映射文件:

在用户实体类的包下新建一个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="cn.otote.entity">
	
	<!-- name="User"为User实体类的类名  table为User实体类在数据库中的表名 这里表名取为t_user -->
    <class name="User" table="t_user">
    
    	<!-- 主键用<id>标签  name为实体类中主键的属性名id   column为t_user表中主键名id -->
        <id name="id" column="id">
        	<!-- class="native"将主键id设为自增 -->
            <generator class="native"/>
        </id>

        <!-- 普通字段用property标签 -->
        
        <!-- name为实体类的属性名   column为表中的字段名 -->
        <property name="userName" column="user_name"></property>
        
        <!-- age属性与表中字段都为age   可以不用写column 以下同 -->
        <property name="age"></property>
        <property name="sex"></property>
        
    </class>

</hibernate-mapping>

 


5、在hibernate.cfg.xml加入映射文件路径

 

    <!-- 加入映射文件 目前实体类和映射文件还未写   这步在实体类和映射文件写好后再加入-->
	<!-- 每新建一个实体类和映射文件后都需要在此配置映射文件 -->
	<!-- cn/otote/entity/为包名  User.hbm.xml为映射文件 -->
	<mapping resource="cn/otote/entity/User.hbm.xml" />

 


6、添加工具类:

package cn.otote.utils;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            return new Configuration().configure().buildSessionFactory();
        }
        catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

}

 


7、测试:

建一个单元测试:代码如下:

package cn.otote.entity;

import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;
import org.junit.jupiter.api.Test;

import cn.otote.utils.HibernateUtil;

class UserTest {

	@Test
	void test() {
		//创建session工厂
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		//获取当前线程的session
		Session session = sessionFactory.getCurrentSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
		
		//创建一个用户
		User user=new User();
		user.setUserName("小明");
		user.setAge(18);
		user.setSex("男");
		
		//通过hibernate将该用户保存到数据库中。
		session.save(user);
		
		//提交事务
		transaction.commit();
	}

}

 


8、运行单元测试。

如果配置文件开启了显示sql语句可以在控制台看到sql语句。

运行完毕打开数据库,此时可以看到hibernate已经自动为我们建了一个用户表且字段名与映射文件配的相同,并且将数据插入。至此hibernate的初步使用已经完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值