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后台获取前端传来参数的方法,稍微 ...
随机推荐
- 1137: 零起点学算法44——多组测试数据输出II
1137: 零起点学算法44--多组测试数据输出II Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: ...
- Java事物基础总结
1.什么是事物? 事物是逻辑上的的一种操作,这个操作过程中的每一个元素要么全部成功,要么全部失败.例如,银行转账过程视为一个事物,转出过程和转入过程要求全部成功或全部失败,通过提交事物或者回滚事物实现 ...
- Linux查看网络端口
简单的总结一下前段时间学习Linux的成果 查看 TCP 22 端口是否打开1.列出所有端口:[root@Demon proc]# netstat -ntlpActive Internet conne ...
- .Net MVC4笔记之Razor视图引擎的基础语法
Razor视图引擎的基础语法: 1.“_”开头的cshtml文档将不能在服务器上访问,和asp.net中的config文档差不多. 2.Razor语法以@开头,以@{}进行包裹. 3.语法使用: 注释 ...
- css伪类的组合用法
利用伪类组合,可以用css代替js以达到目的,少些一下js .textarea:empty:before { display: block; content: '请输入'; color: #ababa ...
- 图解WebGL&Three.js工作原理
“哥,你又来啦?”“是啊,我随便逛逛.”“别介啊……给我20分钟,成不?”“5分钟吧,我很忙的.”“不行,20分钟,不然我真很难跟你讲清楚.”“好吧……”“行,那进来吧,咱好好聊聊” 一.我们讲什么? ...
- jdbc ,jdbcTemplate,MyBatis,Hibernate比较与分析
JDBC 1:jdbc(Java Data Base Connection 数据库连接)是一种用于执行sql语句的API,其中使用jdbc连接时需要的,Connection,Statement,Res ...
- salesforce零基础学习(七十一)级联表DML操作
曾经做项目没有考虑那么多,对于级联表操作都是正常的一步一步操作,没有考虑过失败情况,最近项目遇见了失败的情况,导致碰到了相应的情况,特此mark一下,免得后期继续踩坑. 需求如下:新建页面,页面中包含 ...
- 基于Struts2的SpringMVC入门
1.SpringMVC概述 (1)SpringMVC为表现层提供基础的基于MVC设计理念的优秀Web框架, (2)SpringMVC通过一套mvc的注解,让POJO成为处理请求的控制器,而无需任何接口 ...
- 分针网—IT教育:调皮的JavaScript
JavaScript是一门有趣的语言,不仅有趣而且调皮,不同的内核的浏览器在解析的时候表现会有些差异,今天主要是抛砖引玉,和大家一起讨论一些在实际开发中比较常见但同时可能并没有过于在意的JavaScr ...