JdbcTemplate
Posted Al_tair
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JdbcTemplate相关的知识,希望对你有一定的参考价值。
JdbcTemplate
JdbcTemplate
大家好呀,我是小笙!这节主要是对 JdbcTemplate 操作数据库应用的一个学习总结
Spring 提供了操作数据库(表)功能强大的类 JdbcTemplate,可以用来完成对数据库表的增删改查
首先说一下提供的依赖如下(版本最好一致)
<dependencies>
<!-- c3p0 连接池 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<!-- 连接 mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.8</version>
</dependency>
<!-- jdbcTemplate 的实现核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.8</version>
</dependency>
<!-- 对象关系映射 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.3.8</version>
</dependency>
<!-- 事务管理 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.8</version>
</dependency>
</dependencies>
1.配置数据库的基本信息
注意:需要放在资源路径下,配置文件才会起作用
jdbc.user: xxx
jdbc.pwd: xxxxxxxx
jdbc.driver: com.mysql.jdbc.Driver
jdbc.url: jdbc:mysql://ip:port/数据表名
配置 JdbcTemplate 对象,属性引用 dataSource 对象用来操作数据库对象
<?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">
<!-- 引入外部的 application.properties 文件的数据 -->
<context:property-placeholder location="application.properties"/>
<!-- 配置 C3P0 连接池的数据源对象 -->
<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">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置 NamedParameterJdbcTemplate-->
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" >
<!--构造器配置数据源-->
<constructor-arg name="dataSource" ref="dataSource"/>
</bean>
</beans>
操作对象 Monster
// 使用lombok组件可以简化很多代码
@Data
public class JdbcTemplate
private Integer id;
private String name;
private String skill;
public JdbcTemplate()
public JdbcTemplate(Integer id, String name, String skill)
this.id = id;
this.name = name;
this.skill = skill;
2.对数据库的增删改查操作
增加数据
@Test
@Transactional(rollbackFor=Exception.class)
public void insertTest()
ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate.xml");
// 获取 JdbcTemplate 对象
JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);
// 两种方式添加数据
String sql = "insert into monster values(1,'execute()方法','X')";
jdbcTemplate.execute(sql);
String sql2 = "insert into monster values(?,?,?)";
int res = jdbcTemplate.update(sql2, 2, "update()方法", "Y");
if(res == 0)
throw new RuntimeException();
使用具名参数添加数据的两种方式
@Test
@Transactional(rollbackFor=Exception.class)
public void insertData()
ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate.xml");
// 获取 NamedParameterJdbcTemplate 对象
NamedParameterJdbcTemplate bean = ioc.getBean(NamedParameterJdbcTemplate.class);
// 传入参数(注意:这里的参数引用名可以随意)
String sql = "insert into monster values(:id,:name,:skill)";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("id",600);
paramMap.put("name","孙悟空");
paramMap.put("skill","金箍棒");
bean.update(sql,paramMap);
@Test
@Transactional(rollbackFor=Exception.class)
public void insertData2()
ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate.xml");
// 获取 NamedParameterJdbcTemplate 对象
NamedParameterJdbcTemplate bean = ioc.getBean(NamedParameterJdbcTemplate.class);
// 传入参数(注意:这里的参数名不能随意,需要和对象对应)
String sql = "insert into monster values(:id,:name,:skill)";
// public int update(String sql, SqlParameterSource paramSource)
Monster monster = new Monster(700, "猪八戒", "九尺钉耙");
SqlParameterSource SqlParameterSource = new BeanPropertySqlParameterSource(monster);
bean.update(sql,SqlParameterSource);
批量添加数据
@Test
@Transactional(rollbackFor=Exception.class)
public void batchInsertTest()
ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate.xml");
// 获取 JdbcTemplate 对象
JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);
String sql = "insert into monster values(?,?,?)";
List<Object[]> list = new ArrayList<>();
// 存放问号里的参数
list.add(new Object[]400,"批量添加数据","测试1");
list.add(new Object[]500,"批量添加数据","测试2");
jdbcTemplate.batchUpdate(sql, list);
更新数据
@Test
@Transactional(rollbackFor=Exception.class)
public void updateTest()
ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate.xml");
// 获取 JdbcTemplate 对象
JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);
String sql = "update monster set name = ? where id = ?";
// 如果更新数据和原来数据一样,但是执行成功也算影响的行数
// 更新的方法和增加的方法相同
int update = jdbcTemplate.update(sql, "update()方法", 1);
查询数据并封装成对象返回
@Test
@Transactional(rollbackFor=Exception.class)
public void selectObject()
ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate.xml");
// 获取 JdbcTemplate 对象
JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);
String sql = "select `id`,`name`,skill from monster where id = 400";
RowMapper<Monster> rowMapper = new BeanPropertyRowMapper<>(Monster.class);
Monster monster1 = jdbcTemplate.queryForObject(sql, rowMapper);
System.out.println(monster1);
查询数据并封装成对象列表返回
// 如果只查询一部分该数据模型数据,那么不查询的数据默认输出为 null
@Test
@Transactional(rollbackFor=Exception.class)
public void selectObjectList()
ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate.xml");
// 获取 JdbcTemplate 对象
JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);
String sql = "select `id`,`name`,skill from monster where id >= ?";
RowMapper<Monster> rowMapper = new BeanPropertyRowMapper<>(Monster.class);
List<Monster> monsters = jdbcTemplate.query(sql, rowMapper,300);
System.out.println(monsters);
查询某一列的字段数据
@Test
@Transactional(rollbackFor=Exception.class)
public void selectFields()
ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate.xml");
// 获取 JdbcTemplate 对象
JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);
String sql = "select `name` from jdbcTemplate where id >= 300";
RowMapper<Monster> rowMapper = new BeanPropertyRowMapper<>(Monster.class);
List<String> names = jdbcTemplate.queryForList(sql, String.class);
System.out.println(names);
以上是关于JdbcTemplate的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot入门二,添加JdbcTemplate数据源
Spring之004: jdbcTemplate基本使用Spring实物控制