springboot 获取hibernate 的 SessionFactory

注入bean

package cn.xiaojf;

import cn.xiaojf.today.data.rdb.repository.RdbCommonRepositoryImpl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.vendor.HibernateJpaSessionFactoryBean;

@SpringBootApplication
@EnableJpaRepositories(repositoryBaseClass = RdbCommonRepositoryImpl.class)
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public HibernateJpaSessionFactoryBean sessionFactory() {
        return new HibernateJpaSessionFactoryBean();
    }
}

application.properties 中配置

spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto=none
spring.jpa.database=mysql
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext

直接在代码中注入

@Autowired
private SessionFactory sessionFactory;

例子

package cn.xiaojf.today.base.service.impl;

import cn.xiaojf.today.base.constant.SystemConstant;import cn.xiaojf.today.base.service.EntityService;import cn.xiaojf.today.base.util.Asserts;import cn.xiaojf.today.base.util.BeanUtil;import cn.xiaojf.today.base.util.DaoUtil;import cn.xiaojf.today.base.util.StringUtil;import cn.xiaojf.today.data.rdb.entity.AbstractEntity;import cn.xiaojf.today.data.rdb.entity.BaseEntity;import cn.xiaojf.today.data.rdb.util.EntityUtil;import org.apache.commons.beanutils.BeanUtils;import org.apache.commons.lang.StringUtils;import org.hibernate.Criteria;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.criterion.Example;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;

import javax.validation.constraints.NotNull;import java.io.Serializable;import java.lang.reflect.InvocationTargetException;import java.util.ArrayList;import java.util.List;

/** * @author xiaojf 2017/2/24 11:06. */@Service@Transactionalpublic class EntityServiceImpl implements EntityService {    @Autowired    private SessionFactory sessionFactory;

@Override    public <T extends BaseEntity> boolean checkFieldRepeat(T entity, String fieldName) throws Exception{        String id = StringUtil.toString(BeanUtils.getProperty(entity, "id"));        Serializable filedValue = StringUtil.toString(BeanUtils.getProperty(entity, fieldName));

BaseEntity baseEntity = entity.getClass().newInstance();        BeanUtils.setProperty(baseEntity, fieldName, filedValue);        List list = this.findByExample(baseEntity);

if (list != null && list.size() > 0) {            Object o = list.get(0);            String existId = BeanUtils.getProperty(o, "id");            if (existId.equals(id)) {                return false;            } else {                return true;            }        }        return false;    }

@Override    public <T extends BaseEntity> void saveOrUpdate(T entity) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {        String id = BeanUtils.getProperty(entity, SystemConstant.TABLE_ID);        Session session = this.getSession();        if(! StringUtils.isBlank(id)) {//更新操作            T origion = this.get(entity.getClass(),id);            BeanUtil.copyPropertiesIgnoreNull(entity, origion);            DaoUtil.generateDefaultField(origion); //追加部分字段默认值            session.update(origion);        } else { //新增            DaoUtil.generateDefaultField(entity); //追加部分字段默认值            session.save(entity);        }    }

@Override    public <T extends BaseEntity> void saveOrUpdate(List<T> list) throws Exception {        Asserts.notNull(list);        for (T t : list) {            getSession().saveOrUpdate(t);        }    }

@Override    public void enable(Class clazz, List<String> ids) throws Exception {        List<BaseEntity> list = get(clazz, ids);        for (BaseEntity t : list) {            BeanUtils.setProperty(t, "status", AbstractEntity.STATUS_ENABLED);        }

saveOrUpdate(list);    }

@Override    public void disable(Class clazz, List<String> ids) throws Exception {        List<BaseEntity> list = get(clazz, ids);        for (BaseEntity t : list) {            BeanUtils.setProperty(t, SystemConstant.TABLE_STATUS, AbstractEntity.STATUS_DISABLED);        }

saveOrUpdate(list);    }

@Override    public <T extends BaseEntity> T get(Class clazz ,Serializable id) {        if (id == null) {            return null;        }

return (T) this.getSession().get(clazz, id);    }

@Override    public <T extends BaseEntity> List<T> get(Class clazz, List<String> ids) {        Asserts.notNull(ids, "主键不能为空");        List<T> list = new ArrayList<T>();        for (String id : ids) {            T t = get(clazz, id);            list.add(t);        }        return list;    }

@Override    public void logDelById(Class clazz, String id) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {        Asserts.notNull(id);        Asserts.notNull(clazz);        BaseEntity entity = get(clazz, StringUtil.toString(id));        if (entity != null) {            BeanUtils.setProperty(entity, SystemConstant.TABLE_STATUS, AbstractEntity.STATUS_LOGDEL);        }        this.saveOrUpdate(entity);    }

@Override    public void logDelById(Class clazz, List<String> ids) throws Exception {        List<BaseEntity> list = get(clazz, ids);        for (BaseEntity t : list) {            BeanUtils.setProperty(t, SystemConstant.TABLE_STATUS, AbstractEntity.STATUS_LOGDEL);        }

saveOrUpdate(list);    }

private <T extends BaseEntity> List<T> findByExample(@NotNull T example) {        Session session = this.sessionFactory.openSession();        Criteria criteria = session.createCriteria(example.getClass());

if (example != null) {            criteria.add(Example.create(example));        }        List list = criteria.list();        session.close();        return list;    }

/**     * 获取Session     *     * @return Session     * @author xiaojf  2015-5-9 8:35:08     */    private Session getSession() {        return this.sessionFactory.getCurrentSession();    }}
时间: 2024-12-25 09:38:40

springboot 获取hibernate 的 SessionFactory的相关文章

spring配置hibernate的sessionFactory的几种方法

分类: JAVA Spring Hibernate 2013-01-27 20:47  1851人阅读  评论(0)  收藏  举报 spring配置hibernate的sessionFactory 之前用spring2+hibernate3+struts2开发了一个彩信发布系统,由于第一次使用此架构,造成applicationContext.xml中的配置非常冗长,而且经常因为更改一个小配置项(例:数据库ip.用户名.密码等)将此文件作修改,这及不利于项目维护,万一粗心造成其他地方变动,会对本

spring_封装hibernate的sessionFactory

spring的hibernateTemplate 封装了hibernate的SessionFactory,封装类HibernateDaoSupport,可进行类似session的诸多的对数据库的操作,也可以获取到封装之后的 hibernate的sessionFactory 得到hibernate的session对象,用hibernate的操作对数据库操作.在项目里都使用spring的封装之后的hibernateTemplate进行数据库操作. spring的封装的事务管理,线程绑定,都比hibe

8 -- 深入使用Spring -- 8...2 管理Hibernate的SessionFactory

8.8.2 管理Hibernate的SessionFactory 当通过Hibernate进行持久层访问时,必须先获得SessionFactory对象,它是单个数据库映射关系编译后的内存镜像.在大部分情况下,一个Java EE应用对应一个数据库,即对应一个SessionFactory对象. Spring 的IoC容器不仅能以声明式的方式配置SessionFactory实例,也可充分利用IoC容器的作用,为SessionFactory注入数据源引用. XML : Spring配置文件中配置Hibe

浅谈hibernate的sessionFactory和session

首先,讲一个悲伤的故事... 有一天,一个以为自己javaEE很叼的程序员,在经历了好久不写java代码的情况下,去参加阿里巴巴的java面试,然后,在被问到一个很简单的问题的时候,结果没有回答好.那么接下来先说说这个问题吧... 问:hibernate的sessionfactory是干嘛的?session又是干嘛的呢? 那么,你会吗?可以讲清楚么?如果答案是会,可以,那么你就不用往下看了....如果会还是想往下看,那么, 你就看呗. 在回答这个问题之前,先来看看一些概念. 一.hibernat

hibernate +spring sessionfactory 配置

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!--<property name="

springboot 获取控制器参数的几种方式

这里介绍springboot 获取控制器参数有四种方式 1.无注解下获取参数 2.使用@RequestParam获取参数 3.传递数组 4.通过URL传递参数 无注解下获取参数无注解下获取参数,需要控制器层参数与HTTP请求栏参数名称一致,这样后台就可以获取到请求栏的参数. /** * 无注解获取参数时,参数名称和HTTP请求参数必须一致 * @param name String 姓名 * @param age int 年龄 * @param score double 分数 * @return

springboot获取项目的绝对路径和根目录

springboot获取当前项目路径的地址 System.getProperty("user.dir") 输出目录:  G:\outshine\wangsoso //获取classes目录绝对路径 String path = ClassUtils.getDefaultClassLoader().getResource("").getPath(); String path = ResourceUtils.getURL("classpath:").g

hibernate 4.3.11 获取会话工厂|sessionFactory

SessionFactory sf=null; Configuration cfg=new Configuration().configure(); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build(); sf = cfg.configure().buildSessionFactory(serviceRegistry);

hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别

1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会. 2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭 这里getCurrentSession本地事务(本地事务:jdbc)时 要在配置文件里进行如下设置 * 如果使用的是本地事务(jdbc事务) <property name="hibernate.current_session_context_class"