学习Hibernate框架总结

    Hibernate框架应用在dao层对数据库进行crud操作,其实hibernate底层代码就是jdbc,它只不过时jdbc进行了封装,使用hibernate框架之后不需要再写jdbc的代码了,也不需要再去写sql语句实现。

   那么现在假如说我们想创建一个user表,按照我们以前的惯例,我们需要create table然后等等之后的操作,但是我们现在可以不用,我们先创建一个实体类,就叫user,然后配置实体类和数据库表一一对应关系(映射),这里我们使用配置文件来实现映射关系。创建xml格式的配置文件。

    再配置文件里面主要要做这些事情,(1)引入约束 (2)配置映射关系

下列是具体实现:

Uesr表

public class User {
	@Override
	public String toString() {
		return "User [id=" + id + ", userName=" + userName + ", password=" + password + "]";
	}
	private int id;
	private String userName;
	private String password;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = 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;
	}
	
}

    配置映射关系(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">
<hibernate-mapping>
	<!-- 1 配置类和表对应 
		class标签
		name属性:实体类全路径
		table属性:数据库表名称
	-->
	<class name="cn.itcast.entity.User" table="t_user">
		<!-- 2 配置实体类id和表id对应 
			hibernate要求实体类有一个属性唯一值
			hibernate要求表有字段作为唯一值
		-->
		<!-- id标签
			name属性:实体类里面id属性名称
			column属性:生成的表字段名称
		 -->
		<id name="uid" column="uid">
			<!-- 设置数据库表id增长策略 
				native:生成表id值就是主键自动增长
			-->
			<generator class="native"></generator>
		</id>
		<!-- 配置其他属性和表字段对应 
			name属性:实体类属性名称
			column属性:生成表字段名称
		-->
		<property name="username" column="username"></property>
		<property name="password" column="password"></property>
	</class>
</hibernate-mapping>

下一步是创建hibernate的核心配置文件:

1)核心配置文件格式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>
	<!-- 第一步 配置数据库信息 -->
	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mybase</property>
	<property name="hibernate.connection.username">root</property>
	<property name="hibernate.connection.password">123</property>
	<!-- 第二部 配置hibernate信息 (可选)-->
	<property name="hibernate.show_sql">true</property>
	<property name="hibernate.format_sql">true</property>
	<property name="hibernate.hbm2ddl.auto">update</property>
	<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
	<!-- 配置session绑定本地线程 -->
	<property name="hibernate.current_session_context_class">thread</property>
	<!-- 第三步 把映射文件放到核心配置文件中(必须) -->
	<mapping resource="xhl/day01/userhbm.xml"/>
</session-factory>
</hibernate-configuration>

这是在表里面填充数据,执行这段代码之后,你会发现,你并没有写insert这样的语句,就会发现你的表里面数据依然添加了进去的。 

	public static void testAdd() {
		SessionFactory sf = HibernateUtils.getSessionFactory();
		//第三步,使用SessionFactory创建session对象。
		Session session = sf.openSession();
		//第四步,开启事务
		Transaction tx = session.beginTransaction();
		//第五步 写具体逻辑crud操作
		User user = new User();
		user.setUserName("aa");
		user.setPassword("123");
		session.save(user);
		
		//第六步 提交事务
		tx.commit();
		//第七步 关闭事务
		session.close();
		sf.close();
	}

这里我使用了工具类的,因为这样可以避免多次重复创建,

public class HibernateUtils {
	private static Configuration cfg = null;
	private static SessionFactory s = null;
	static {
		cfg = new Configuration();
		cfg.configure();
		s = cfg.buildSessionFactory();
	}
	
	public static Session getThreadSession() {
		return s.getCurrentSession();
	}
	
	public static SessionFactory getSessionFactory() {
		return s;
	}
}

Configuration:

到src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)。

SessionFactory:

1 使用configuration对象创建sessionFactory对象

(1)创建sessionfactory过程中做事情:

- 根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建

 

2 创建sessionFactory过程中,这个过程特别耗资源的

(1)在hibernate操作中,建议一个项目一般创建一个sessionFactory对象,这就是我前面为什么用工具类。

 

 

Session:

1 session类似于jdbc中connection

2 调用session里面不同的方法实现crud操作

(1)添加 save方法

(2)修改 update方法

(3)删除 delete方法

(4)根据id查询 get方法

3 session对象单线程对象

(1)session对象不能共用,只能自己使用

Transaction:

用来提交事务和回滚事务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值