在jdbc模板中使用具名参数。

从今天这件事我得到的教训是:必须活用 ctrl + o。

在经典的jdbc用法中,sql参数是用占位符“?”表示的,并且受到位置的限制。定位参数的问题在于,一旦参数的顺序发生了变化,就必须改变参数绑定。

在spring jdbc框架中,绑定sql参数的另一种选择是使用具名参数(named parameter)。

一、具名参数

sql按照名称(以冒号开头)而不是按照位置进行指定,具名参数更加易于维护,也提升了可读性,具名参数由框架类在运行时用占位符取代。

具名参数只在NamedParamerterJdbcTemplate中得到支持。

二、代码实现

(1)首先在xml文件中配置NamedParameterJdbcTemplate

特别注意<constructor-arg ref=”datasource”></constructor-arg>。

配置NamedParameterJdbcTemplate,可以使用具名参数,其没有无参数的构造器,所以必须为其构造器指定参数。

完整的配置文件:

(2)写出测试方法

运行结果:成功插入 xie 666。

以前用?来做占位符,是按照顺序来对应参数的,如果参数顺序改变,或者参数很多,都会造成一大堆的?出现,而且参数的顺序是不能变化的,非常复杂。

但是现在用键值对的方法,可以做到一一对应,方便管理。

(3)优化

现在问题来了,这个update需要提交map作为参数,所以用的时候还需要去配置一个map,比起之前的testupdate:

不是更加麻烦了么…我们的初衷是简化操作,怎么反而变得复杂起来了呀…

用map不是嫌麻烦吗,这次我们直接按照类的形式插入。

先新建要插入的数据类:

然后改写:

运行结果: godlikexie 666 成功被插入。

感觉很像hibernate不是吗?可以直接通过类进行操作,非常方便。

三、总结

过程比较简单,反正就是先写好要操作的类,设置get&set方法,注入类的数据,转化为sqlParameterSource类,然后直接放在namedParameterJdbcTemplate.update()里面使用就可以。

这样spring自身的jdbc框架就学完了,感觉还是hibernate或者是mybatis更好用。

发表评论

电子邮件地址不会被公开。 必填项已用*标注