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. 使用Vuejs编写单js组件

    1.引用方式 我们使用Vue进行普通页面开发却不使用webpack等技术时,定义组件可以只依赖单js文件进行开发 然后像正常引用js文件那样进行引用 <script src="../C ...

  2. 打开 EXCEL时出现RUN-TIME ERROR“91”,怎么解决?

    方法一: 开始—程序—microsoft—打开“windows office 2007 简易设置”,把“使用 office 03样式经典菜单”前的“√”去掉就OK了 方法二: 1. 打开注册表编辑器. ...

  3. [one day one question] 有没有免费接收短信验证用于注册的软件或者平台?

    问题描述: 想要批量注册撸羊毛,有手机短信验证码验证,这怎么破? 解决方案: 免费的肯定没有的,不过"一条短信收费一毛钱"倒是有一个,本人是亲自试用过,该平台收不到短信验证码不收费 ...

  4. composer方式安装thinkphp5,安装smarty

    转载地址: https://my.oschina.net/inuxor/blog/750717 composer 是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所 ...

  5. CentOS7.2 安装nginx-1.10.3

    nginx-1.10.3 下载nginx 检查是否安装了依赖库: [root@localhost ~]# rpm -q gcc gcc-4.8.5-11.el7.x86_64 [root@localh ...

  6. BZOj 墨墨的等式(转化为最短路)题解

    题意:中文题意不解释... 思路:这道题居然可以转化为最短路orz,要等式有非负整数解,我们可以转化一下:每个ai不限数量,问你能用ai数组拼出多少个Bmin~Bmax范围内的数,有点像完全背包的感觉 ...

  7. 【转载】hibernate缓存机制

    一级缓存(session级别) 我们来看看hibernate提供的一级缓存 //此时会发出一条sql,将所有学生全部查询出来,并放到session的一级缓存当中.当再次查询学生信息时,会首先去缓存中看 ...

  8. springboot2 统一返回结果

    统一返回结果是说,不用在controller层,new一个对象,或用工厂创建这个对象,再返回这个对象,而是这个Action该返回什么就返回什么, 我们再通过mvc的流程,再对返回对象做进一步的封装,以 ...

  9. js urlencode

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. [osgearth]osgearth原数据获取途径

    Help us add useful sources of Free data to this list. Raster data ReadyMap.org - Free 15m imagery, e ...