1. 程式人生 > >springboot使用hibernate的SessionFactory實現BaseDao

springboot使用hibernate的SessionFactory實現BaseDao

使用場景:

在簡單的大表單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
@Bean
public 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) @SpringBootTest public 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"}]