
我们回看一张老图,我们已经看了ioc,iop,今天我们关心左上角一块,数据库相关的内容,java有对数据库的处理模块JDBC(然而我还没用过),我们今天研究的JdbcTemplate就是对JDBC的spring封装,方便实现对数据库的增删改查操作
准备工作
1 安装jar包

其中druid连接池我们已经安装过了,不过如果没有安装还是需要安装的,还需要其资源的mysql-connector-java包,

还有spring lib下的几个包,jdbc,orm,tx,其中jdbc肯定是必要的,Orm是使用其他映射框架使用的,tx是事务相关的

往常一样导入依赖
2 配置druid连接池
这步之前做过,需要创建xml文件,把如下图所示内容粘贴过去,,(资源自带txt文件),这里省略了windows的mysql安装,其实很简单的,下载安装包设置就完了,这里为了一致我设置了视频一样的密码


由于xml配置的是user_db数据库,我们创建一个名称一样的
3 配置JdbcTemplate对象,注入DataSource
我们之前在xml创建druid连接池,就是创建一个可连接的数据源,现在创建JdbcTemplate对象

当然还是老办法创建bean,这里class路径按照上图

我们查看这个类,可以看到其有参无参构造,但是其实默认还是设置的set方法

我们只需要设置property标签,使用ref指向我们的druid连接池
4 创建Service服务类,创建Dao数据库操作类,在Service注入Dao属性,在Dao注入JdbcTemplate属性

我们准备使用注解,然后再xml里配置context名称空间和组件扫描

创建2个包service和dao,创建BookService类,BookDao接口和其实现类

我们注解创建对象,给Service加上注解

给Dao实现类加上注解创建对象

我们给Service注入Dao对象,使用注解@AutoWired自动装配

Dao里注入JdbcTemplate操作
至此完成准备工作
JDBC的数据库操作(增删改查)
增加操作

我们在mysql里创建一张表,操作语句如上,我们创建3个字段,book的id,name,status

我们创建类Book,设置3个字段和setter,getter如上

我们给Service增加方法addBook,传入Book对象,使用bookDao对象添加

我们给接口增加抽象方法add,

在实现类里我们重写方法,这里我们使用jdbc来操作,具体使用对象的update方法来实现操作(增删改查都是靠他),其中第一个参数为sql语句,第二个参数为可变参数(我们也可以传入数组)

我们使用sql语句如上,?是被替换的部分,我们通过book获得属性传给可变参数

我们编写测试类,这里本来book应该是表单给我的,这里我们没有,只能new个出来,

运行结果如上,我们就实现了添加到数据库,这里需要注意的是url即数据库地址我修改了,出现编码问题我设置了https://blog.csdn.net/txwtech/article/details/80787886如上,还有是用户账户设置的问题,参照https://www.jianshu.com/p/e3105a4657b8重置了密码就好了,中间还重新建了库和表,因为忘了设置user_db为utf8

使用完可以看到添加效果
修改和删除

我们还是一样,给Service添加功能

接口添加抽象方法

实现类里重写,sql语句如上,注意格式


测试类和修改结果如上

删除效果及测试类代码
查询操作
查询返回某个值
我们还有印象select count(*) from 表名 来活得记录数

我们在service里增加功能,同样接口和实现类添加功能,不重复贴图了

在实现类里,sql语句还是之前的,但是我们要调用jdbctemplate对象的queryForObject方法,第一个参数当然是sql字符串,第二个是返回类型class字节码

实现类如上,我们因为要返回int,所以使用泛型Integer的字节码

我们调用方法,添加2本书,然后输出统计

结果和如上一样
查询返回对象
此场景常常是,比如我们网页选择了某本书,弹出页面显示其具体信息

比如我们根据id查找Book类,那就service里定义功能,同时接口和实现类完成

我们还是使用queryForObject方法,不过这次使用重载,3个参数,参数1是带?的sql语句,参数3是替代?的字符串,这里是id,参数2 RowMapper<T>是指定泛型的接口,我们使用spring给我们封装好的实现类即可

实现类方法如上,

我们删掉之前的book,然后添加2个查询,结果如上
查询返回集合

service里定义方法findall返回Book类型集合

在实现类里重写,这里使用的方法是query和之前不一样,2个参数,第一个是sql,第二个还是RowMapper接口,我们就使用实现类传入

因为是集合我们可以遍历返回元素,测试效果如上
批量操作
批量添加

批量添加使用的是JdbcTemplate的batchUpdate方法,其中参数1还是添加语句和之前一样,但是args参数2是包含Object数组的LIST对象(像二维列表,又不是),实现类如上


我们在service类和接口里定义对应方法

测试类里我们使用创建List对象给书的属性传入,然后args集合传给方法,

效果如上
批量修改
方法也是JdbcTemplate的batchUpdate方法

比如我们对指定bookid进行修改,

测试类里就对我们刚才的3个book的书名和状态修改

效果如上
批量删除
同样是使用batchUpdate



测试类即结果如上,就不多说啦
网友评论