springboot使用hibernate的SessionFactory实现BaseDao

来源:互联网 发布:windows账户有什么用 编辑:程序博客网 时间:2024/05/29 23:24

使用场景:

在简单的大表单CRUD里面,并不一定需要非常灵活的sql或者hql,在非常多的表单和一堆字段面前,灵活反而成了积累。

Hibernate+泛型对象存储,反而成了简单粗暴,最快的解决方式。那么springboot/默认用的是data-jap,而data-Jap用的是EntityManagerFactory。

这让以前的BaseDao不能用了么?随后查了下API,发现了

HibernateJpaSessionFactoryBean


对就是他,下面上代码:
首先是yml
jpa:  hibernate:    ddl-auto: none  show-sql: true  database-platform: org.hibernate.dialect.Oracle10gDialect  database: oracle  properties:    hibernate:      current_session_context_class: org.springframework.orm.hibernate4.SpringSessionContext
然后是App启动类里面需要注入上面的那个bean
@Beanpublic HibernateJpaSessionFactoryBean sessionFactory() {   return new HibernateJpaSessionFactoryBean();}
最后也是比较重要的一点,以前SpringMVC里的环境里面配置事务,是用xml配置的,boot里面这么干净的代码
,如果再去配置XML,这是一个强迫症很难接受的。
@Transactional  //这里直接简单粗暴加上spring的事务管理@Repository("aBaseDao")public class ABaseDaoImpl implements ABaseDao {
//your implemention 
}
//下面是测试代码
import com.alibaba.fastjson.JSON;import com.xyz.dao.ABaseDao;import com.xyz.model.SysLogs;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import javax.annotation.Resource;import java.sql.Timestamp;import java.util.List;/** * Created by dell on 2017/10/6. */@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTestpublic class TestDao {    @Resource    private ABaseDao aBaseDao;    @Test    public void test_database(){        String sql = "select sysdate from dual";        Timestamp result = (Timestamp) aBaseDao.findBySQL(sql).uniqueResult();        System.out.println(result);        List<SysLogs> list = aBaseDao.findAll(SysLogs.class);        System.out.println(JSON.toJSONString(list));    }}
//Hibernate: select sysdate from dual
//2017-10-06 22:51:21.0
//Hibernate: select syslogs0_.id as id1_0_, syslogs0_.logdate as logdate2_0_, syslogs0_.longmsg as longmsg3_0_, syslogs0_.message as message4_0_, syslogs0_.note as note5_0_, syslogs0_.part_id as part_id6_0_, syslogs0_.type as type7_0_, syslogs0_.xzbm as xzbm8_0_ from sys_logs syslogs0_
//[{"id":1,"logdate":1507171170000,"message":"123123123"},{"id":2,"message":"ceshi"}]

原创粉丝点击