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. CentOS7搭建Gitlab详细过程

    1.参见Gitlab官网说明 原文地址:https://about.gitlab.com/install/#centos-7   1.安装并配置必要的依赖项 在CentOS 7(和RedHat / O ...

  2. Ubuntu16.04安装wireshark

    Wireshark是一个非常强大的抓包工具,适用于各种场合,安装配置也简单.这里仅对在Ubuntu上的安装做介绍. 首先通过apt安装WireShark: $ sudo apt-add-reposit ...

  3. P1879 [USACO06NOV]玉米田Corn Fields(状压dp)

    P1879 [USACO06NOV]玉米田Corn Fields 状压dp水题 看到$n,m<=12$,肯定是状压鸭 先筛去所有不合法状态,蓝后用可行的状态跑一次dp就ok了 #include& ...

  4. 20145329 《网络对抗技术》 逆向及Bof基础实验

    1.实验内容 本次实践的对象是一个名为20145329的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串.该程序同时包含另一个代码片段,ge ...

  5. 20145311 《Java程序设计》第十周学习总结

    20145311 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 ·网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据·程序员所作的事情就是把数据发送到指定的位置 ...

  6. 初识PHP(二)常用函数

    在此记录一些常用库函数和常用语法以便查阅 一.PHP手册 php手册中文地址 http://php.net/manual/zh 二.一些常用操作 2.1字符串操作 2.1.1 strpos — 查找字 ...

  7. linux下 ip指令

    目录 Network ip command Command :ip 简介 内容 Network ip command Command :ip 简介 ip 是個指令喔!並不是那個 TCP/IP 的 IP ...

  8. QT+VS中ui不能声明为指针?

    问题描述:QtCreator里的UI全是默认为指针类型,调用的时候[ui->]但是使用VS+Qt来,发来默认的是变量类型,使用的时候[ui.] 统一:为了统一我把后者声明改为前者 问题:在mai ...

  9. Nginx反向代理缓冲区优化

    内容目录 proxy_buffering proxy_buffer_size proxy_buffers proxy_busy_buffers_size proxy_max_temp_file_siz ...

  10. [bug report] 当springboot报错 找不到类 javax.xml.bind.JAXBException

    <!--以下四个依赖均是javax.xml.bind.JAXBException的依赖 在java6/7/8默认支持,java9不再支持--> <dependency> < ...