在ssh环境中配置Hibernate框架

5 篇文章 0 订阅

介绍在SSH环境中,配置Hibernate框架,编写DAO接口,实现数据库操作。


0. Why Hibernate?

Hibernate 是传统 Java 对象和数据库服务器之间的桥梁,用来处理基于对象关系映射机制(ORM)和模式的那些对象。Hibernate的优势在于

  • 使用XML文件来处理映射Java类别到数据库表格中,不用编写代码
  • 为在数据库中直接存储和检索Java对象提供简单的API,不需要写SQL语句
  • 操控数据库中对象复杂的关联


1. 配置环境


1. 1 准备jar包


添加Hibernate相关jar包,其中有些jar包与spring冲突需要删除(见jar包清单),此外还需要添加spring与Hibernate整合的jar包spring-hibernate3.jar,需要说明的是,spring.jar包含spring-hibernate3.jar的部分,如果配置了spring.jar,就不需要再配置前者了,否则会有冲突,以下是相关jar包清单

除了清单以外,还需要配置数据库驱动、连接池以及支持spring的相关jar包


1. 2 配置xml文件


编写Hibernate配置文件,该文件定义了SQL版本(与数据库对应),执行查询时是否显示sql语句等等,注意在无网络链接时可能出现的问题,参考http://www.makaidong.com/IT%E5%8D%9A%E5%AE%A2%E5%9B%AD/11450.shtml

<?xml version='1.0' encoding='UTF-8'?>
<!-- 
解决hibernate无法在无网络情况下运行 http://www.makaidong.com/IT%E5%8D%9A%E5%AE%A2%E5%9B%AD/11450.shtml
-->
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<!-- 配置Hibernate的基本属性 -->
        <!-- 1.数据源配置到IOC容器中 -->
        <!-- 2.关联的.hbm.xml也在IOC容器配置SessionFactory实例 -->
        <!-- 3.配置Hibernate的基本属性:方言,SQL显示及格式化,生成数据表的策略以及二级缓存 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
		<property name="format_sql">true</property>
	</session-factory>

</hibernate-configuration>


在spring配置文件中配置sessionFactory和数据库链接池的bean组件, sessionFactory的属性定义了对象映射xml文件的位置,在相应的位置新建对象映射xml文件

	<!-- 配置hibernate sessionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
		<property name="dataSource" ref="dbcpDataSource"></property>
		<property name="mappingLocations" value="classpath:com/bs_circle/sql/*.hbm.xml"></property>		
	</bean>
	<bean id="dbcpDataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="username" value="haor"></property>
		<property name="password" value="*****"></property>
		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
		<property name="url" value="jdbc:mysql://localhost:3306/bs_circle?useUnicode=true&characterEncoding=utf8"></property>
	</bean>


在相应的位置定义对象映射xml文件,文件定义了从实体类到数据库表字段的对应关系,要定义id作为主键,可以用uuid自动生成,用set定义相应的关联查询,其中key属性是关联查询的条件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.bs_circle.entity.User" table="bs_user">
		<id name="bs_user_id" column="bs_user_id" type="string">
			<!-- uuid生成器 -->
			<generator class="uuid"></generator>
		</id>
		<property name="bs_user_username" column="bs_user_username" type="string"></property>
		<property name="bs_user_password" column="bs_user_password" type="string"></property>
		<property name="bs_user_email" column="bs_user_email" type="string"></property>
		<property name="bs_user_nickname" column="bs_user_nickname" type="string"></property>
		<set name="bs_user_roles">
			<key column="bs_user_id"></key>
			<one-to-many class="com.bs_circle.entity.Role"/>
		</set>
	</class>
</hibernate-mapping>


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.bs_circle.entity.Role" table="bs_role">
		<id name="bs_role_id" column="bs_role_id" type="string">
			<!-- uuid生成器 -->
			<generator class="uuid"></generator>
		</id>
		<property name="bs_user_id" column="bs_user_id" type="string"></property>
		<property name="bs_user_role" column="bs_user_role" type="string"></property>
	</class>
</hibernate-mapping>



编写简单的java语句进行测试

package com.bs_circle.test.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.bs_circle.entity.User;

public class TestHibernate {
	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		SessionFactory sf = ac.getBean("sessionFactory",SessionFactory.class);
		Session session = sf.openSession();
		User user = (User) session.get(User.class, "8aea92cf582e24a101582e24a2970001");
		System.out.println(user.getBs_user_username());
		session.close();
	}
}




输出结果

Hibernate: 
    select
        user0_.bs_user_id as bs1_1_0_,
        user0_.bs_user_username as bs2_1_0_,
        user0_.bs_user_password as bs3_1_0_,
        user0_.bs_user_email as bs4_1_0_,
        user0_.bs_user_nickname as bs5_1_0_ 
    from
        bs_user user0_ 
    where
        user0_.bs_user_id=?
Demo

下一篇介绍如何基于Hibernate框架编写DAO接口及实现类
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值