Spring boot中Session Factory的使用
来源:互联网 发布:nba2konline张伯伦数据 编辑:程序博客网 时间:2024/05/23 21:56
最近在搭建Spring Boot项目的时候,因为项目较大的原因,由于直接继承spring boot自带的jpa会在Dao层写很多sql语句,且不能通用,于是抽象了一个底层方法,方便各层的继承。下面是抽象的底层类具体实现方法的部分代码。
BaseDaoImpl.java
@Transactionalpublic class BaseDaoImpl<T> implements IBaseDao<T> {private Class<T> entityClass;@Resourceprivate SessionFactory sessionFactory;@SuppressWarnings("unchecked")// 告诉编译器忽略指定的警告,不用在编译完成后出现警告信息// 公共类public BaseDaoImpl() {ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();entityClass = (Class<T>) type.getActualTypeArguments()[0];}//Sessionpublic Session getCurrentSession() {Session session = null;System.out.println("这是baseDao的session");try {session = sessionFactory.getCurrentSession();} catch (Exception e) {// TODO: handle exceptionSystem.out.println(e);}return session;}@Overridepublic void save(T entity) {// TODO Auto-generated method stubSystem.out.println(entity);getCurrentSession().save(entity);}@SuppressWarnings("unchecked")@Overridepublic T get(Serializable id) {// TODO Auto-generated method stubSystem.out.println(entityClass);return (T) getCurrentSession().get(entityClass, id);}
一定要在该方法前面加 @Transactional
否则会报
否则会报
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
这是由于未开启Session Factroy事务注解。
下面我们来配置一下:
1.开启事物注解
@SpringBootApplication@EnableTransactionManagement //开启事物注解public class MindMapApplication {public static void main(String[] args) {SpringApplication.run(MindMapApplication.class, args);}}
2.配置一下SessionFactory
@Aspect@Configurationpublic class TxAdviceInterceptor {// 超时时间 单位秒private static final int TX_METHOD_TIMEOUT = 5; private static final String AOP_POINTCUT_EXPRESSION = "execution (* com.hwj..service.*.*(..))"; @Autowired private PlatformTransactionManager transactionManager; @Bean public TransactionInterceptor txAdvice() { NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource(); // 只读事务,不做更新操作 RuleBasedTransactionAttribute readOnlyTx = new RuleBasedTransactionAttribute(); readOnlyTx.setReadOnly(true); readOnlyTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_NOT_SUPPORTED ); // 当前存在事务就使用当前事务,当前不存在事务就创建一个新的事务 RuleBasedTransactionAttribute requiredTx = new RuleBasedTransactionAttribute(); requiredTx.setRollbackRules( Collections.singletonList(new RollbackRuleAttribute(Exception.class))); requiredTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); requiredTx.setTimeout(TX_METHOD_TIMEOUT); Map<String, TransactionAttribute> txMap = new HashMap<>(); txMap.put("add*", requiredTx); txMap.put("save*", requiredTx); txMap.put("insert*", requiredTx); txMap.put("update*", requiredTx); txMap.put("delete*", requiredTx); txMap.put("get*", readOnlyTx); txMap.put("query*", readOnlyTx); source.setNameMap( txMap ); TransactionInterceptor txAdvice = new TransactionInterceptor(transactionManager, source); return txAdvice; } @Bean public Advisor txAdviceAdvisor() { AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut(); pointcut.setExpression(AOP_POINTCUT_EXPRESSION); return new DefaultPointcutAdvisor(pointcut, txAdvice()); } @Bean //一定要注入这个(划重点) public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf){ return hemf.getSessionFactory(); } }
基本的配置已经好了,现在就可以在spring boot里用hibernate中的Session Factory了。
调用的时候
@Resourceprivate SessionFactory sessionFactory;@Overridepublic Session getCurrentSession() {Session session = null;try {session = this.sessionFactory.getCurrentSession(); }catch (Exception e) {System.out.println(e); }System.out.println(session);return session;}
阅读全文
1 0
- Spring boot中Session Factory的使用
- spring boot session redis的使用
- [spring-boot] 使用spring session
- Spring中factory-method的使用
- Spring中factory-method的使用
- spring boot(三):Spring Boot中Redis的使用
- spring boot(三):Spring Boot中Redis的使用
- Spring Boot系列(三):Spring Boot中Redis的使用
- spring boot(三):Spring Boot中Redis的使用
- spring boot(三):Spring Boot中Redis的使用
- 转载:Spring Boot (十一):Spring boot中mongodb的使用
- Spring Boot中使用自定义的properties
- 11. Spring Boot中Redis的使用
- spring boot中定时任务的使用
- Spring boot中mongodb的使用
- Spring Boot中MyBatis的使用
- spring boot 中redis的使用
- Spring boot 中缓存的使用
- python程序员专用注释:佛主保佑,永无BUG
- 部落给你分享10个大数据可视化工具
- 挺有用的清除缓存bat脚本
- [11.7]模拟
- IEEE 802.15.4 CSMA-CA算法翻译(IEEE 802.15.4-2006 7.5.1.4 CSMA-CA algorithm)
- Spring boot中Session Factory的使用
- MVC布局页面嵌入Iframe子页面,显示不完整
- 栅栏染色
- svn报错:Cannot negotiate authentication mechanism
- Python Kivy 中文教程:安装(Windows)
- WebStorm配置使用SVN详细过程
- 代码开发中常用的英语---更新中
- 《Metasploit 魔鬼训练营》06 客户端渗透攻击
- POJ 1003 Hangover