7spring集成hibernate
Posted yuanGrowing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7spring集成hibernate相关的知识,希望对你有一定的参考价值。
1、感想
spring很重要的一个功能就是管理类,所谓spring和hibernate集成,无非就是将hibernate的类交于spring容器去管理。
一个是cfg.xml(用来配置hibernate与数据库相连的信息);
一个是hbm.xml(用来配置类与数据库表格的对应),使用了spring以后,我们可以在spring的文件里面写数据库相连的配置
信息,因此只需要写hbm.xml文件就行了。
多说无益,如果会hibernate的话,看了下面的例子很快就能成功集成了。
2、例子
2.1
首先,很重要的一步是环境的配置,我建议使用maven或者gradle来进行项目的搭建,这样可以省去很多因为jar包冲突而引起的
很不必要的麻烦。
我使用的是maven,pom文件如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.learnspring</groupId>
<artifactId>learnspring</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>learnspring Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.2.1.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</project>
maven编译完以后的jar包情况如下:
2.2 设计一个User类:
public class User
private String name ;
private String school ;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getSchool()
return school;
public void setSchool(String school)
this.school = school;
和User类相对应的hbm.xml文件:
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.example.orm.User" table="USER">
<id name="name" type="java.lang.String">
<column name="NAME"/>
<generator class="assigned"/>
</id>
<property name="school" type="java.lang.String">
<column name="SCHOOL"/>
</property>
</class>
</hibernate-mapping>
一个IUserDao接口
public interface IUserDao
User[] getUsers();
UserDaoImpl实现IUserDao接口:
public class UserDaoImpl implements IUserDao
private SessionFactory sessionFactory ;
private Session session ;
@Test
public void test()
ApplicationContext app = new ClassPathXmlApplicationContext("spring-main.xml");
IUserDao userDao = (IUserDao) app.getBean("userdao");
User[] users = userDao.getUsers();
System.out.println(users.length);
public User[] getUsers()
String hql = "from User" ;
Query query = session.createQuery(hql);
List list = query.list();
if (list==null||list.size()==0)
return null;
else
User[] users = new User[list.size()];
for(int i=0;i<users.length;i++)
users[i] = (User) list.get(i);
return users ;
public SessionFactory getSessionFactory()
return sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory)
this.sessionFactory = sessionFactory;
this.session = this.sessionFactory.openSession();
然后是spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="datasource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<bean id="sessionfactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="datasource"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/example/orm/User.hbm.xml</value>
</list>
</property>
</bean>
<bean id="userdao" class="com.example.orm.UserDaoImpl">
<property name="sessionFactory" ref="sessionfactory"/>
</bean>
</beans>
这个配置文件的意思很简单,就是先定义了一个datasource,
里面有连接数据库的信息(代替了hibernate.cfg.xml的功能),
然后定义了一个sessionFactory,将datasource作为依赖注入,
然后sessionFactory里面还有hibernateProperties依赖
(用来描述hibernate的一些属性比如数据库方言等)和mappingResources(用来指向hbm.xml文件)。
最后一个自己写的UserDao,将sessionFactory作为依赖注入(注意,请看UserDaoImpl类中的set方法)
测试代码:(在数据库里面已经存了一个数据)
![这里写图片描述](https://img-blog.csdn.net/20160406161838821)
ApplicationContext app = new ClassPathXmlApplicationContext("spring-main.xml");
IUserDao userDao = (IUserDao) app.getBean("userdao");
User[] users = userDao.getUsers();
System.out.println(users.length);
运行结果:
1
3、细节
在上面spring文件中的datasource,其类型是一个接口,javax.sql.DataSource,因此,只要实现了这个接口的类应该都可以作为注入sessionFactory的依赖类,比如spring框架提供的org.springframework.jdbc.datasource.DriverManagerDataSource。
你也可以不使用datasource,在hibernateProperties里面直接配置数据库的连接信息:
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
<prop key="hibernate.connection.url">jdbc:mysql://localhost:3306/test</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.connection.username">root</prop>
<prop key="hibernate.connection.password">root</prop>
</props>
</property>
但是一旦这么配置了以后就一定不要使用datasource,不然会出现奇怪的错误。
以上是关于7spring集成hibernate的主要内容,如果未能解决你的问题,请参考以下文章
7Spring+Struts2+MyBaits(无映射接口实现类)
7Spring -Cloud-路由网管Spring Cloud Zuul