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<User> 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 {// 添加用户@Testpublic 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("添加失败");}}// 修改用户信息@Testpublic 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("修改失败");}}// 删除用户@Testpublic 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()的使用@Testpublic void Test01(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "select * from user where id = ?";Map<String, Object> map = jdbcTemplate.queryForMap(sql,6);System.out.println(map);}// queryforObject()的使用@Testpublic 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()的使用--返回查询条数@Testpublic 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()的使用--异常情况// 查询不到数据会发生异常@Testpublic 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()的使用@Testpublic void Test01(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "select * from user";List<Map<String, Object>> lists = jdbcTemplate.queryForList(sql);for (Map<String, Object> map : lists) {System.out.println(map);}}// queryforList()的使用@Testpublic void Test02(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "select * from user where id > ?";List<Map<String, Object>> lists = jdbcTemplate.queryForList(sql,5);for (Map<String, Object> map : lists) {System.out.println(map);}}// query()的使用@Testpublic void Test03(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "select * from user";List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));for (User user : users) {System.out.println(user);}}// query()的使用@Testpublic void Test04(){JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtil.getDataSource());String sql = "select * from user where id > ?";List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class),5);for (User user : users) {System.out.println(user);}}}