JDBCTemplate的简单使用

1.简单的介绍

JDBCTemplate是Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发。想少斜JDBC的代码可以学习ORM框架

2.JDBCTemplate常用方法

* update():执行DML语句。增、删、改语句
			* queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
				* 注意:这个方法查询的结果集长度只能是1
			* queryForList():查询结果将结果集封装为list集合
				* 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
			* query():查询结果,将结果封装为JavaBean对象
				* query的参数:RowMapper
					* 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
					* new BeanPropertyRowMapper<类型>(类型.class)
			* queryForObject:查询结果,将结果封装为对象
				* 一般用于聚合函数的查询

3.实现JDBCTemplate操作

注:因为spring只是简单封装JDBC的操作,所以还是需要java bean文件与utils工具类

准备jar包

JDBCTemplate的简单使用_第1张图片
看下工作目录
JDBCTemplate的简单使用_第2张图片

准备java bean文件

package com.zjc.etu.day01.Entity;

public class User {
    private Integer id;
    private String name;
    private Integer age;
    private Integer status;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", status=" + status +
                '}';
    }
}

准备utils工具类

这里使用配置Druid数据池的方式配置工具类

package com.zjc.etu.day01.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * Druid连接池的工具类
 */
public class JDBCUtils {

    //1.定义成员变量 DataSource
    private static DataSource ds ;

    static{
        try {
            //1.加载配置文件
            Properties pro = new Properties();
            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            //2.获取DataSource
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接
     */
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    /**
     * 释放资源
     */
    public static void close(Statement stmt,Connection conn){
       /* if(stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(conn != null){
            try {
                conn.close();//归还连接
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }*/

        close(null,stmt,conn);
    }


    public static void close(ResultSet rs , Statement stmt, Connection conn){


        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }


        if(stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(conn != null){
            try {
                conn.close();//归还连接
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 获取连接池方法
     */

    public static DataSource getDataSource(){
        return  ds;
    }

}

实现DML与DQL操作

package com.zjc.etu.day01;

import com.zjc.etu.day01.Entity.User;
import com.zjc.etu.day01.utils.JDBCUtils;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;
import java.util.Map;

public class DemoJDBCTemplate {
    public static void main(String[] args) {
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

                String sql = "update think_user set age = 22 where id = 7";
                //3. 执行sql
                int count = template.update(sql);
                System.out.println(count);

    }

    @Test
    //修改数据
    public void test1(){
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        String sql = "update think_user set age = 21 where id = 7";

        int count = template.update(sql);
        System.out.println(count);

    }

    @Test
    //添加数据
    public void test2(){
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        String sql = "insert into think_user(name,age,status) values(?,?,?)";

        int count = template.update(sql, "王五", 22, 0);
        System.out.println(count);
    }

    @Test
    //将结果转发为map集合,但是只能处理1条数据
    public void test3(){
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        String sql = "select * from think_user where id = ?";
        Map<String, Object> stringObjectMap = template.queryForMap(sql, 7);
        System.out.println(stringObjectMap);//{id=7, name=李四, age=22, status=0}
    }

    @Test
    //将结果转发为list集合
    public void test4(){
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        String sql = "select * from think_user";
        List<Map<String, Object>> lists = template.queryForList(sql);
        for (Map<String, Object> stringObjectMap : lists) {
            System.out.println(stringObjectMap);
            //{id=7, name=李四, age=22, status=0}
            //{id=8, name=张三, age=20, status=1}
            //{id=9, name=王五, age=22, status=0}
        }

    }

    @Test
    //将查询结果封装为java bean的对象集合,也就是JavaBean文件里面 重写的tostring形式的集合
    /*
        数据库默认值一般为null,
        而java的基本数据类型都有默认,
        与数据库的默认值null冲突,
        所以这里需要将JavaBean里面数据路类型改为引用数据类型
     */
    public void test5(){
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        String sql = "select * from think_user";
        List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
        for (User user : users) {
            System.out.println(user);
            //User{id=7, name='李四', age=22, status=0}
            //User{id=8, name='张三', age=20, status=1}
            //User{id=9, name='王五', age=22, status=0}

        }
    }

    @Test
    //使用聚合函数
    public void test6(){
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        String sql = "select max(id) from think_user";
        Integer integer = template.queryForObject(sql, Integer.class);
//        queryForObject的第二个参数为sql语句返回的数据类型
        System.out.println(integer);
    }
   
}

4

想要简化jdbc的操作可以学习Java的orm框架

你可能感兴趣的:(JDBCTemplate的简单使用)