SpringBoot整合Hibernate


編寫配置文件

 1 <!--配置讀取properties文件-->
 2 <context:property-placeholder location="classpath:jdbc.properties"/>
 3 <!--配置c3p0數據庫連接池-->
 4 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
 5     <property name="jdbcUrl" value="${jdbc.url}" />
 6     <property name="driverClass" value="${jdbc.driver.class}" />
 7     <property name="user" value="${jdbc.username}" />
 8     <property name="password" value="${jdbc.password}" />
 9 </bean>
10 <!--配置Hibernate的SessionFactory-->
11 <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
12     <property name="dataSource" ref="dataSource" />
13     <!--hibernateProperties屬性:顯示sql語句,開啟正向工程等等-->
14     <property name="hibernateProperties">
15         <props>
16             <!--顯示當前執行的sql語句-->
17             <prop key="hibernate.show_sql">true</prop>
18             <!--開啟正向工程-->
19             <prop key="hibernate.hbm2ddl.auto">update</prop>
20         </props>
21     </property>
22     <!--掃面實體所在的包-->
23     <property name="packageToScan">
24         <list>
25             <value>io.guangsoft.pojo</value>
26         </list>
27     </property>
28 </bean>
29 <!--配置hibernate事物管理器-->
30 <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
31     <property name="sessionFactory" ref="sessionFactory" />
32 </bean>
33 <!--配置開啟注解事物處理-->
34 <tx:annotation-driven transaction-manager="transactionManager" />
35 <!--配置springIOC的注解掃描-->
36 <context:component-scan base-package="io.guangsoft" />
37 <!--配置HibernateTemplate對象-->
38 <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
39     <property name="sessionFactory" ref="sessionFactory" />
40 </bean>

編寫實體類

 1 @Entity  2 @Table(name="t_user")  3 public class User implements Serializable {  4  @Id  5     @GeneratedValue(strategy=GenerationType.IDENTITY)  6     @Column(name="id")  7     private Integer id;  8     @Column(name="username")  9     private String username; 10     //...set、get方法
11 }

dao層編寫

 1 @Repository  2 public class UserDaoImpl implements UserDao {  3  @Autowired  4     private HibernateTemplate hibernateTemplate;  5  @Override  6     public void insertUser(User user) {  7         this.hibernateTemplate.save(user);  8  }  9  @Override 10     public void updateUser(User user) { 11         this.hibernateTemplate.update(user); 12  } 13  @Override 14     public void deleteUser(User user) { 15         this.hibernateTemplate.delect(user); 16  } 17  @Override 18     public User selectUserById(Integer id) { 19         return this.hibernateTemplate.get(User.class, id); 20  } 21 }

測試代碼

 1 @RunWith(SpringJUnit4ClassRunner.class)  2 @ContextConfiguration("classpath:applicationContext.xml")  3 public class UserDaoImplTest {  4  @Autowired  5     private UserDao userDao;  6  @Test  7     @Transactional//測試類對事物提交方式默認是回滾
 8     @Rollback(false)//取消自動回滾
 9     public void testInsertUser() { 10         User user = new User(); 11         user.setUsername("呵呵"); 12         this.userDao.insertUser(user); 13  } 14  @Test 15  @Transactional 16  @Rollback 17     public void testUpdateUser() { 18         //...
19  } 20 }

使用HQL,Hibernate Query Language,HQL的語法就是將原來sql語句中的字段名稱換成對象與屬性的名稱。

1 @Override 2 public List<User> selectUserByName(String username) { 3     //getCurrentSession:當前session必須要有事物邊界,且只能處理唯一的一個事務,當事務提交或者回滾后session自動失效 4     //openSession:每次都會打開一個新的session,加入每次使用多次,則獲得的是不同session對象,使用完畢后我們需要手動調用close方法關閉session。
5     Session session = this.hibernateTemplate.getSessionFactory().getCurrentSession(); 6     Query queryTemp = session.createQuery("from User where username = :uname"); 7     Query query = queryTemp.setString("uname", username); 8     return queryTemp.list(); 9 }

QBC查詢:query by criteria

1 public List<User> selectUserByNameUseCriteria(String username) { 2     Session session = this.hibernateTeamplate.getSessionFactory().getCurrentSession(); 3     Criteria criteria = session.createCriteria(User.class); 4     criteria.add(Restrictions.eq("username", username)); 5     return criteria.list(); 6 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM