`
willvvv
  • 浏览: 329008 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring 2.5.6和hibernate3.2.2集成(3)

阅读更多

最近看了一下springside,学习很多,从思想到编码风格,这里再废话一下,思想这个东西蛮虚,但是并不是只可意会不可言传,一些东西你想明白了,能够给别人讲解,并且让他人听懂了,这才代表你的思想到了某个境界,当然这个是我这个阶段的认识,所谓万物不变的是变化,思想也一样,扯远了。

这个demo延续上次,算是我对上一个项目的一点个人改进。这里只是简单的改进,使用第一个demo的注解,体会一下注解在减少配置方面的作用。

1.数据库和表仍然使用demo2

2.实体类和demo2一样,更改一下包名。

3.接口类不变。

4.实现类使用注解

package com.isa.demo3.service;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.isa.demo3.domain.User;

@Service
//默认将类中的所有函数纳入事务管理.
@Transactional
public class UserServiceImpl implements UserService {

	@Autowired
	private SessionFactory sessionFactory;
	
	@Override
	@Transactional(readOnly = true)
	public List<User> getAllUsers() {
		Session session = sessionFactory.getCurrentSession();
		String hql = "from User";
		List<User> list = session.createQuery(hql).list();
		return list;
	}

	@Override
	@Transactional(readOnly = true)
	public User getUserById(long id) {
		Session session = sessionFactory.getCurrentSession();
		User user = (User) session.get(User.class, id);
		return user;
	}

}

 5.配置文件的变化比较大,第一个用application.properties保存数据库相关配置,这里参考springside

#h2 version database settings
#jdbc.driver=org.h2.Driver
#jdbc.url=jdbc:h2:tcp://localhost/~/mini-web
#jdbc.username=sa
#jdbc.password=
#hibernate.dialect=org.hibernate.dialect.H2Dialect

#oracle version database settings
#jdbc.driver=oracle.jdbc.driver.OracleDriver
#jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:XE
#jdbc.username=miniweb
#jdbc.password=miniweb
#hibernate.dialect=org.hibernate.dialect.Oracle10gDialect

#mysql version database setting
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/test?useUnicode=true&amp;characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

#hibernate settings
hibernate.show_sql=true
hibernate.format_sql=false
hibernate.ehcache_config_file=/ehcache/ehcache-hibernate-local.xml

 第二个applicationContext.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
	default-lazy-init="true">

	<description>Spring公共配置 </description>

	<!-- 定义受环境影响易变的变量 -->
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
		<property name="ignoreResourceNotFound" value="true" />
		<property name="locations">
			<list>
				<!-- 标准配置 -->
				<value>classpath*:demo3/application.properties</value>
				<!-- 集群中节点配置 -->
				<value>classpath*:demo3/application.cluster.properties</value>
				<!-- 本地开发环境配置 -->
				<value>classpath*:demo3/application.local.properties</value>
				<!-- 服务器生产环境配置 -->
				<!-- <value>file:/var/myapp/application.server.properties</value> -->
			</list>
		</property>
	</bean>

	<!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 -->
	<context:component-scan base-package="com.isa.demo3" />

	<!-- 数据源配置,使用应用内的DBCP数据库连接池 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<!-- Connection Info -->
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />

		<!-- Connection Pooling Info -->
		<property name="initialSize" value="5" />
		<property name="maxActive" value="100" />
		<property name="maxIdle" value="30" />
		<property name="maxWait" value="1000" />
		<property name="poolPreparedStatements" value="false" />
		<property name="defaultAutoCommit" value="false" />
	</bean>

	<!-- 数据源配置,使用应用服务器的数据库连接池 -->
	<!--<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/ExampleDB" />-->

	<!-- Hibernate配置 -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="namingStrategy">
			<bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
				<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider
				</prop>
				<prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.ehcache_config_file}</prop>
			</props>
		</property>
		<property name="packagesToScan" value="com.isa.demo3.domain" />
	</bean>

	<!-- 事务管理器配置,单数据源事务 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

	<!-- 使用annotation定义事务 -->
	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
</beans>

 6.简单测试

package com.isa.demo3.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.isa.demo3.service.UserService;
import com.isa.demo3.service.UserServiceImpl;

public class Demo3Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "demo3/*.xml" });
		UserService service = (UserServiceImpl)context.getBean("userServiceImpl");
		System.out.println(service.getUserById(1L).toString());
	}
}

 7.对应配置文件需要注意,sessionFactory节点的packagesToScan的写法,到domain的包即可,后面不需要加*号。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics