一:O-R Mapping,对象关系映射,即将一个对象存到一个关系数据库中,常用的O-R Mapping工具有
1,Hibernate
2,Commons DbUtils(只是对JDBC的简单封装)
3,Ibatis
二:dbutils是一个开源的JDBC工具类库,是对jdbc的简单封装。
三:Dbutils的API介绍:
•org.apache.commons.dbutils.QueryRunner
•org.apache.commons.dbutils.ResultSetHandler
•工具类
org.apache.commons.dbutils.DbUtils、。
三:dbutils封装了jdbc的增删改查的操作,只需要new一个QueryRunner,然后调用其query方法,将sql语句,参数或参数数组,结果集处理器传递进去,就可以。
四:结果集处理器ResultSetHandler 接口的实现类
ArrayHandler:把结果集中的第一行数据转成对象数组。
ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
ColumnListHandler:将结果集中某一列的数据存放到List中。
KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
五:在mvc模式中,dao层只负责对数据库的操作,不应该有任何业务逻辑的代码,但是有一种情况,比如银行转账,几次数据库操作在一次事务中,在service中如何将转账服务放在一次事务中呢,一种解决办法是在dao层中保存一个Connection,由service传递进来对那个Connection操作,就可以解决这个问题。
六:在mvc模式下,如何进行事务管理呢,上面的方法是,所有的dao层共享同一事务,即同一连接,实现此需求的另外一种方法是使用ThreadLocale技术,这个对象保存的是一个线程为键的map,如果在dao层中将得到的Connection存放在这个map中,则在service中得到的连接就是同一连接,可以写一个工具类实现获取连接,提交,回滚,关闭等操作。
七:以上两种方法只能在dao层中实现共享事务,但是如果是servlet转发等情况,便不是同一连接,这时候就必须将事务管理提前到servlet之前,就写一个拦截器,每一次请求都获取连接,然后放行给servlet等,返回时再关闭连接等,缺点是占用连接时间过长,所以使用spring是好的方法,但是比较臃肿。