Jdbc事务控制
1. 如何利用jdbc事务对工程项目(单数据源)进行全局事务控制,支持事务嵌套?
有两种做法:
1.1 直接将jdbc事务写在要进行数据库操作的方法中.这种方法最原始,但最麻烦
1.2 利用java注解及spring aop进行事务统一管理.这种方法简捷但要做一些处理.
要想利用注解及aop对jdbc事务进行统一处理,就要在客户请求及服务回复整个过程对jdbc连接进行统一操作,也就是要能够取得连接,且此连接惟一,只有惟一才能在统一处理过程中保存事务都在一个连接内部,做到全部提交或回滚.做到这一点可以将连接绑定本地线程ThreadLocal<Connection>,绑定后在同一线程内随时可以得到此连接并进地相关操作.
处理事务嵌套,最好将当前事务加入外部事务中,合成一个事务,更为合理.
在统一事务处理中,要进行事务提交和资源回收,例如连接关闭等,这个提交及回收只能在外部事务进行处理,不能在内部嵌套事务处理.不妨加一个变量,计数嵌套数,进入嵌套自动加一,跳出嵌套自动减一,当变量与最初值相等时即可提交及回收.事务回滚,进行异常捕获,不管是在嵌套事务内外只要有异常即可进行回滚操作.
上面是思路,按照这个思路我们可以随意发挥.
2. 如何利用jdbc事务对工程项目(多数据源)进行全局事务控制,支持事务嵌套,类似JTA?
也有两种方法:
2.1 直接将jdbc事务写在要进行数据库操作的方法中.多数据原要产生多个不同的连接分别进行事务操作.方法原始,最麻烦.
2.1 利用java注解及spring aop进行事务统一管理.多数据源要为每一个数据源产生一个 惟一的可全程控制的连接.这种方法简捷但要做一些处理.
原理如1.2,不过多数据源要绑定多个连接ThreadLocal<Map<String,Connection>>,同时对每个连接进行事务打开提交回滚等操作,map键为数据源名称,Connection为此数据源产生的连接,当进行数据操作时,可根据实体类对应的表在的数据源名得到连接进行连接数据操作.
3. 如何利用jdbc实现关系对象映射?
3.1最基本的就是为每一个实体类增加转换类.这个太麻烦
3.2利用反射及泛型、注解为所有的实体为只建一个转换类即可.
如果是多数据源的话,要在实体类中加上数据源名、表名、列名注解.这保证了实体对映的数据源连接正确且保证关系对象映射.
转换类中只需传入实体类对象Object,利用注解反射泛型可得到数据列与列属性注入.无论是从对象表查询列表还是从查询列表到对象都可对应成功完成转换.
实现原码 可从本人csdn资源中 查找 bigtest 系统列
|