spring与hibernate注解及XML方式集成

Hibernate Xml方式

该种方式需要在sessionFactory中引入对应的hbm.xml文件,样例如下:

  <!-- spring-hibernate 整合 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.jdbc.batch_size=25
hibernate.jdbc.fetch_size=50
hibernate.show_sql=true
</value>
</property>
<property name="dataSource" ref="dataSource" />
<property name="mappingLocations">
<list>
<value>classpath:/META-INF/gls.hibernate/User.hbm.xml</value>
<value>classpath:/META-INF/gls.hibernate/Customer.hbm.xml</value>
<value>classpath:/META-INF/gls.hibernate/BatchTransaction.hbm.xml</value>
<value>classpath:/META-INF/gls.hibernate/PolicyTransaction.hbm.xml</value>
<value>classpath:/META-INF/gls.hibernate/Policy.hbm.xml</value>
<value>classpath:/META-INF/gls.hibernate/Email.hbm.xml</value>
<value>classpath:/META-INF/gls.hibernate/BatchJobChunk.hbm.xml</value>
</list>
</property>
</bean> <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <tx:annotation-driven transaction-manager="transactionManager" />

对于其他的DAO及其Service层,不做阐述了,不过对于DAO和Service建议建立BaseDao和BaseService使用泛型操作对应的model。

栗子来啦:

BaseDao

/**
* baseDao class用于数据的CRUD操作
* @author daniel.zhao
*
* @param <T>
*/
public interface BaseDao<T> {
public void save(T entity);
public void saveOrUpdate(T entity);
public void update(T entity);
public void delete(Serializable id);
public T findById(Serializable id);
public List<T> findByHql(String hql, Object...params);
public List<T> findByHqlLimit(String hql, final Long start, final Long limit, Object...params);
}

DaoSupport

public class DaoSupport<T extends Serializable> implements BaseDao<T> {

    public static final Logger logger = LoggerFactory.getLogger(DaoSupport.class);

    private Class<T> clazz;

    @Autowired
private SessionFactory sessionFactory; /**
* 构造方法
*/
public DaoSupport() {
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
clazz = (Class<T>) type.getActualTypeArguments()[0];
logger.info("BaseDao quety entity class: " + clazz.getName());
} public Session getSession() {
return sessionFactory.getCurrentSession();
} @Override
public void save(T entity) {
this.getSession().save(entity);
} @Override
public void saveOrUpdate(T entity) {
this.getSession().saveOrUpdate(entity);
} @Override
public void update(T entity) {
this.getSession().update(entity);
} @Override
public void delete(Serializable id) {
this.getSession().delete(this.findById(id));
} @Override
public T findById(Serializable id) {
return (T) this.getSession().get(this.clazz, id);
} @Override
public List<T> findByHql(String hql, Object... params) {
Query query = this.getSession().createQuery(hql);
for (int i = 0; params != null && i < params.length; i++) {
query.setParameter(i, params[i]);
}
return query.list();
} @Override
public List<T> findByHqlLimit(String hql, Long start, Long limit, Object... params) {
Query query = this.getSession().createQuery(hql);
for (int i = 0; params != null && i < params.length; i++) {
query.setParameter(i, params[i]);
}
query.setFirstResult(start.intValue());
query.setMaxResults(limit.intValue());
return query.list();
}
}

BaseService

public interface BaseService<T> {
public void save(T entity);
public void saveOrUpdate(T entity);
public void update(T entity);
public void delete(Serializable id);
public T findById(Serializable id);
public List<T> findByHql(String hql, Object...params);
public List<T> findByHqlLimit(String hql, final Long start, final Long limit, Object...params);
}

BaseServiceImpl

@Transactional
public class BaseServiceImpl<T> implements BaseService<T> { private BaseDao<T> dao; @Resource
public void setDao(BaseDao<T> dao) {
this.dao = dao;
} @Override
public void save(T entity) {
dao.save(entity);
} @Override
public void saveOrUpdate(T entity) {
dao.saveOrUpdate(entity);
} @Override
public void update(T entity) {
dao.update(entity);
} @Override
public void delete(Serializable id) {
dao.delete(id);
} @Override
public T findById(Serializable id) {
return dao.findById(id);
} @Override
public List<T> findByHql(String hql, Object... params) {
return dao.findByHql(hql, params);
} @Override
public List<T> findByHqlLimit(String hql, Long start, Long limit, Object... params) {
return dao.findByHqlLimit(hql, start, limit, params);
} }

注解方式

Hibernate Entity

@Entity
@Table(name = "t_user")
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = -9042615274714038279L; @Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id; @Column(name = "name")
private String name; @Column(name = "password")
private String password; @Column(name = "age")
private Integer age; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name == null ? null : name.trim();
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password == null ? null : password.trim();
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} @Override
public String toString() {
return "User[id=" + id + ", name=" + name + ",age=" + age + "]";
}
}

Hibernate Xml

  <!-- spring-hibernate 整合 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.jdbc.batch_size=25
hibernate.jdbc.fetch_size=50
hibernate.show_sql=true
</value>
</property>
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>com.ebao.life.model.User</value>
</list>
</property>
</bean> <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <tx:annotation-driven transaction-manager="transactionManager" />

Junit Test

@RunWith(JUnit4ClassRunner.class)
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
@ContextConfiguration(classes = { PropertyConfig.class, DataSourceConfig.class, HibernateAnnotationConfig.class })
public class HibernateAnnotationTest { public static final Logger logger = LoggerFactory.getLogger(HibernateAnnotationTest.class); @Resource(name = UserService.BEAN_DEFAULT)
private UserService userService; @Test
public void testInsert() {
User user = new User();
user.setName("daniel-zhao-001");
user.setPassword("password");
user.setAge(28);
userService.save(user);
}
}

spring与hibernate注解及XML方式集成的更多相关文章

  1. Spring 的 Bean 管理(XML 方式)

    Spring 的 Bean 管理(XML 方式) 1. 三种实例化 Bean 的方式 使用类构造器实例化(默认无参数) 使用静态工厂方法实例化(简单工厂模式) 使用实例工厂方法实例化(工厂方法模式) ...

  2. spring 整合hibernate注解时候,出现“Unknown entity: com.ssh.entry.Admin; nested exception is org.hibernate.MappingException: Unknown entity: com.ssh.entry.Admin”异常的问题

    今天学习使用ssh框架的时候,出现一个异常,弄了好久才找到,在这记录一下,我的sb错误1.spring整合hibernate,取代*.hbm.xml配置文件   在applicationContext ...

  3. Spring整合Hibernate的两种方式

    在使用spring注解整合hibernate时出现"org.hibernate.MappingException: Unknown entity: com.ssh.entry.Product ...

  4. Spring+MyBatis纯注解零XML整合(4)

    不得不说,利用XML作为配置文件是一个非常好的想法,它可以轻松地实现配置集中化,而且修改之后无需再次编译.然而,由于大多数情况下开发者基本都会拿到程序的源码,加之对于各种XML配置文件一般情况下也只有 ...

  5. Spring使用AspectJ注解和XML配置实现AOP

    本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP 下面是使用AspectJ注解实现AOP的Java Project首先是位于classpath下的applicationC ...

  6. Spring源码 04 IOC XML方式

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...

  7. spring注解和xml方式区别详解

    一.spring常规方式. 在使用注释配置之前,先来回顾一下传统上是如何配置 Bean 并完成 Bean 之间依赖关系的建立.下面是 3 个类,它们分别是 Office.Car 和 Boss,这 3 ...

  8. Spring深入浅出(三)XML方式以及注解的方式操作IOC

    在日常的开发过程中,我们把程序分为3层:Controller层,Service层,DAO层.Controller类似于Servlet,也就是MVC中的控制层. 调用的顺序是: Controller层调 ...

  9. Spring 的IOC容器之XML方式

    1. Spring 入门 1.1 概述 Spring 是一个分层的 JavaEE 轻量级开源框架; Spring 的核心是控制反转(IOC)和面向切面(AOP); 1.2 特点 方便解耦,简化开发; ...

随机推荐

  1. Fms3和Flex打造在线视频录制和回放

    本博推荐文章快速导航: Sql Server2005 Transact-SQL 新兵器学习MCAD学习 代码阅读总结 ASP.NET状态管理 DB(数据库)WAPWinFormFlex,Fms aie ...

  2. 【运维技术】node项目使用strongloop进行部署相关教程

    node项目使用strongloop进行部署相关教程 安装strongloop 下载安装node 解压到路径完成安装 使用软链方式配置环境变量 添加cnpm的淘宝镜像源 安装node-gyp的模块依赖 ...

  3. ThinkPHP5 快速入门文档

    一. 5.0版本采用模块化的设计架构,默认的应用目录下面只有一个index模块目录,如果我要添加新的模块可以使用控制台命令来生成. 切换到命令行模式下,进入到应用根目录并执行如下指令: php thi ...

  4. 20145221 《Java程序设计》第九周学习总结

    20145221 <Java程序设计>第九周学习总结 教材学习内容总结 整合数据库 JDBC入门 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行 ...

  5. Jenkins报错Error cloning remote repo 'origin'

    Jenkins控制台输出报错 输出ERROR: Error cloning remote repo 'origin' 这行报错只能说明是git有问题,其他没什么有用的信息. 浏览器中Ctrl+F查找E ...

  6. UVa 10891 Sum游戏

    https://vjudge.net/problem/UVA-10891 题意: 有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取.每次玩家只能从左端或者右端取任意数量个数,但不能两端都取. ...

  7. Notepad++ 管理工程--转载

    http://blog.csdn.net/cashey1991/article/details/7001385 @1.首先从下面这个菜单打开工程panel @2.在工程panel的“Workspace ...

  8. package 'yaml-cpp' not found

    -- Using these message generators: gencpp;genlisp;genpy -- checking for module 'yaml-cpp' -- package ...

  9. 最好的移动触摸滑动插件:Swiper

    最近在使用的一个移动触摸滑动插件Swiper,功能很强大,跟之前的那个swipe.JS相比,同时支持在PC端滑动,支持上下方向滑动,支持多张图片滑动,支持多屏滑动,凡是你想得到的几乎都可以实现.最近作 ...

  10. Http协议中Cookie详细介绍

    Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的.硬盘Cookie ...