手敲Mybatis(十)-完善ORM框架支持增删改查

我们把基本的功能都完成了,解析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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值