jdbc我们并不陌生通过jdbc我们可以通过使用java程序来访问数据库,作为spring生态体系肯定对jdbc也有着良好的支持
什么是spring JDBC
我们学习springjdbc有两个重点第一个是学习jdbc是如何进行控制的第二个就是学习jdbctemplate提供了那些方法让我们来完成数据表的操作
其实这两者面向的对象是不一样的
mybatis作为一个封装程度较高适合中小企业进行软件的敏捷开发,但是就涉及到了一系列的xml的配置以及各种操作的细节,封装程度高就意味着执行效率低
spring jdbc只是对原始jdbc的api进行简单的封装,大厂很少使用成熟框架而是使用轻量级的封装框架,执行效率比mybatis高同时因为有了springioc容器的存在不至于让程序像原生jdbc那样管理
如何使用?
打开训练素材,的sql文件在数据库中运行一下
后续实现这个员工表的增删改查操作
引入依赖
创建全新的配置文件xml
进行jdbc的底层设置
数据源的配置
用于说明在当前的应用中到底要使用那种数据库类型连接那台服务器用户名密码是什么,也就是jdbc连接数据库时要设置的参数
来自依赖中引入的驱动
参数和参数之间使用&符号连接但是在xml中是是有语义的所以用转义符改为
完成jdbcTemplate与底层数据源绑定的工作
新增包和实体类员工实体
和数据表中的字段一一对应
import java.util.Date;
public class Employee {
private Integer eno;
private String ename;
private Float salary;
private String dname;
private Date hiredate;
public Integer getEno() {
return eno;
}
public void setEno(Integer eno) {
this.eno = eno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public Float getSalary() {
return salary;
}
public void setSalary(Float salary) {
this.salary = salary;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
@Override
public String toString() {
return "Employee{" +
"eno=" + eno +
", ename='" + ename + '\'' +
", salary=" + salary +
", dname='" + dname + '\'' +
", hiredate=" + hiredate +
'}';
}
}
创建Dao
因为在数据操作时依赖于jdbc所以必须有jdbcTemplate
因为在xml中已经配置了jdbcTemplate所以在容器启动以后,自动的会对这个对象进行初始化,在后期使用时,只需要将这个对象采用配置方式注入到dao的template属行中就行了
新增业务
按照编号查询对应的员工
传入员工编号
如何使用jdbcTemplate对象来完成查询的工作呢?
这个方法的含义是进行指定的查询,将唯一返回的数据转换为对应的对象
我们来定义sql语句
第一个参数肯定执行的sql,第二个参数要对应传入的数据
将参数传入的eno放入到object数组,在运行时会传入到这个位置来完成数据的查询工作
如何将指定的sql转化为相应的对象呢?使用
将我们bean的属性和每一行的列来进行一一的对应
完成从数据库记录到实体对象的转化
在applicationContext中配置该怎么写呢?
创建入口类
输出
围绕jdbc Template的所提供的查询方法讲解他不同api的适应方法
增加junit框架以及springtest
通过编写单元测试用例更好的来学习jdbc template的各种使用办法
增加测试用例类
增加注解 将junit的控制权交给spring来进行
在junit启动时自动初始化ioc容器
相当于
这样几相当于ioc容器为我们准备好了
注入类
增加测试用例
运行
查询多条记录怎么写呢?
测试一下
以为刚才传入了研发部所以这里不写参数
输出
将写死的静态值改成参数
重新测试
关于查询方法还有一个特例
我们查询的是所有的字段,并将字段按照属性名的对照关系一一进行转化,但是在实际运行过程中有很多字段是没有与之对应的实体属性的
模拟一下,该怎么办呢?使用另外一个方法
将查询结果作为列表返回同时每一条对象按照map对象进行包裹
测试一下
作为一个list每一条数据都是一个map而这个map中key就是查询结果的字段名value是字段值
没有对应的实体类的情况下,也可以得到相应的结果,只不过结果被封装成了map对象
新增数据插入方法 只需要一个方法叫做jdbcTemplate.update
测试一下
运行
新增用于数据更新方法,无论是增加还是修改都是用update
测试
运行一下
数据删除操作,本质和新增更新完全相同
测试
再次删除
对于不存在的数据进行删除是不会产生影像数据的
但是涉及到写操作就衍生出一个新问题,我们的数据库事务该如何控制呢?