What is JdbcTemplate?
The Spring framework encapsulates the JDBC, and the JDBCTemplate is used to facilitate the realization of the database.
How to use jdbcTemplate?
Ready to work
- Reference jar package
<!--jdbcTemplate相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--mysql 数据库驱动-->
<!-- Mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<!--数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.14</version>
</dependency>
- Configure database connection pool
<context:component-scan base-package="org.learn.spring5"></context:component-scan>
<!--引入外部的配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--配置数据库连接-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="url" value="${prop.url}"></property>
<property name="username" value="${prop.userName}"></property>
<property name="password" value="${prop.password}"></property>
<property name="driverClassName" value="${prop.driverClass}"></property>
</bean>
- Configure the jdbcTemplate object and inject the DataSource
<!--JdbcTemplate对象创建,注入dataSource对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入dataSource对象-->
<property name="dataSource" ref="dataSource"></property>
</bean>
- Create jdbc.properties
prop.driverClass=com.mysql.cj.jdbc.Driver
prop.url=jdbc:mysql://127.0.0.1:3306/spring5-demo?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=CONVERT_TO_NULL
prop.userName=root
prop.password=123456
- Create service class, dao class, inject jdbcTemplate object in dao class
package org.learn.spring5.service.impl;
import org.learn.spring5.dao.impl.UserDaoImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
//注入UserDao的对象
@Autowired
private UserDaoImpl userDao;
}
package org.learn.spring5.dao.impl;
import org.learn.spring5.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
public class UserDaoImpl implements UserDao{
//注入JdbcTemplate對象
@Autowired
private JdbcTemplate jdbcTemplate;
}
- Write entity class User
package org.learn.spring5.entiy;
public class User {
//id
private Integer id;
//用户名
private String userName;
//用户状态
private Integer status;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
}
- Create data and table structure
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL,
`user_name` varchar(22) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`status` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
Specific operation
- JdbcTemplate operation database-add function
1) Add the add method in the UserDaoImpl class
2) Call the update method of the JdbcTemplate object
package org.learn.spring5.dao.impl;
import org.learn.spring5.entiy.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class UserDaoImpl implements UserDao{
//注入JdbcTemplate對象
@Autowired
private JdbcTemplate jdbcTemplate;
public void add(User user) {
//1.創建sql語句
String sql="insert into t_user values(?,?,?)";
//2.調用方法实现
Object[] args={user.getId(),user.getUserName(),user.getStatus()};
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
}
}
3) Write test program
import org.junit.Test;
import org.learn.spring5.entiy.User;
import org.learn.spring5.service.impl.UserService;
import org.learn.spring5.service.impl.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestSpring5 {
/**
* 操作JdbcTemplate,添加操作
*/
@Test
public void testAdd() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
User user = new User();
user.setId(1);
user.setUserName("张三");
user.setStatus(1);
userService.addUser(user);
}
}
The program returns result 1, the identification data is added successfully!
- JdbcTemplate operation database-modification function
public int update(User user) {
String sql = "update t_user set user_name =?,status=? where id =?";
Object[] args = {user.getUserName(), user.getStatus(), user.getId()};
int update = jdbcTemplate.update(sql, args);
return update;
}
Write test program
//JdbcTemplate修改操作
@Test
public void testUpdate() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
User user = new User();
user.setId(1);
user.setUserName("张四");
user.setStatus(0);
userService.update(user);
}
- JdbcTemplate operation database-query function
1) The query returns a certain value
public int queryCount() {
String sql = "select count(*) from t_user";
Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
return count;
}
Write test program
//JdbcTemplate 查询操作,返回用户的数量
@Test
public void testQueryCount() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
int count = userService.queryCount();
System.out.println(count);
}
2) The query returns the object
public User findOne(Integer id) {
String sql = "select * from t_user where id =?";
User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), id);
return user;
}
Write test program
//JdbcTemplate 查询操作,返回对象根据id
@Test
public void testQueryById() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
User user = userService.queryById(1);
System.out.println(user);
}
3) The query returns a collection
//JdbcTemplate 查询操作,返回集合对象
@Test
public void testFindAll() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
List<User> all = userService.findAll();
System.out.println(all);
}
Write test program
//JdbcTemplate 查询操作,返回集合对象
@Test
public void testFindAll() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
List<User> all = userService.findAll();
System.out.println(all);
}
- JdbcTemplate operation database-delete function
public int del(Integer id) {
String sql = "delete from t_user where id =?";
int update = jdbcTemplate.update(sql, id);
return update;
}
Write test program
//JdbcTemplate删除操作
@Test
public void testDel() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
userService.del(1);
}
- JdbcTemplate operation database-batch add
public void batchAdd(List<Object[]> users) {
String sql = "insert into t_user values(?,?,?)";
int[] ints = jdbcTemplate.batchUpdate(sql, users);
System.out.println(Arrays.asList(ints));
}
Write test program
//JdbcTemplate 批量添加操作
@Test
public void batchAdd() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
List<Object[]> list = new ArrayList<Object[]>();
Object[] o1 = {"4","name1",0};
Object[] o2 = {"5","name2",0};
Object[] o3 = {"6","name3",0};
list.add(o1);
list.add(o2);
list.add(o3);
userService.batchAdd(list);
}
- JdbcTemplate operation database-batch modification and deletion
//批量修改操作
public void batchUpdate(List<Object[]> users) {
String sql = "update t_user set user_name =?,status=? where id =?";
int[] ints = jdbcTemplate.batchUpdate(sql, users);
System.out.println(Arrays.asList(ints).toString());
}
//批量删除操作
public void batchDel(List<Object[]> users) {
String sql = "delete from t_user where id =?";
int[] ints = jdbcTemplate.batchUpdate(sql, users);
System.out.println(ints);
}
Write test program
//JdbcTemplate 批量修改操作
@Test
public void batchUpdate() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
List<Object[]> list = new ArrayList<Object[]>();
Object[] o1 = {"namexiugai", 1, 4};
Object[] o2 = {"name2xiugai", 1, 5};
Object[] o3 = {"name3xiugai", 1, 6};
list.add(o1);
list.add(o2);
list.add(o3);
userService.batchUpdate(list);
}
//JdbcTemplate 批量删除操作
@Test
public void batchDel() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
List<Object[]> list = new ArrayList<Object[]>();
Object[] o1 = {4};
Object[] o2 = {5};
Object[] o3 = {6};
list.add(o1);
list.add(o2);
list.add(o3);
userService.batchDel(list);
}