目錄
1.JdbcTemplate概述
2.JdbcTemplate準(zhǔn)備工作
- 引入相關(guān) jar 包
- 如果是maven項(xiàng)目夷蚊,使用pom.xml代替引入jar包的過程(注意)
- 配置xml配置文件
3.JdbcTemplate 操作數(shù)據(jù)庫
- 準(zhǔn)備好數(shù)據(jù)庫uset_db創(chuàng)建一個(gè)t_user表
- 對(duì)應(yīng)數(shù)據(jù)庫創(chuàng)建User實(shí)體類
- 創(chuàng)建UserDao接口并創(chuàng)建UserDaoImpl類
- 創(chuàng)建UserService類并在其中注入U(xiǎn)serDao
- 編寫測(cè)試類進(jìn)行測(cè)試
4.JdbcTemplate源碼解釋
- jdbcTemplate.update(增刪改操作)
- jdbcTemplate.queryForObject(返回記錄條數(shù))
- jdbcTemplate.queryForObject(返回對(duì)象)
- jdbcTemplate.query(返回對(duì)象集合)
- jdbcTemplate.batchUpdate(批量操作)
JdbcTemplate概述
Spring 框架對(duì) JDBC 進(jìn)行封裝俊性,使用 JdbcTemplate 方便實(shí)現(xiàn)對(duì)數(shù)據(jù)庫操作馍忽。
JdbcTemplate準(zhǔn)備工作
引入相關(guān) jar 包
如果是maven項(xiàng)目祸轮,使用pom.xml代替引入jar包的過程(注意)
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.Keafmd</groupId>
<artifactId>day04_eesy_01jdbctemplate</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>7</source>
<target>7</target>
</configuration>
</plugin>
</plugins>
</build>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
————————————————
maven項(xiàng)目的代碼結(jié)構(gòu):
配置xml配置文件
在 spring 配置文件配置數(shù)據(jù)庫連接池垒在,配置 JdbcTemplate 對(duì)象,注入 DataSource檩禾。配置時(shí)用的是引用外部配置文件,所以還需要引入外部的屬性文件疤祭,同時(shí)創(chuàng)建對(duì)象時(shí)是基于注解的所以還要開啟組件掃描盼产。
bean1.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:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
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/util http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--開啟組件掃描-->
<context:component-scan base-package="com.Keafmd"></context:component-scan>
<!--引入外部的屬性文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--配置連接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClass}"></property>
<property name="url" value="${jdbc.url}" ></property>
<property name="username" value="${jdbc.username}" ></property>
<property name ="password" value="${jdbc.password}" ></property>
</bean>
<!--創(chuàng)建jdbcTemplate對(duì)象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入DataSource-->
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
jdbc.properties:
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/user_db?characterEncoding=utf8&useUnicode=true&useSSL=false
jdbc.username=root
jdbc.password=root
JdbcTemplate 操作數(shù)據(jù)庫
相關(guān)的操作及注釋都在代碼中,請(qǐng)看代碼勺馆。
準(zhǔn)備好數(shù)據(jù)庫uset_db創(chuàng)建一個(gè)t_user表
對(duì)應(yīng)數(shù)據(jù)庫創(chuàng)建User實(shí)體類
User類:
package com.Keafmd.spring5.entity;
/**
* Keafmd
*
* @ClassName: User
* @Description: 數(shù)據(jù)庫對(duì)應(yīng)user實(shí)體類
* @author: 牛哄哄的柯南
* @date: 2021-01-19 10:07
*/
public class User {
private String userId;
private String username;
private String ustatus;
public User() {
}
public User(String userId, String username, String ustatus) {
this.userId = userId;
this.username = username;
this.ustatus = ustatus;
}
public void setUserId(String userId) {
this.userId = userId;
}
public void setUsername(String username) {
this.username = username;
}
public void setUstatus(String ustatus) {
this.ustatus = ustatus;
}
public String getUserId() {
return userId;
}
public String getUsername() {
return username;
}
public String getUstatus() {
return ustatus;
}
@Override
public String toString() {
return "User{" +
"userId='" + userId + '\'' +
", username='" + username + '\'' +
", ustatus='" + ustatus + '\'' +
'}';
}
}
創(chuàng)建UserDao接口并創(chuàng)建UserDaoImpl類
在UserDaoImpl內(nèi)注入jdbcTemplate戏售。
UserDao接口:
package com.Keafmd.spring5.dao;
import com.Keafmd.spring5.entity.User;
import java.util.List;
/**
* Keafmd
*
* @ClassName: UserDao
* @Description:
* @author: 牛哄哄的柯南
* @date: 2021-01-19 9:56
*/
public interface UserDao {
//添加方法
void add(User user);
//修改方法
void updateUser(User user);
//刪除方法
void delete(String id);
//查詢記錄數(shù)
int selectCount();
//查詢返回對(duì)象
User findUserInfo(String id);
//查詢集合
List<User> findAllUser();
//批量添加
void batchAddUser(List<Object[]> batchArgs);
//批量修改
void batchUpdateUser(List<Object[]> batchArgs);
//批量刪除
void batchDeleteUser(List<Object[]> batchArgs);
}
UserDaoImpl類:
package com.Keafmd.spring5.dao;
import com.Keafmd.spring5.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.Arrays;
import java.util.List;
/**
* Keafmd
*
* @ClassName: UserDaoImpl
* @Description: UserDao實(shí)現(xiàn)類
* @author: 牛哄哄的柯南
* @date: 2021-01-19 9:56
*/
@Repository
public class UserDaoImpl implements UserDao {
//注入jdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
//添加的方法
@Override
public void add(User user) {
//創(chuàng)建sql語句
String sql=" INSERT INTO t_user (user_id, username, ustatus) VALUES (?, ?, ?) ";
// 調(diào)用方法實(shí)行
int updat = jdbcTemplate.update(sql,user.getUserId(),user.getUsername(),user.getUstatus());
// 返回成功的條數(shù)
System.out.println(updat);
}
//修改
@Override
public void updateUser(User user) {
String sql = "UPDATE user_db.t_user SET username = ?, ustatus = ? WHERE user_id = ?";
Object[] args = {user.getUsername(),user.getUstatus(),user.getUserId()};
int updat = jdbcTemplate.update(sql,args);
System.out.println(updat);
}
//刪除
@Override
public void delete(String id) {
String sql ="DELETE FROM user_db.t_user WHERE user_id = ?";
int updat = jdbcTemplate.update(sql,id);
System.out.println(updat);
}
//查詢記錄數(shù)
@Override
public int selectCount() {
String sql ="SELECT COUNT(*) FROM t_user";
Integer count = jdbcTemplate.queryForObject(sql,Integer.class);
return count;
}
//返回對(duì)象
@Override
public User findUserInfo(String id) {
String sql ="SELECT * FROM t_user where user_id = ?";
User user = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),id);
return user;
}
//返回集合對(duì)象
@Override
public List<User> findAllUser() {
String sql = "select * from t_user";
List<User> userList =jdbcTemplate.query(sql,new BeanPropertyRowMapper<User>(User.class));
return userList;
}
//批量添加
@Override
public void batchAddUser(List<Object[]> batchArgs) {
String sql=" INSERT INTO t_user (user_id, username, ustatus) VALUES (?, ?, ?) ";
int []ints = jdbcTemplate.batchUpdate(sql,batchArgs);
System.out.println(Arrays.toString(ints));
}
//批量修改
@Override
public void batchUpdateUser(List<Object[]> batchArgs) {
String sql = "UPDATE user_db.t_user SET username = ?, ustatus = ? WHERE user_id = ?";
int []ints = jdbcTemplate.batchUpdate(sql,batchArgs);
System.out.println(Arrays.toString(ints));
}
//批量刪除
@Override
public void batchDeleteUser(List<Object[]> batchArgs) {
String sql ="DELETE FROM user_db.t_user WHERE user_id = ?";
int []ints = jdbcTemplate.batchUpdate(sql,batchArgs);
System.out.println(Arrays.toString(ints));
}
}
創(chuàng)建UserService類并在其中注入U(xiǎn)serDao
UserService類:
package com.Keafmd.spring5.service;
import com.Keafmd.spring5.dao.UserDao;
import com.Keafmd.spring5.dao.UserDaoImpl;
import com.Keafmd.spring5.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* Keafmd
*
* @ClassName: BookService
* @Description:
* @author: 牛哄哄的柯南
* @date: 2021-01-19 9:55
*/
@Service
public class UserService {
//注入dao
@Autowired
private UserDao userDao;
//添加的方法
public void addUser(User user){
userDao.add(user);
}
//修改的方法
public void updateUser(User user){
userDao.updateUser(user);
}
//刪除的方法
public void deleteUser(String id){
userDao.delete(id);
}
//查詢表中的記錄數(shù)
public int findCount(){
return userDao.selectCount();
}
//查詢返回對(duì)象
public User findOne(String id){
return userDao.findUserInfo(id);
}
//查詢返回集合
public List<User> findAll(){
return userDao.findAllUser();
}
//批量添加
public void batchAdd(List<Object[]> batchArgs){
userDao.batchAddUser(batchArgs);
}
//批量修改
public void batchUpdate(List<Object[]> batchArgs){
userDao.batchUpdateUser(batchArgs);
}
//批量刪除
public void batchDelete(List<Object[]> batchArgs){
userDao.batchDeleteUser(batchArgs);
}
}
編寫測(cè)試類進(jìn)行測(cè)試
TestUser :
package com.Keafmd.spring5.test;
import com.Keafmd.spring5.entity.User;
import com.Keafmd.spring5.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.ArrayList;
import java.util.List;
/**
* Keafmd
*
* @ClassName: TestUser
* @Description:
* @author: 牛哄哄的柯南
* @date: 2021-01-19 10:35
*/
public class TestUser {
@Test
public void testJdbcTemplate(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userService", UserService.class);
//添加
/*User user = new User("001","Keafmd","11");
userService.addUser(user);*/
//更新
/*User user1 = new User("001","Keafmd","2");
userService.updateUser(user1);*/
//刪除
/*String id = "2";
userService.deleteUser(id);*/
//返回總條數(shù)
int count = userService.findCount();
System.out.println(count);
// 返回對(duì)象
User user = userService.findOne("1");
System.out.println(user);
// 返回集合對(duì)象
List<User> userList =userService.findAll();
System.out.println(userList);
//批量添加
/*List<Object[]> batchArgs = new ArrayList<>();
Object[]o1 = {"7","77","7"};
Object[]o2 = {"8","88","8"};
Object[]o3 = {"9","99","9"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
userService.batchAdd(batchArgs);*/
//批量修改
/*List<Object[]> batchArgs = new ArrayList<>();
Object[]o11 = {"tt","2","7"};
Object[]o22 = {"uu","2","8"};
Object[]o33 = {"ii","2","9"};
batchArgs.add(o11);
batchArgs.add(o22);
batchArgs.add(o33);
userService.batchUpdate(batchArgs);*/
//批量刪除
List<Object[]> batchArgs = new ArrayList<>();
Object[]o1 = {"7"};
Object[]o2 = {"8"};
Object[]o3 = {"9"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
userService.batchDelete(batchArgs);
}
}
輸出結(jié)果:
一月 19, 2021 4:05:28 下午 com.alibaba.druid.pool.DruidDataSource info
信息: {dataSource-1} inited
9
User{userId='1', username='Keafmd', ustatus='2'}
[User{userId='1', username='Keafmd', ustatus='2'}, User{userId='2', username='aa', ustatus='1'}, User{userId='3', username='bb', ustatus='1'}, User{userId='4', username='cc', ustatus='1'}, User{userId='5', username='dd', ustatus='1'}, User{userId='6', username='ee', ustatus='1'}, User{userId='7', username='tt', ustatus='2'}, User{userId='8', username='uu', ustatus='2'}, User{userId='9', username='ii', ustatus='2'}]
[1, 1, 1]
Process finished with exit code 0
上面兩行紅色的是日志信息,不是報(bào)錯(cuò)草穆,不用擔(dān)心灌灾。
JdbcTemplate源碼解釋
jdbcTemplate.update(增刪改操作)
在增刪改操作中調(diào)用的jdbcTemplate.update(sql,id);中有兩個(gè)參數(shù)。 源碼:
public int update(String sql, @Nullable Object... args) throws DataAccessException {
return this.update(sql, this.newArgPreparedStatementSetter(args));
}
第一個(gè)參數(shù):sql 語句悲柱。
第二個(gè)參數(shù):可變參數(shù)锋喜,設(shè)置為 sql 語句值。
jdbcTemplate.queryForObject(返回記錄條數(shù))
在查詢記錄數(shù)操作中調(diào)用的
jdbcTemplate.queryForObject(sql,Integer.class);中有兩個(gè)參數(shù)豌鸡。
源碼:
public <T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException {
return this.queryForObject(sql, this.getSingleColumnRowMapper(requiredType));
}
兩個(gè)參數(shù):
第一個(gè)參數(shù):sql 語句嘿般。
第二個(gè)參數(shù):返回類型 Class。
jdbcTemplate.queryForObject(返回對(duì)象)
在返回對(duì)象中調(diào)用的
jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper(User.class),id);中有三個(gè)參數(shù)涯冠。
源碼:
public <T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args) throws DataAccessException {
List<T> results = (List)this.query((String)sql, (Object[])args, (ResultSetExtractor)(new RowMapperResultSetExtractor(rowMapper, 1)));
return DataAccessUtils.nullableSingleResult(results);
}
有三個(gè)參數(shù) :
第一個(gè)參數(shù):sql 語句炉奴。
第二個(gè)參數(shù):RowMapper 是接口,針對(duì)返回不同類型數(shù)據(jù)功偿,使用這個(gè)接口里面實(shí)現(xiàn)類完成數(shù)據(jù)封裝盆佣。
第三個(gè)參數(shù):sql 語句值。
jdbcTemplate.query(返回對(duì)象集合)
在返回對(duì)象集合中調(diào)用的jdbcTemplate.query(sql,newBeanPropertyRowMapper(User.class));中有兩個(gè)參數(shù)械荷。
源碼:
public <T> List<T> query(String sql, RowMapper<T> rowMapper) throws DataAccessException {
return (List)result(this.query((String)sql, (ResultSetExtractor)(new RowMapperResultSetExtractor(rowMapper))));
}
有兩個(gè)個(gè)參數(shù) :
第一個(gè)參數(shù):sql 語句共耍。
第二個(gè)參數(shù):RowMapper 是接口,針對(duì)返回不同類型數(shù)據(jù)吨瞎,使用這個(gè)接口里面實(shí)現(xiàn)類完成數(shù)據(jù)封裝痹兜。
jdbcTemplate.batchUpdate(批量操作)
在批量操作中調(diào)用的jdbcTemplate.batchUpdate(sql,batchArgs);有兩個(gè)參數(shù)。
源碼:
public int[] batchUpdate(String sql, List<Object[]> batchArgs) throws DataAccessException {
return this.batchUpdate(sql, batchArgs, new int[0]);
}
有兩個(gè)參數(shù) :
第一個(gè)參數(shù):sql 語句颤诀。
第二個(gè)參數(shù):List 集合字旭,添加了多條記錄數(shù)據(jù)对湃。
以上就是Spring中使用JdbcTemplate操作數(shù)據(jù)庫(增刪改查以及批量操作)附帶源碼解釋的全部內(nèi)容。
看完如果對(duì)你有幫助遗淳,感謝點(diǎn)贊支持拍柒!
如果你是電腦端的話,看到右下角的 “一鍵三連” 了嗎屈暗,沒錯(cuò)點(diǎn)它[哈哈]
原文鏈接:
https://blog.csdn.net/weixin_43883917/article/details/112845731