上周六是罗列了搭建SSM(spring-struts-mabatis)框架,因为我们公司用的就是基于这3种框架上封装的DPAP框架。今天的侧重点就是将mybatis框架换成hibernate框架是如何集成进去的。
1、创建maven工程
2、配置hibernate需要的jar包,struts和spring的我就不讲了。
3、配置spring.xml文件.编写测试类。
第一步参考上一篇,直接讲第二步了:
<!-- 使用Hibernate需要的jar -->
<dependency>
<groupId>hibernate</groupId>
<artifactId>hibernate3</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2_beta1</version>
</dependency>
<dependency>
<groupId>odmg</groupId>
<artifactId>odmg</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>net.java.dev.spring-annotation</groupId>
<artifactId>spring-annotation</artifactId>
<version>1.0.2</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>com.springsource.org.dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>com.springsource.javax.transaction</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>com.springsource.org.apache.commons.collections</artifactId>
<version>2.1.1</version>
</dependency>
缺少哪些jar包在你获取sessionFactory的时候会提示你。但是必不可少的jar包有以下这些:
- cglib-x.jar、asm-attrs.jar、asm.jar:CGLIB库,Hibernate用它来实现PO字节码的动态生成,是非常核心的库,也是必须使用的jar包;
- dom4j-x.jar:dom4j是一个Java的 XML
API,类似于jdom,用来读写XML文件的。Hibernate用它来读写配置文件; - commons-collections-x.jar:Apache
Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大; - commons-logging-x.jar、log4j-x.jar:包含了日志功能;
好了,配置完pom.xml文件,首先,还是在根目录下创建spring.xml,需要定义dataSouce 和sessionFactory。
<!-- 测试spring与hibernate的整合 ,定义dataSource -->
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@ip地址:数据库名" />
<property name="username" value="XXXXXX" />
<property name="password" value="XXXXXX" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="datasource" />
<property name="hibernateProperties">
<props>
<!-- 设置Hibernate方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<!-- 是否自动更新表 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="mappingResources">
<list><value>hibernate/Cjj.hbm.xml</value></list>
</property>
</bean>
其中mappingResources是用来加载你的hbm.xml文件的。好比如我定义了一个CJJ实体,并且对于了数据库的cjj_test表,那么在Cjj.hbm.xml中,我需要对应好这个关系。
<hibernate-mapping>
<class name="com.deppon.cjj.ssh.domain.Cjj" table="cjj_test" >
<id name="name" column="NAME" type="string">
<generator class="assigned" />
</id>
<property name="age" column="age"/>
<property name="name" column="name" />
<property name="sex" column="sex"/>
</class>
</hibernate-mapping>
这里的ID配置是比较有讲究的,我就不细讲了,如果你的表里没有主键的话,仍然要配置id ,否则就会报错,没有的话就像我这样配置吧。
最后,编写测试类:
@Test
public void testHibernate(){
//加载spring.xml文件,因为是测试类,所以即便此时没有配置web.xml也没关系,web.xml是需要你的工程启起来的时候加载的。
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
//读取sessionFactory这个bean ,强转成org.hibernate.SessionFactory
SessionFactory factory = (SessionFactory) context.getBean("sessionFactory");
System.out.println(factory);
//定义与数据库打交道的会话对象
Session session=factory.openSession();
System.out.println(session.isConnected());
//向数据库里做查询操作 ,结果集放在Query里
Query q = session.createSQLQuery("select * from cjj_test").addEntity(Cjj.class);
List<Cjj> list=q.list();
for(Cjj s:list){
System.out.println(s.getName()+","+s.getAge()+","+s.getSex());
}
session.close();
}
主要是创建sessionFactory能否成功,关联了很多jar包找不到的时候就要去搜一下是缺少了什么。我自己上面写的这版测试是成功的。
就酱吧。