Spring:了解JdbcTemplate

      如果JDBC使用的好,那么代码的性能肯定是最好的,但是太多的try…catch…finally语句需要处理,数据库资源的打开和关闭都是定性的,这些都是比较固定的模式,许多开发者使用JDBC时滥用try…catch…finally语句,使得代码的可读性和可维护性很差,所以,Spring提供了自己的方案:JdbcTemplate,在Hibernate和Mybatis出现之后这是一个不经常使用的技术,今天可以了解一下用法。

首先引入依赖:

    <!--Spring 的JDBC模板操作-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.2.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>4.2.8.RELEASE</version>
    </dependency>

需要配置数据源JdbcTemplate,这里采用xml的形式将这两个类交给Spring进行管理

    <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=UTC"/>
        <property name="username" value="用户名"/>
        <property name="password" value="密码"/>
    </bean>
    <bean id="jdbcTempalte" class="org.springframework.jdbc.core.JdbcTemplate">
        <constructor-arg name="dataSource" ref="datasource"/>
    </bean>

这里采用的setter方法进行依赖注入,四个核心配置要根据自己进行配置

看一下pojo类:

public class Student3 {
    private Integer sid;
    private String sname;
    private String ssex;
    private Integer sage;

    public Student3(Integer sid, String sname, String ssex, Integer sage) {
        this.sid = sid;
        this.sname = sname;
        this.ssex = ssex;
        this.sage = sage;
    }

    public Student3() {

    }

    @Override
    public String toString() {
        return "Student3{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", ssex='" + ssex + '\'' +
                ", sage=" + sage +
                '}';
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getSsex() {
        return ssex;
    }

    public void setSsex(String ssex) {
        this.ssex = ssex;
    }

    public Integer getSage() {
        return sage;
    }

    public void setSage(Integer sage) {
        this.sage = sage;
    }
}

测试query查询的功能:

public class JDBCTempalte {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-config1.xml");
        JdbcTemplate jdbcTempalte = (JdbcTemplate) context.getBean("jdbcTempalte");

        String sql = "select * from student3";
        List<Student3> query = jdbcTempalte.query(sql, new Student3Mapper());
        Iterator<Student3> iterator = query.iterator();
        while (iterator.hasNext()) {
            Student3 student3 = iterator.next();
            System.out.println(student3);
        }
    }
}
class Student3Mapper implements RowMapper<Student3> {
    @Override
    public Student3 mapRow(ResultSet resultSet, int i) throws SQLException {
        classes.bean.Student3 student3 = new classes.bean.Student3();
        student3.setSage(resultSet.getInt("sid"));
        student3.setSname(resultSet.getString("sname"));
        student3.setSsex(resultSet.getString("ssex"));
        student3.setSage(resultSet.getInt("sage"));
        return student3;
    }
}

需要注意的是这里的方法:
在这里插入图片描述
这里的query是JdbcTemplate封装好的方法,所以我们只需要对方法的作用以及参数熟悉即可,参数大致可以分为几类

  1. String sql:传入sql语句
  2. RowMapper< T > rowMapper:将从数据库中获取到的值转换为pojo类进行映射返回
  3. Object… args:可变参数,这里用于插入,多条件查询时,有可能需要传入多个参数

下面演示一下其他的功能
增加

String sql2 = "insert into student3 values(?,?,?,?)";
int updateNum = jdbcTempalte.update(sql2, 10, "小明", "男", 14);
System.out.println("影响的个数:"+updateNum);

执行完这些代码后,再进行查询整个表中的数据,打印结果:
在这里插入图片描述
修改:
这里将小明的sid改为3

String sql4 = "update student3 set sid=? where sid=?";
int update = jdbcTempalte.update(sql4, 3, 10);
System.out.println(update);

查看打印结果:
在这里插入图片描述
删除:
通过sid删除小明该条记录

String sql3 = "delete from student3 where sid=?";
int updateNum2 = jdbcTempalte.update(sql3, 3);
System.out.println("影响的个数:"+updateNum2);

打印结果:
在这里插入图片描述

实际上,JdbcTemplate的增删改查方法远远不止这些,而且随着功能的复杂需要注意更多的东西,但是由于它并不是当前常用的持久层技术,所以今天这篇文章只是了解,就不做深入研究了。

之前有评论说这个i是什么意思?
在这里插入图片描述
我在下面进行了打印,看一下结果:
在这里插入图片描述
发现,这个i就是用来标识是第几条记录的,我们的业务代码不会用到,但是在JdbcTemplate的内部进行了调用。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值