spring与hibernate注解及XML方式集成
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方式集成的更多相关文章
- Spring 的 Bean 管理(XML 方式)
Spring 的 Bean 管理(XML 方式) 1. 三种实例化 Bean 的方式 使用类构造器实例化(默认无参数) 使用静态工厂方法实例化(简单工厂模式) 使用实例工厂方法实例化(工厂方法模式) ...
- 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 ...
- Spring整合Hibernate的两种方式
在使用spring注解整合hibernate时出现"org.hibernate.MappingException: Unknown entity: com.ssh.entry.Product ...
- Spring+MyBatis纯注解零XML整合(4)
不得不说,利用XML作为配置文件是一个非常好的想法,它可以轻松地实现配置集中化,而且修改之后无需再次编译.然而,由于大多数情况下开发者基本都会拿到程序的源码,加之对于各种XML配置文件一般情况下也只有 ...
- Spring使用AspectJ注解和XML配置实现AOP
本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP 下面是使用AspectJ注解实现AOP的Java Project首先是位于classpath下的applicationC ...
- Spring源码 04 IOC XML方式
参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...
- spring注解和xml方式区别详解
一.spring常规方式. 在使用注释配置之前,先来回顾一下传统上是如何配置 Bean 并完成 Bean 之间依赖关系的建立.下面是 3 个类,它们分别是 Office.Car 和 Boss,这 3 ...
- Spring深入浅出(三)XML方式以及注解的方式操作IOC
在日常的开发过程中,我们把程序分为3层:Controller层,Service层,DAO层.Controller类似于Servlet,也就是MVC中的控制层. 调用的顺序是: Controller层调 ...
- Spring 的IOC容器之XML方式
1. Spring 入门 1.1 概述 Spring 是一个分层的 JavaEE 轻量级开源框架; Spring 的核心是控制反转(IOC)和面向切面(AOP); 1.2 特点 方便解耦,简化开发; ...
随机推荐
- TED #05# How we can face the future without fear, together
Rabbi Lord Jonathan Sacks: How we can face the future without fear, together 1. what was it like bei ...
- linux及安全第七周总结——20135227黄晓妍
实验部分 首先clone最新的menu 我们可以看到,test.c里多了一个exec的功能,它的代码和fork基本一致,多了一项加载hello rootfs也有一些变化 执行一下exec 让我们启动一 ...
- 2018-2019-1 20189215《Linux内核原理与分析》第五周作业
<庖丁解牛>第四章书本知识总结 系统调用的三层机制 API(应用程序编程接口) 中断向量(系统调用处理入口) 服务程序(系统调用内核处理系统) 计算机的硬件资源是有限的,为了减少有限资源的 ...
- 2018-2019-1 20189215《Linux内核原理与分析》第二周作业
本周学习了<庖丁解牛>第1章,以及<Linux内核设计与实现>第1.2.18章.通过视频和实验,学会了反汇编一个简单的C程序,也学习了Linux内核调试的一些小技巧和print ...
- firefox_flash_install_on_kali
手动安装firefox的flash的步骤 1> 下载flash的tar.gz安装包 firefox http://get2.adobe.com/cn/flashplayer/otherversi ...
- godaddy之ssl申请
第一步 执行下面命令生成csr和key文件 openssl req -new -newkey rsa: -nodes -keyout trips.com.key -out trips.com.csr ...
- mac上 sublime的配置,支持c++11且支持输入
首先下载mac版本的 sublimetext3 下载链接: https://www.sublimetext.com/3 接着可以按照其他博客的方法来安装一些插件,便于我们的工作和学习 安装sublim ...
- LeetCode——Next Permutation
1. Question Implement next permutation, which rearranges numbers into the lexicographically next gre ...
- python 判断是否是元音字母
def is_vowel(char): all_vowels = 'aeiou' return char in all_vowels print(is_vowel('c')) print(is_vow ...
- C# Word转PDF/HTML/XML/XPS/SVG/EMF/EPUB/TIFF
一款有着强大的文档转换功能的工具,无论何时何地都会是现代办公环境极为需要的.在本篇文章中,将介绍关于Word文档的转换功能(Word转XPS/SVG/EMF/EPUB/TIFF).希望方法中的代码能为 ...