注入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的更多相关文章

  1. 十八、springboot中hibernate配置sessionFactory访问数据库

    前提 在yml或properties文件中配置数据库与数据库连接池 Hibernate配置 几种方式: 方式一: @Configuration public class HibernateConfig ...

  2. Springboot 之 Hibernate自动建表(Mysql)

    Springboot 之 Hibernate自动建表(Mysql) 2016年10月21日 10:39:44 阅读数:8180 本文章来自[知识林] 引入Maven依赖包 <dependency ...

  3. Spring第12篇—— Spring对Hibernate的SessionFactory的集成功能

    由于Spring和Hibernate处于不同的层次,Spring关心的是业务逻辑之间的组合关系,Spring提供了对他们的强大的管理能力, 而Hibernate完成了OR的映射,使开发人员不用再去关心 ...

  4. JPA EntityManagerFactory Vs Hibernate’s SessionFactory

    JPA使用EntityManagerFactory开闭session,而Hibernate使用SessionFactory开闭session.两者区别: 1. EntityManagerFactory ...

  5. springboot使用hibernate validator校验,Bean Validation校验

    第一个地址:springboot使用hibernate validator校验,Bean Validation校验

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

    8.8.2 管理Hibernate的SessionFactory 当通过Hibernate进行持久层访问时,必须先获得SessionFactory对象,它是单个数据库映射关系编译后的内存镜像.在大部分 ...

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

    这里介绍springboot 获取控制器参数有四种方式 1.无注解下获取参数 2.使用@RequestParam获取参数 3.传递数组 4.通过URL传递参数 无注解下获取参数无注解下获取参数,需要控 ...

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

    springboot获取当前项目路径的地址 System.getProperty("user.dir") 输出目录:  G:\outshine\wangsoso //获取class ...

  9. SpringBoot获取http请求参数的方法

    SpringBoot获取http请求参数的方法 原文:https://www.cnblogs.com/zhanglijun/p/9403483.html 有七种Java后台获取前端传来参数的方法,稍微 ...

随机推荐

  1. java基础之类与对象2

    这是上一篇文章的源码................ public class Main 是我创建的一个主类 我的基本操作就在这个类里面完成,public static void main(Strin ...

  2. 跟着刚哥梳理java知识点——数组(七)

    数组:数组是多个相同类型数据类型的集合,实现对这些数据的统一管理. 元素:数组中的元素可以是任何数据类型,包括基本数据类型和引用类型. 特点:属于引用类型,数组型数据是对象object,数组中的每个元 ...

  3. ## Python中的Package和Jupyter中import包问题

    前言 关于python包的一些知识 Java中的package概念 我们知道在java中的import package概念, java中的包就是一个目录,里面包含着子目录,子目录套着子目录,当需要引入 ...

  4. html 初始化

    //  html 初始化 <!DOCTYPE html><html lang="en"><head> <meta charset=&quo ...

  5. tmux简要介绍

    什么是tmux tmux全称terminal multiplexer,是一个终端复用软件.它可以帮助我们方便地管理多个终端会话. 下面介绍tmux中涉及到的一些名词 window 窗口 pane 窗格 ...

  6. Virtualbox mac版centos7.2 安装共享文件夹

    因为用的是mac本,在自己电脑上用virtualbox安装了centos7.2 虚拟机,为了实现与本机交换文件,需要用到贡享文件夹功能. 网上搜的时候多是windows版的,所以自己写一个mac版的. ...

  7. stl_泛型的一些基本

    一.泛型编程的一些基本 : 1.泛型程序设计: 1.1.程序尽可能的通用. 1.2.将算法从数据结构中抽象出来,成为通用. 1.3.模板并不是单纯的函数,不能凭空的生成,是用来产生代码的代码,可以减少 ...

  8. MYSQL不能从远程连接的解决方法

    为了在其它电脑上能用root用户登录,需进行以下动作: 首先在mysql服务器端打开mysql 1. mark>mysql -u root -p //输入密码,进入MySQL服务器 2.mysq ...

  9. Java基础语法(一)<注释,关键字,常量,变量,数据类型,标识符,数据类型转换>

    从今天开始,记录学习Java的过程.要学习Java首先得有环境,至于环境的安装我就不说了,百度有很多教程,比如:http://jingyan.baidu.com/article/20095761904 ...

  10. myeclipse中文乱码

    解决myeclipse中乱码问题. 改变整个Eclipse工作空间的编码格式 window->preferences->General->workspace中 把text file ...