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
@Transactional
public 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();
}
}
springboot 获取hibernate 的 SessionFactory的更多相关文章
- 十八、springboot中hibernate配置sessionFactory访问数据库
前提 在yml或properties文件中配置数据库与数据库连接池 Hibernate配置 几种方式: 方式一: @Configuration public class HibernateConfig ...
- Springboot 之 Hibernate自动建表(Mysql)
Springboot 之 Hibernate自动建表(Mysql) 2016年10月21日 10:39:44 阅读数:8180 本文章来自[知识林] 引入Maven依赖包 <dependency ...
- Spring第12篇—— Spring对Hibernate的SessionFactory的集成功能
由于Spring和Hibernate处于不同的层次,Spring关心的是业务逻辑之间的组合关系,Spring提供了对他们的强大的管理能力, 而Hibernate完成了OR的映射,使开发人员不用再去关心 ...
- JPA EntityManagerFactory Vs Hibernate’s SessionFactory
JPA使用EntityManagerFactory开闭session,而Hibernate使用SessionFactory开闭session.两者区别: 1. EntityManagerFactory ...
- springboot使用hibernate validator校验,Bean Validation校验
第一个地址:springboot使用hibernate validator校验,Bean Validation校验
- 8 -- 深入使用Spring -- 8...2 管理Hibernate的SessionFactory
8.8.2 管理Hibernate的SessionFactory 当通过Hibernate进行持久层访问时,必须先获得SessionFactory对象,它是单个数据库映射关系编译后的内存镜像.在大部分 ...
- springboot 获取控制器参数的几种方式
这里介绍springboot 获取控制器参数有四种方式 1.无注解下获取参数 2.使用@RequestParam获取参数 3.传递数组 4.通过URL传递参数 无注解下获取参数无注解下获取参数,需要控 ...
- springboot获取项目的绝对路径和根目录
springboot获取当前项目路径的地址 System.getProperty("user.dir") 输出目录: G:\outshine\wangsoso //获取class ...
- SpringBoot获取http请求参数的方法
SpringBoot获取http请求参数的方法 原文:https://www.cnblogs.com/zhanglijun/p/9403483.html 有七种Java后台获取前端传来参数的方法,稍微 ...
随机推荐
- ubuntu中文字符集格式转换
- z-index用法总结
一.定义: z-index 只适用于元素有定位的情况,表示层级 数值越大 层级越高 展示的位置越靠前. 二.用法: 1.同级关系: z-index值较大的元素将叠加在z-index值较小的元素之上 ( ...
- nodejs将JSON字符串转化为JSON对象
如何将JSON字符串转化为JSON对象? JSON.parse(str) JSON是javascript的一个内置对象,提供了转换JSON对象与字符串互相转换的方法: 问题来了,道理我都懂 ...
- 免费给自己的网站加 HTTPS
简介 本文是通过 Let's Encrypt 提供的免费证书服务,实现让自己的网站加上 HTTPS.我的网站 -- hellogithub,就是通过这种方式实现的 HTTPS,效果如下: Let's ...
- Linux常用命令快查
一.读取配置文件中某一个变量的值 假如有一个配置文件dubbo.properties,需要读取dubbo.application.name的值: dubbo.application.name=book ...
- jDialects:一个从Hibernate抽取的支持70多种数据库方言的原生SQL分页工具
jDialects(https://git.oschina.net/drinkjava2/jdialects) 是一个收集了大多数已知数据库方言的Java小项目,通常可用来创建分页SQL和建表DDL语 ...
- 使用 PHPStorm + Xdebug 实现断点调试(二)
一.配置 Xdebug 配置 Xdebug 相关参数,在 php.ini 文件中新增如下配置,如果没安装的,请参考<PHP 安装 Xdebug扩展>: [xdebug] xdebug.re ...
- 【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home
https://vjudge.net/contest/66569#problem/A http://blog.csdn.net/wangjian8006/article/details/7871889 ...
- 观察者模式(Observer)发布、订阅模式
观察者模式定义了对象之间一对多的依赖关系,这样一来,当一个对象改变时,他的所有依赖者都会收到通知并自动更新. 模式中的角色 1.抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里 ...
- 生产环境中使用Docker Swarm的一些建议
译者按: 实践中会发现,生产环境中使用单个Docker节点是远远不够的,搭建Docker集群势在必行.然而,面对Kubernetes, Mesos以及Swarm等众多容器集群系统,我们该如何选择呢?它 ...