JdbcTemplate

embedded/2024/9/26 1:24:23/

文章目录

    • 1.基本介绍
        • 1.需求分析
        • 2.介绍
    • 2.JdbcTemplate环境搭建
        • 1.回到原来的spring项目,导入jar包
        • 2.完整jar包
        • 3.创建数据库表
        • 4.配置文件src/jdbc.properties
        • 5.容器文件src/JdbcTemplate_ioc.xml
        • 6.测试连接JdbcTest.java
    • 3.JdbcTemplate操作数据库
        • 1.配置JdbcTemplate对象src/JdbcTemplate_ioc.xml
        • 2.添加数据两种方式
          • 1.添加单条记录update
            • 结果展示
          • 2.批量添加batchUpdate
            • 结果展示
        • 3.修改数据update
          • 1.代码实例
          • 2.结果展示
        • 4.查询
          • 1.查询单条记录queryForObject
            • 注意事项
            • 结果展示
          • 2.查询多条记录query
            • 结果展示
          • 3.查询一行一列记录queryForObject
            • 结果展示
          • 4.查询一行一列的记录(常用)
        • 5.具名参数
          • 1.配置NamedParameterJdbcTemplate对象JdbcTemplate_ioc.xml
          • 2.具名参数使用Map<String, ?>赋值
            • 结果展示
          • 3.具名参数使用对象赋值
            • 结果展示
        • 6.在dao中完成插入操作
          • 1.D:\Intelij_IDEA_Project\spring\spring\src\com\sxs\spring\jdbctemplate\MonsterDao.java
          • 2.开启普通注解扫描JdbcTemplate_ioc.xml
          • 3.结果展示

1.基本介绍

1.需求分析

image-20240222180234453

2.介绍

image-20240222181027367

2.JdbcTemplate环境搭建

springjar_14">1.回到原来的spring项目,导入jar包

image-20240222181741606

2.完整jar包

image-20240222182021602

3.创建数据库表
CREATE DATABASE spring;
use spring;
CREATE TABLE monster(
id INT PRIMARY KEY,
`name` VARCHAR(64) NOT NULL DEFAULT'',
skill VARCHAR(64) NOT NULL DEFAULT''
);
INSERT INTO monster VALUES(100, '青牛怪', '吐火');
INSERT INTO monster VALUES(200, '黄袍怪', '吐烟');
INSERT INTO monster VALUES(300, '蜘蛛怪', '吐丝');
SELECT * FROM monster

image-20240222183025859

jdbcproperties_40">4.配置文件src/jdbc.properties
jdbc.user=root
jdbc.pwd=root
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring
5.容器文件src/JdbcTemplate_ioc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!--引入外部配置文件classpath:类路径在普通java项目下相当于src--><context:property-placeholder location="classpath:jdbc.properties"/><!--配置数据源对象--><bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource"><property name="user" value="${jdbc.user}"/><property name="password" value="${jdbc.pwd}"/><property name="driverClass" value="${jdbc.driver}"/><property name="jdbcUrl" value="${jdbc.url}"/></bean>
</beans>
java_69">6.测试连接JdbcTest.java
java">package com.sxs.spring.test;import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;/*** @author 孙显圣* @version 1.0*/
public class JdbcTest {@Testpublic void testDatasourceByJdbcTemplate() throws SQLException {ApplicationContext ioc =new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");//因为实现了DataSource的接口,所以使用接口类型来获取对象DataSource bean = ioc.getBean(DataSource.class);Connection connection = bean.getConnection();System.out.println(connection);connection.close();}
}

image-20240222190229730

3.JdbcTemplate操作数据库

1.配置JdbcTemplate对象src/JdbcTemplate_ioc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!--引入外部配置文件classpath:类路径在普通java项目下相当于src--><context:property-placeholder location="classpath:jdbc.properties"/><!--配置数据源对象--><bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource"><property name="user" value="${jdbc.user}"/><property name="password" value="${jdbc.pwd}"/><property name="driverClass" value="${jdbc.driver}"/><property name="jdbcUrl" value="${jdbc.url}"/></bean><!--配置JdbcTemplate对象--><bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate"><!--配置JdbcTemplate的属性--><property name="dataSource" ref="dataSource"/></bean>
</beans>
2.添加数据两种方式
1.添加单条记录update
java">    //测试通过JdbcTemplate添加数据@Testpublic void addDataByJdbcTemplate() {ApplicationContext ioc =new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);//添加方式一String sql = "insert into monster values(700, '红孩儿', '枪法')";jdbcTemplate.execute(sql);System.out.println("添加成功");//添加方式二(推荐)String sql1 = "insert into monster values(?, ?, ?)";int update = jdbcTemplate.update(sql1, 500, "牛魔王", "芭蕉扇");System.out.println("add OK 受影响的行数 = " + update);}
结果展示

image-20240222192544678

2.批量添加batchUpdate
java">    @Testpublic void batchUpdate() {ApplicationContext ioc =new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);//public int[] batchUpdate(String sql, List<Object[]> batchArgs)//批量添加,参数是存储Object对象数组的List,每一个Object对象数组都是一条记录,返回的是一个int数组,表示对应的语句的影响行数String sql = "insert into monster values(?, ?, ?)";List<Object[]> batchArgs = new ArrayList<>();batchArgs.add(new Object[]{1, "李白1", "青莲剑歌1"});batchArgs.add(new Object[]{2, "李白2", "青莲剑歌2"});batchArgs.add(new Object[]{3, "李白3", "青莲剑歌3"});batchArgs.add(new Object[]{4, "李白4", "青莲剑歌4"});int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);for (int anInt : ints) {System.out.println(anInt);}System.out.println("批量添加成功");}
结果展示

image-20240222195400478

3.修改数据update
1.代码实例
java">    @Testpublic void updateDataByJdbcTemplate() {ApplicationContext ioc =new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);String sql = "update monster set skill = ? where id = ?";int update = jdbcTemplate.update(sql, "美女", 100);System.out.println("修改成功,受影响的行数为" + update);}
2.结果展示

image-20240222193131070

4.查询
1.查询单条记录queryForObject
java">    //查询单条记录@Testpublic void queryForObject() {ApplicationContext ioc =new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);//<T> T queryForObject(String var1, RowMapper<T> var2, @Nullable Object... var3);//接受一个sql, 一个RowMapper接口,一个可变参数, 将结果封装到对象中//注意这里表的列名和bean对象是不对应的,所以需要指定别名String sql = "select id as monsterId, name, skill from monster where id = ?";//使用BeanPropertyRowMapper来封装一条记录//注意:这里后面还要传入Monster.classBeanPropertyRowMapper<Monster> rowMapper = new BeanPropertyRowMapper<>(Monster.class);Monster monster = jdbcTemplate.queryForObject(sql, rowMapper, 100);System.out.println(monster);}
注意事项
  • bean对象的名字需要跟数据表中的列对应,如果不同需要数据表指定列名
  • bean对象需要有无参构造方法用于反射
  • new BeanPropertyRowMapper<>(Monster.class)这里传入Monster.class用于反射
结果展示

image-20240222201907911

2.查询多条记录query
java">    //查询多条记录@Testpublic void query() {ApplicationContext ioc =new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);//public <T> List<T> query(String sql, RowMapper<T> rowMapper, @Nullable Object... args)//接受一个sql, 一个RowMapper接口,一个可变参数, 将结果封装到集合中//注意这里表的列名和bean对象是不对应的,所以需要指定别名String sql = "select id as monsterId, name, skill from monster where id > ?";//使用BeanPropertyRowMapper接口来封装多条记录BeanPropertyRowMapper<Monster> rowMapper = new BeanPropertyRowMapper<>(Monster.class);List<Monster> query = jdbcTemplate.query(sql, rowMapper, 100);for (Monster monster : query) {System.out.println(monster);}}
结果展示

image-20240223092349114

3.查询一行一列记录queryForObject
java">    //查询单行单列数据@Testpublic void queryForObject_() {ApplicationContext ioc =new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);//public <T> T queryForObject(String sql, Class<T> requiredType, @Nullable Object... args)//传入sql语句, 要返回的类型, 以及参数String sql = "select count(*) from monster where id > ?";String res = jdbcTemplate.queryForObject(sql, String.class, 1);System.out.println(res);}
结果展示

image-20240223093100011

4.查询一行一列的记录(常用)
java">    public Double findPriceById(Integer goods_id) {String sql = "select price from goods where goods_id = ?";//public <T> T queryForObject(String sql, @Nullable Object[] args, Class<T> requiredType)//传入sql, Object[]填充sql的值,Class<T> requiredType传入要返回的类型Double aDouble = jdbcTemplate.queryForObject(sql, new Object[]{goods_id}, Double.class);return aDouble;}
5.具名参数
1.配置NamedParameterJdbcTemplate对象JdbcTemplate_ioc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!--引入外部配置文件classpath:类路径在普通java项目下相当于src--><context:property-placeholder location="classpath:jdbc.properties"/><!--配置数据源对象--><bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource"><property name="user" value="${jdbc.user}"/><property name="password" value="${jdbc.pwd}"/><property name="driverClass" value="${jdbc.driver}"/><property name="jdbcUrl" value="${jdbc.url}"/></bean><!--配置JdbcTemplate对象--><bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate"><!--配置JdbcTemplate的属性--><property name="dataSource" ref="dataSource"/></bean><!--配置NamedParameterJdbcTemplate对象--><bean class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" id="namedParameterJdbcTemplate"><!--构造器注入--><constructor-arg type="javax.sql.DataSource" ref="dataSource"/></bean>
</beans>
2.具名参数使用Map<String, ?>赋值
java">    //具名参数@Testpublic void NamedParameterJdbcTemplate() {ApplicationContext ioc =new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");NamedParameterJdbcTemplate bean = ioc.getBean(NamedParameterJdbcTemplate.class);//int update(String var1, Map<String, ?> var2)//传入一个sql,和一个map,用来给具名参数赋值//使用具名参数,注意:这里的名字可以任意,比起问号,可读性更高String sql = "insert into monster values(:id, :name, :skill)";//给具名参数赋值HashMap<String, Object> stringObjectHashMap = new HashMap<>();stringObjectHashMap.put("id", 1000);stringObjectHashMap.put("name", "李白"); stringObjectHashMap.put("skill", "青莲剑歌");//返回的是影响行数int update = bean.update(sql, stringObjectHashMap);if (update == 1) {System.out.println("插入成功");}}
结果展示

image-20240223094803840

3.具名参数使用对象赋值
java">    //具名参数使用对象赋值@Testpublic void NamedParameterJdbcTemplate2() {ApplicationContext ioc =new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");NamedParameterJdbcTemplate bean = ioc.getBean(NamedParameterJdbcTemplate.class);//public int update(String sql, SqlParameterSource paramSource)//传入一个sql,和一个BeanPropertySqlParameterSource,用来给具名参数赋值//使用具名参数,注意:这里的名字必须与后面的对象属性名对应String sql = "insert into monster values(:monsterId, :name, :skill)";//给具名参数赋值Monster monster = new Monster(9, "孙悟空", "金箍棒");BeanPropertySqlParameterSource beanPropertySqlParameterSource = new BeanPropertySqlParameterSource(monster);int update = bean.update(sql, beanPropertyS qlParameterSource);//返回的是影响行数if (update == 1) {System.out.println("插入成功");}}
结果展示

image-20240223100405981

6.在dao中完成插入操作
springspringsrccomsxsspringjdbctemplateMonsterDaojava_416">1.D:\Intelij_IDEA_Project\spring\spring\src\com\sxs\spring\jdbctemplate\MonsterDao.java
java">package com.sxs.spring.jdbctemplate;import com.sxs.spring.bean.Monster;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;import javax.annotation.Resource;/*** @author 孙显圣* @version 1.0*/@Repository
public class MonsterDao {//依赖注入@Resourceprivate JdbcTemplate jdbcTemplate;//完成保存任务public void save(Monster monster) {String sql = "insert into monster values(?, ?, ?)";int update = jdbcTemplate.update(sql, monster.getMonsterId(), monster.getName(), monster.getSkill());if (update == 1) {System.out.println("保存成功!");}}
}
2.开启普通注解扫描JdbcTemplate_ioc.xml

image-20240223102606801

3.结果展示

image-20240223102627170


http://www.ppmy.cn/embedded/7306.html

相关文章

常用渗透测试checklist

该渗透测试checklist包含以下几个模块&#xff1a; 测试大类、测试项、威胁等级、漏洞描述、修复方案 一、认证与授权类 1.密码明文传输 威胁等级&#xff1a;低危 漏洞描述&#xff1a;密码明文传输一般存在于web网站登录页面&#xff0c;用户名或者密码采用了明文传输&am…

Electron桌面应用开发:从入门到发布全流程解析

Electron是一个开源的桌面应用程序开发框架&#xff0c;它允许开发者使用Web技术&#xff08;HTML、CSS和JavaScript&#xff09;来创建跨平台的桌面应用程序。在本文中&#xff0c;我们将深入探讨Electron桌面应用程序开发的全流程&#xff0c;从入门到发布。 安装和配置Elec…

使用Python实现自动化网页答题功能-模拟考试篇

介绍 在驾驶员考试网站上进行模拟考试python自动答题 自动化原理 该脚本使用了自动化模块 DrissionPage 中的 ChromiumPage 类来实现网页的自动化操作。通过定位网页元素和模拟点击操作&#xff0c;完成了选择答案和提交答卷的过程。 用途与注意事项 用途&#xff1a;该脚本…

计算机视觉——手机目标检测数据集

这是一个手机目标检测的数据集&#xff0c;数据集的标注工具是labelimg,数据格式是voc格式&#xff0c;要训练yolo模型的话&#xff0c;可以使用脚本改成txt格式&#xff0c;数据集标注了手机&#xff0c;标签名&#xff1a;telephone,数据集总共有1960张&#xff0c;有一部分是…

web安全学习笔记(10)

记一下第十四节课的内容。 一、MySQL学习 数据库基本结构&#xff1a;库——表——列——值 在本地打开navicat&#xff0c;连接数据库&#xff0c;新建一个liuyan库、liuyan库下新建一个member表&#xff1a; 在表里随意添加一些数据&#xff1a; 下面我们学习MySQL查询。新…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt 小区物业管理系统 的设计与实现

一.项目介绍 系统分为管理员 和 业主 两块&#xff1a; 管理员点击进入到系统操作界面&#xff0c;可以对首页、业主信息管理、管理员信息管理、 楼栋和房屋信息管理、物业费管理、地下停车位管理、公告信息管理、报修信息管理、 投诉管理以及个人信息等功能模块 …

SpringMVC 常用注解介绍

Spring MVC 常用注解介绍 文章目录 Spring MVC 常用注解介绍准备1. RequestMapping1.1 介绍2.2 注解使用 2. 请求参数2.1 传递单个参数2.2 传递多个参数2.3 传递对象2.4 传递数组 3. RequestParam3.1 注解使用3.2 传入集合 4. RequestBody5. PathVariable6. RequestPart7. Rest…

Linux安装和使用Android Debug Bridge(ADB)

目录 1、开发环境和工具 2、ADB是什么&#xff1f; 3、安装ADB 3.1、使用包管理器安装 ADB 3.2、手动安装 ADB 4、使用ADB 4.1、连接设备 4.2、执行shell命令 4.3、安装应用程序 4.4、截取屏幕截图 4.5、模拟按键和手势 4.6、上传文件到Android设备 4.7、从Android设备下载文件…