一、添加相关依赖
maven依赖
:
<dependencies> <!--spring jdbc Spring 持久化层支持jar包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.6.RELEASE</version> </dependency> <!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.31</version> </dependency> <!-- 数据源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.15</version> </dependency> <!--junit5测试--> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.9.0</version> </dependency> <!--当你引入Spring Context依赖之后,表示将Spring的基础依赖引入了--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.6.RELEASE</version> </dependency> <!--spring对junit的支持相关依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.6.RELEASE</version> </dependency>
注意:MySQL驱动的版本需要与下载使用的MySQL版本一致...
二、jdbc.properties配置文件
配置文件内容:
①用户 ②密码 ③url ④驱动
jdbc.user=root jdbc.password=abc123 jdbc.url=jdbc:mysql://localhost:3306/spring?characterEncoding=utf8&useSSL=false jdbc.driver=com.mysql.cj.jdbc.Driver
三、创建数据源对象,配置JdbcTemplate(XML配置文件)
这里通过XML配置文件的方式,读取外部属性文件jdbc.properties
,根据读取的信息来获取数据源对象。
这样做的好处是,当我们需要更换数据库账用户,或者是修改数据库地址时,只需要对外部配置文件进行修改即可。
配置jdbcTemplate对象时,id = jdbcTemplate
; class = org.springframework.jdbc.core.JdbcTemplate
<?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 http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 导入外部属性文件 --> <context:property-placeholder location="classpath:jdbc.properties" /> <!-- 创建数据源对象 --> <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> <property name="driverClassName" value="${jdbc.driver}"/> </bean> <!-- 配置jdbcTemplate对象,注入数据源 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="druidDataSource"/> </bean> </beans>
四、实现CRUD操作
无论是增删改操作,还是查询操作,第一步都是先编写SQL语句。
- 增删改操作时,调用
jdbcTemplate.update()
方法 - 查询操作时,可调用
jdbcTemplate.queryForObject()
和jdbcTemplate.query()
等方法
①添加操作
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; /** * @author .29. * @create 2023-02-06 19:34 */ @SpringJUnitConfig(locations = "classpath:beans.xml") public class JDBCTemplateTest { @Autowired private JdbcTemplate jdbcTemplate; @Test public void testUpdate(){ //1、添加操作 //第一步 编写sql语句 String sql = "insert into t_emp values(NULL,?,?,?);"; //第二步 调用jdbcTemplate的方法完成更新 int rows = jdbcTemplate.update(sql, "高启兰", 20, "女");//按顺序传入参数 /*也可通过数组传入参数 * Object[] params = {"高启强", 27, "男"} * int rows = jdbcTemplate.update(sql,params); * */ System.out.println("影响行数: "+rows); } }
②删除操作
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; /** * @author .29. * @create 2023-02-06 19:34 */ @SpringJUnitConfig(locations = "classpath:beans.xml") public class JDBCTemplateTest { @Autowired private JdbcTemplate jdbcTemplate; @Test public void testUpdate(){ //2.删除操作 String sql = "delete from t_emp where id = ?"; int rows = jdbcTemplate.update(sql,2); System.out.println(rows); } }
③修改操作
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; /** * @author .29. * @create 2023-02-06 19:34 */ @SpringJUnitConfig(locations = "classpath:beans.xml") public class JDBCTemplateTest { @Autowired private JdbcTemplate jdbcTemplate; @Test public void testUpdate(){ //3.修改操作 String sql = "update t_emp set name = ? where id = ?"; int rows = jdbcTemplate.update(sql,"强盛集团老总",1); System.out.println(rows); } }
④查询操作
查询操作,可以查询对象,查询集合,查询单个值等...
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import java.util.List; /** * @author .29. * @create 2023-02-06 19:34 */ @SpringJUnitConfig(locations = "classpath:beans.xml") public class JDBCTemplateTest { @Autowired private JdbcTemplate jdbcTemplate; //一、查询,返回对象 @Test public void testSelectObject(){ String sql = "select * from t_emp where id = ?"; //方法一,手动封装对象(不推荐,麻烦) Emp empResult = jdbcTemplate.queryForObject(sql,((resultSet, i) -> { Emp emp = new Emp(); emp.setId(resultSet.getInt("id")); emp.setName(resultSet.getString("name")); emp.setAge(resultSet.getInt("age")); emp.setSex(resultSet.getString("sex")); return emp; }),1); System.out.println(empResult); //方法二,直接调用方法封装对象 (new BeanPropertyRowMapper<>(Emp.class)) Emp empResult2 = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<>(Emp.class),1); System.out.println(empResult2); } //二、查询,返回List集合 @Test public void testSelectList(){ String sql = "select * from t_emp"; List<Emp> list = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(Emp.class)); System.out.println(list); } //三、查询,返回单个值 @Test public void testSelectSingle(){ String sql = "select count(*) from t_emp"; Integer count = jdbcTemplate.queryForObject(sql,Integer.class); System.out.println(count); }