我们把基本的功能都完成了,解析xml、构建映射代理、执行sql,解析处理结果,目前这些只支持查询,我们还差添加下增删改的功能,本章节就来完善下增删改,其实本章节比较简单,因为之前的每个章节都已设计好,所以这个章节主要在其基础上进行扩展以及少部分的修改即可。
要修改的有以下几点
1.在解析XML的时候,我们只解析了SELECT的资源,我们要加入也可以解析INSERT、UPDATE、DELETE、等的资源。

2.SqlSession里也要加入insert、delete、update、的方法,供调用使用。

3.再就是代理方法执行标签选择的时候,要执行哪个方法,也要加上增删改

4.Sql执行器也要更改添加,唯一不同的是执行器只增加update即可,由于jdbc对于Sql的增删改操作都是修改,所以增删改的操作指用调用update就可以

还有一些小细节都改动,咱们代码里细细说来。
1.代码实现
XMLMapperBuilder类里configurationElement方法里添加解析UPDATE、INSERT、DELETE、标签,buildStatementFromContext可接收多个参数,并添加for循环解析多个标签问题。
public class XMLMapperBuilder extends BaseBuilder {
// 省略其他方法
private void configurationElement(Element element) {
// 配置namespace
String namespace = element.attributeValue("namespace");
if (namespace.equals("")) {
throw new RuntimeException("Mapper's namespace cannot be empty");
}
builderAssistant.setCurrentNamespace(namespace);
// select,新增解析update、delete、insert
buildStatementFromContext(element.elements("select"),
element.elements("update"),
element.elements("insert"),
element.elements("delete"));
}
private void buildStatementFromContext(List<Element>... lists) {
for(List<Element> list:lists){
for (Element element : list) {
// 解析语句
final XMLStatementBuilder statementParser = new XMLStatementBuilder(configuration, builderAssistant, element);
statementParser.parseStatementNode();
}
}
}
}
SqlSession类:除了添加更新、新增、删除还有查询集合数据方法以及提交事务方法的定义
public interface SqlSession {
/**
* Execute an update statement. The number of rows affected will be returned.
* 更新记录
*
* @param statement Unique identifier matching the statement to execute.
* @param parameter A parameter object to pass to the statement.
* @return int The number of rows affected by the update. 返回的是受影响的行数
*/
int update(String statement, Object parameter);
/**
* Execute an insert statement with the given parameter object. Any generated
* autoincrement values or selectKey entries will modify the given parameter
* object properties. Only the number of rows affected will be returned.
* 插入记录,容许传入参数。
*
* @param statement Unique identifier matching the statement to execute.
* @param parameter A parameter object to pass to the statemen

最低0.47元/天 解锁文章
1982

被折叠的 条评论
为什么被折叠?



