04--JdbcTemplate模版

1、JdbcTemplate模版

1.1 概述

Spring JDBC

Spring框架对JDBC的简单封装。提供了一个JdbcTemplate对象简化JDBC的开发(后面专门讲spring框架)

1.2 实现步骤

1. 导入jar包 4 + 1

2. 创建JdbcTemplate对象。依赖于数据源DataSource

JdbcTemplate template = new JdbcTemplate(ds);

3. 调用JdbcTemplate的方法来完成CRUD的操作

update():执行DML语句。增、删、改语句

queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合

注意:这个方法查询的结果集长度只能是1

queryForList():查询结果将结果集封装为list集合

注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中

query():查询结果,将结果封装为JavaBean对象

query的参数:RowMapper

一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装

new BeanPropertyRowMapper<类型>(类型.class)

queryForObject:查询结果,将结果封装为对象

一般用于聚合函数的查询

1.3 快速入门

package com.suyv.template;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.suyv.druid.DruidDemo01;
import com.suyv.pojo.User;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.io.IOException;
import java.util.List;
import java.util.Properties;

/**
 * @Author: 憨憨浩浩
 * @CreateTime: 2024-01-11 14:17
 * @Description: JdbcTemplate 的初使用
 */
public class JdbcTemplateDemo01 {

    public static void main(String[] args) throws Exception {

        // 1.导入jar包

        // 使用Druid连接池
        Properties properties = new Properties();
        properties.load(JdbcTemplateDemo01.class.getClassLoader().getResourceAsStream("druid.properties"));
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);

        // 2.创建JdbcTemplate对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 3.调用方法
        String sql = "select * from user";
        List users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));

        for (User user : users) {
            System.out.println(user);
        }

    }
}

1.4 增删改的测试

工具类的准备:

package com.suyv.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.suyv.template.JdbcTemplateDemo01;

import javax.sql.DataSource;
import java.util.Properties;

/**
 * @Author: 憨憨浩浩
 * @CreateTime: 2024-01-11 15:31
 * @Description: 获取Druid连接池
 */
public class JdbcUtil {

    public static DataSource getDataSource(){
        // 使用Druid连接池
        Properties properties = new Properties();
        DataSource dataSource = null;
        try {
            properties.load(JdbcUtil.class.getClassLoader().getResourceAsStream("druid.properties"));
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            return dataSource;
        }
    }
}

增删改测试:

package com.suyv.update;

import com.suyv.util.JdbcUtil;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;

/**
 * @Author: 憨憨浩浩
 * @CreateTime: 2024-01-11 15:35
 * @Description: JdbcTemplate的update()的使用
 */
public class TemplateUpdate01 {

    // 添加用户
    @Test
    public void addUser(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());

        String sql = "insert into user values(null,?,?)";

        int num = jdbcTemplate.update(sql, "懒羊羊", "123456");
        if (num > 0){
            System.out.println("添加成功");
        } else {
            System.out.println("添加失败");
        }

    }

    // 修改用户信息
    @Test
    public void updateUser(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());

        String sql = "update user set password = ? where username = ?";

        int num = jdbcTemplate.update(sql, "admin", "懒羊羊");
        if (num > 0){
            System.out.println("修改成功");
        } else {
            System.out.println("修改失败");
        }
    }

    // 删除用户
    @Test
    public void deleteUser(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());

        String sql = "delete from user where id = ?";

        int num = jdbcTemplate.update(sql, 1);
        if (num > 0){
            System.out.println("删除成功");
        } else {
            System.out.println("删除失败");
        }
    }

}

1.5 查询的测试

工具类准备:

package com.suyv.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.suyv.template.JdbcTemplateDemo01;

import javax.sql.DataSource;
import java.util.Properties;

/**
 * @Author: 憨憨浩浩
 * @CreateTime: 2024-01-11 15:31
 * @Description: 获取Druid连接池
 */
public class JdbcUtil {

    public static DataSource getDataSource(){
        // 使用Druid连接池
        Properties properties = new Properties();
        DataSource dataSource = null;
        try {
            properties.load(JdbcUtil.class.getClassLoader().getResourceAsStream("druid.properties"));
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            return dataSource;
        }
    }
}

1.5.1 查询单行数据

package com.suyv.query;

import com.suyv.pojo.User;
import com.suyv.util.JdbcUtil;
import org.junit.Test;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.Map;

/**
 * @Author: 憨憨浩浩
 * @CreateTime: 2024-01-11 15:45
 * @Description: 查询单行数据
 */
public class TemplateQuery01 {

    // queryforMap()的使用
    @Test
    public void Test01(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());

        String sql = "select * from user where id = ?";

        Map map = jdbcTemplate.queryForMap(sql,6);

        System.out.println(map);
    }

    // queryforObject()的使用
    @Test
    public void Test02(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());

        String sql = "select * from user where id = ?";

        User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), 6);

        System.out.println(user);
    }

    // queryforObject()的使用--返回查询条数
    @Test
    public void Test03(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());

        String sql = "select count(*) from user";

        int num = jdbcTemplate.queryForObject(sql,Integer.class);

        System.out.println(num);
    }

    // queryforObject()的使用--异常情况
    // 查询不到数据会发生异常
    @Test
    public void Test04(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());

        String sql = "select * from user where id = ?";

        User user = null;
        try {
            user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), 8);
        } catch (DataAccessException e) {
            System.out.println("暂未该学号的学生");
        } finally {
            if (user != null){
                System.out.println(user);
            }
        }
    }
}

1.5.2 查询多行数据

package com.suyv.query;

import com.suyv.pojo.User;
import com.suyv.util.JdbcUtil;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

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

/**
 * @Author: 憨憨浩浩
 * @CreateTime: 2024-01-11 15:57
 * @Description: 查询多行数据
 */
public class TemplateQuery02 {

    // queryforList()的使用
    @Test
    public void Test01(){

        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());

        String sql = "select * from user";

        List> lists = jdbcTemplate.queryForList(sql);

        for (Map map : lists) {
            System.out.println(map);
        }

    }

    // queryforList()的使用
    @Test
    public void Test02(){

        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());

        String sql = "select * from user where id > ?";

        List> lists = jdbcTemplate.queryForList(sql,5);

        for (Map map : lists) {
            System.out.println(map);
        }

    }

    // query()的使用
    @Test
    public void Test03(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());

        String sql = "select * from user";

        List users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));

        for (User user : users) {
            System.out.println(user);
        }
    }

    // query()的使用
    @Test
    public void Test04(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());

        String sql = "select * from user where id > ?";

        List users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class),5);

        for (User user : users) {
            System.out.println(user);
        }
    }

}

你可能感兴趣的:(JDBC,数据库,mysql,java,spring,JDBC)