【Spring5】使用JdbcTemplate操作mysql数据库
创始人
2024-04-10 08:09:08

在这里插入图片描述


文章目录

  • 1 JdbcTemplate简介及操作准备
  • 2 添加操作
  • 3 修改与删除操作
  • 4 数据库查询操作
    • 4.1 返回一个值
    • 4.2 返回对象
    • 4.3 返回集合
  • 5 批量操作
    • 5.1 批量添加与修改
    • 5.2 批量修改与批量删除
  • 写在最后


1 JdbcTemplate简介及操作准备

Spring框架对JDBC进行封装,使用JdbcTemplate方便对数据库的操作。

操作准备:

1.导入相关依赖,文末附下载链接。
在这里插入图片描述

2.创建数据库,便于使用。以在mysql数据库中创建user_db为例。
在这里插入图片描述

3.配置xml文件,添加数据库连接相关信息,如密码用户名等。(连接池的配置)
在这里插入图片描述

4.配置JdbcTemplate对象,注入DataSource。
在这里插入图片描述

5.创建一个Service类,创建Dao类,在Dao类中注入jdbcTemplate对象。需要开启组件扫描,完整的spring配置文件如下:
在这里插入图片描述




6.在各类上添加对应的注解。
在这里插入图片描述

在这里插入图片描述

至此,准备工作就完成啦!


2 添加操作

1.在user_db数据库中创建t_user表,sql语句如下:

CREATE TABLE t_user(user_id BIGINT PRIMARY KEY NOT NULL ,username VARCHAR(100) NOT NULL ,ustatus VARCHAR(50) NOT NULL
)

2.新建一个包entity用于存放实体类,创建t_user表对应的实体类User,并添加相应的set、get方法。
在这里插入图片描述

3.编写service和dao,在dao中进行数据库的添加操作。 UserDao接口声明add方法,UserService进行添加操作,而 UserDaoImp具体实现数据库的添加操作。 需要使用jdbcTemplate的update方法。
在这里插入图片描述
第一个参数为编写的sql语句,第二个参数为可变参数,用于设置值。

在这里插入图片描述
具体代码如下:
UserDao

import com.ithxh.spring5.entity.User;/*** @author 兴趣使然黄小黄* @version 1.0*/
public interface UserDao {void add(User user);
}

UserDaoImp

import com.ithxh.spring5.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;/*** @author 兴趣使然黄小黄* @version 1.0*/
@Repository
public class UserDaoImp implements UserDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//实现添加的方法@Overridepublic void add(User user) {//编写sql语句String sql = "insert into t_user values(?,?,?)";//调用方法实现Object[] args = {user.getUserId(), user.getUsername(), user.getUstatus()};int update = jdbcTemplate.update(sql, args);//返回影响行数System.out.println("影响的行数: " + update);}
}

UserService

import com.ithxh.spring5.dao.UserDao;
import com.ithxh.spring5.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author 兴趣使然黄小黄* @version 1.0*/
@Service
public class UserService {//注入dao@Autowiredprivate UserDao userDao;//添加的方法public void addUser(User user){userDao.add(user);}
}

4.编写测试类,尝试给表添加数据。

    @Testpublic void testJdbcTemplate(){ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");UserService userService = context.getBean("userService", UserService.class);User user = new User();user.setUserId("120");user.setUsername("黄小黄");user.setUstatus("true");userService.addUser(user);}

在这里插入图片描述
请添加图片描述


3 修改与删除操作

修改与删除操作大体与添加操作一致,只需要修改相应的sql语句。这里对核心代码进行简述:

修改和删除操作

UserDaoImp中实现修改和删除的方法

    //实现修改的方法@Overridepublic void update(User user) {String sql = "update t_user set user_id = ?, username = ?, ustatus = ?";Object[] args = {user.getUserId(), user.getUsername(), user.getUstatus()};int update = jdbcTemplate.update(sql, args);System.out.println("影响的行数: " + update);}//实现删除的方法@Overridepublic void delete(String id) {String sql = "delete from t_user where user_id = ?";int update = jdbcTemplate.update(sql, id);System.out.println(update);}

需要注意,UserDao应该对修改和删除方法进行声明,UserService中则需要像这样,调用UserDaoImp中的方法:
在这里插入图片描述

测试修改:

    @Testpublic void testJdbcTemplate(){ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");UserService userService = context.getBean("userService", UserService.class);User user = new User();user.setUserId("111");user.setUsername("懒羊羊");user.setUstatus("true");userService.updateUser(user);}

在这里插入图片描述

测试删除:

    @Testpublic void testJdbcTemplate(){ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");UserService userService = context.getBean("userService", UserService.class);String id = "111";userService.deleteUser(id);}

在这里插入图片描述


4 数据库查询操作

4.1 返回一个值

示例:查询表中有多少条记录,返回的是一个值,表示表中数据的条数

    //查询有多少条记录@Overridepublic int findCountUser() {String sql = "select count(*) from t_user";Integer res = jdbcTemplate.queryForObject(sql, Integer.class);//第二个参数是返回值类型return res;}

4.2 返回对象

示例:查询用户详细信息。

通过jdbcTemlate中的queryForObject方法实现:
在这里插入图片描述

  • 第一个参数:sql语句;
  • 第二个参数:RowMapper,是一个接口,返回不同类型的数据,使用这个接口的实现类完成数据的封装。
  • 第三个参数:sql语句值。

首先先在数据库中t_user表插入如下信息:

INSERT INTO t_user VALUES (111, '黄小黄', 'true');
INSERT INTO t_user VALUES (222, '懒羊羊', 'true');

在UserDao中声明,UserDaoImp中实现查询方法,UserService使用:

    //查询返回对象@Overridepublic User findUserInfo(String id) {String sql = "select * from t_user where user_id = ?";User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper(User.class), id);return user;}

查询测试:

    @Testpublic void testJdbcTemplate(){ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");UserService userService = context.getBean("userService", UserService.class);User one = userService.findOne("111");System.out.println(one);}

在这里插入图片描述

4.3 返回集合

与返回对象类似,这里以查询user信息为例,返回t_user中的所有记录

通过jdbcTemlate中的query方法实现:
在这里插入图片描述

  • 第一个参数:sql语句;
  • 第二个参数:RowMapper,是一个接口,返回不同类型的数据,使用这个接口的实现类完成数据的封装。
  • 第三个参数:sql语句值(没有可以省略)。

在UserDao中声明,UserDaoImp中实现查询方法,UserService使用:

    //查询返回集合@Overridepublic List findAllUser() {String sql = "select * from t_user";List userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper(User.class));return userList;}

测试并遍历:

    @Testpublic void testJdbcTemplate(){ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");UserService userService = context.getBean("userService", UserService.class);List userList = userService.findAll();for (User user :userList) {System.out.println(user);}}

在这里插入图片描述


5 批量操作

对表中多条记录进行操作,批量操作主要通过javaTemplate中的batchUpdate方法实现
在这里插入图片描述

  • 第一个参数:sql语句;
  • 第二个参数:List集合,添加多条记录数据。

5.1 批量添加与修改

UserDaoImp类中批量添加的代码如下:

    //批量添加@Overridepublic void batchAddUser(List batchArgs) {String sql = "insert into t_user values(?,?,?)";int[] update = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println("影响的行数: " + update);}

测试类中批量添加:

    @Testpublic void testJdbcTemplate(){ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");UserService userService = context.getBean("userService", UserService.class);//向表中添加三条记录List batchArgs = new ArrayList<>();Object[] o1 = {1, "nezuko", "true"};Object[] o2 = {2, "dog", "true"};Object[] o3 = {3, "participant", "true"};batchArgs.add(o1);batchArgs.add(o2);batchArgs.add(o3);userService.batchAdd(batchArgs);}

在这里插入图片描述
在这里插入图片描述

5.2 批量修改与批量删除

批量修改与批量删除与批量添加类似,只需要更改相应的sql语句,这里只展示核心代码:

批量修改

    //批量修改@Overridepublic void batchUpdate(List batchArgs) {String sql = "update t_user set username = ?, ustatus = ? where user_id = ?";int[] update = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println("影响的行数: " + Arrays.toString(update));}

批量删除

    //批量删除@Overridepublic void batchDelete(List batchArgs) {String sql = "delete from t_user where user_id = ?";int[] update = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println("影响的行数: " + Arrays.toString(update));}

写在最后

 至此,使用JdbcTemplate进行数据库简单的增删改查操作已经讲解完了,下一节将会继续讲解有关事务的操作,JdbcTemplate实验相关环境依赖已经上传,下载链接附上:druid-1.1.9.jar+mysql-connector-java-8.0.29.jar等JdbcTempate操作资源

在这里插入图片描述

相关内容

热门资讯

受严寒天气影响 美载人绕月飞行... 经济观察网 据央视新闻客户端消息,当地时间1月30日,美国国家航空航天局表示,受发射场接近冰点的低温...
通信巨头保险中介业务分化:移动... 中经记者 樊红敏 北京报道近日,中国移动通过线下营业厅开卖保险产品一事引发业内关注。据报道,2026...
内调外养,保持皮肤健康状态 【健·妙招】  作者:张苍(北京中医医院主任医师)  一到冬季,不少人便受到皮肤干燥、瘙痒甚至脱屑的...
学网络工程就业前景 学网络工程... 不管是上大学,还是学习技术的,还是做生意的话,大家都是为了在这个社会当中能够发展的更好,所以网络工程...
制药工程硕士就业前景 制药工程... 从20世纪80年代以来,世界医药市场每年以8-10%的速度增长,中国药品市场以20%左右的速度增长....