发表于: 2017-04-25 22:38:21
1 1539
今天完成的事情:
1.学习 Spring 中的 Hibernate
2.学习 Spring 事务处理
明天计划的事情:
1.学习 SQLServer 如何添加约束
2.继续学习 Spring 的事务处理
遇到的问题:
1.我还是不太明白 Spring 的事务处理到底是什么?Hibernate 的事务处理我明白主要就是 commit 和 rollback,那 Spring 的事务处理到底是什么?
2.在学习 Hibernate 的时候,关于 HibernateTemplate 的一个方法,List find(String queryString) 的这个方法通过使用 HQL 语句获取一个 List 很容易理解,但是有一个方法 void delete(Object entity) 删除一个实体,那是通过什么方法删除一个实体,ById?ByName?来确定唯一性的?
3.学了这么多天的代码才明白什么是透明简直是耻辱
收获:
1.发现学习新技术的例子越小越容易学会
2.我前面使用的方法都要通过 session.get/save(),但是实际上此时若抛出异常则是 Hibernate 的异常,不易于 DeBug,而再一次封装后的 HibernateTemplate.get/save() 则会将异常转换成 Spring 中的异常,方便调试
3.在学习数据源的配置的时候可以通过 Hibernate 的数据源和 JDBC 的数据源,而 JDBC 的数据源则是比较接近底层,方便快捷,但是容易造成数据连接泄漏(类似于没有 Close 之类,但不限于此),而使用模板 JdbcTemplate 或者 HibernateTemplate 则不会有这样的问题,什么 Session 将会自动回收,方便快捷,且能达到一样的目的。
4.在学习 AOP 的时候,有一些方法不能被实现 AOP,比如 static、final、private 的方法,主要记住一点,只要不能被子类覆写就不能实现 AOP
5.用实例做了个 事务传递(嵌套),大意是在 addUser(User user) 的实现里面有个方法 addLog(Log log),不仅在 addUser 里持久化数据,并在 addLog 中将 Log 持久化,所以这两个应该算是一个事务 用 getCurrentSession 比较合适,并将事务传递类型设置为 PROPAGATION_REQUIRED,不设置事务传递类型默认也是 PROPAGATION_REQUIRED,比较常用。这样就算是 commit 和 rollback 都能精确实现
附上到底有哪些传递类型
传播类型 | 传播效果 |
---|---|
PROPAGATION_REQUIRED | 如果存在一个事物,则支持当前事务,如果没有则开启 |
PROPAGATION_SUPPORTS | 如果存在一个事务,则支持当前事务,如果没有事务,则非事务的执行 |
PROPAGATION_MANDATORY | 如果存在一个事务,则支持当前事务,如果没有则抛出异常 |
PROPAGATION_REQUIRES_NEW | 总是开启一个新事务,如果一个事务已经存在,则将事务挂起 |
PROPAGATION_NOT_SUPPORTED | 总是非事务的执行,并挂起任何存在的事务 |
PROPAGATION_NEVER | 总是非事务的执行,如果存在一个事物则抛出异常 |
PROPAGATION_NESTED | 如果一个活动的事务存在,则运行在一个嵌套的事务中,如果没有活动的事务,则按 TransactionDefinition.PROPAGATION_REQUIRED 属性执行 |
6.可以配置额外的属性文件来封装属性,例如
配置一个 jdbc.properties
在我的配置文件将 jdbc.properties 导入
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="jdbc.properties"/>
<property name="fileEncoding" value="utf-8"/>
</bean>
然后就可以这样配置数据源了
<property name="driverClassName" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${userName}"/>
<property name="password" value="${password}"/>
评论