您的位置:首页 > 编程语言 > Java开发

在ssh环境中配置Hibernate框架

2016-11-12 11:31 295 查看
介绍在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接口及实现类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java hibernate xml 框架 ssh