作者 | 阿文,责编 | 郭芮

头图 | CSDN 下载自视觉中国

出品 | CSDN(ID:CSDNnews)

作为一名程序员,CURD(增删改查)是一件必不可少的事情,甭管你是初级程序员还是高级程序员都会和数据库打交道。那么在Java中如何通过Spring 框架来对数据库进行操作呢?本文将带你一起来学习。

Spring框架针对数据库提供了JdbcTemplate 类,JdbcTemplate 是Spring 数据抽象层的基础,其他更高层次的抽象类都是构建在其基础之上,JdbcTemplate 是Spring JDBC的核心类。JdbcTemplate 继承自抽象类JdbcAccessor,同时实现了JdbcOperations 接口,JdbcTemplate定义在了JdbcTemplate类中从而可以使用增删改查来对数据库进行操作。JdbcTemplate 的直接父类是JdbcAccessor,它提供了一些访问数据库时所需要使用的公共属性,包括DataSource以及SQLExceptionTranslator 等。前者用于获取数据库连接以及引入对数据库连接的缓冲池以及分布式事务等支出。后者是对SQLException 进行转译工作。

首先,我来说下本次文档所需要准备的工具,具体如下:

  • idea 社区版

  • maven,idea 自带的

  • mysql 或Mariadb

接下来,我们先简单介绍下Spring JDBC 模块,它主要包括core、dataSource、object、support四个包,分别提供的功能如下:

  • core 包括JDBC的核心功能,例如JdbcTemplate类、simpleJdbcInsert类、simpleJdbcCall 类以及NamedParameterJdbcTemplate类。

  • dataSource 包括了访问数据库的实用工具类。

  • object 以OOP的方式访问数据库,它允许执行查询操作并将返回结果作为业务对象,可以在数据表和业务对象的属性直接映射查询关系。

  • support 包括core 和object包的支持类,例如提供一些SQLException类。

我们了解了这些模块的功能,接来下我们看看怎么去配置JDBC,下面是 JDBC的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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.3.xsd"><!--1配置数据源 --><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><!--数据库驱动 --><property name="driverClassName" value="com.mysql.jdbc.Driver" /><!--连接数据库的ur1 --><property name="url" value="jdbc:mysql://localhost:3306/spring_db" /><!--连接数据库的用户名 --><property name="username" value="root" /><!--连接数据库的密码 --><property name="password" value="root" /></bean><!--2配置JDBC模板 --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><!--默认必须使用数据源 --><property name="dataSource" ref="dataSource" /></bean>
</beans>

在上述xml 文件中的beans 中定义了两个bean,分别是dataSource、jdbcTemplate。

其中dataSource的类是由org.springframework.jdbc.datasource.DriverManagerDataSource 提供,包含了4个属性分别对应的是:

  • driverClassName,它是数据库的驱动,值是com.mysql.jdbc.Driver;

  • url 数据库的访问地址,如上所示,jdbc:mysql://localhost:3306/spring_db  中的localhost 为你的数据库地址 3306 为数据库的连接断开,斜杠后面的spring_db 表示需要连接的数据库名称;

  • username  数据库的用户名;

  • password 数据库的密码;

下面我们通过实例的方式来讲解如何通过JDBC来对数据库进行操作,我们需要进行以下准备工作。

首先,我们需要配置maven的pom.xml  下载所需要的jar包,包括spring-jdbc、mysql-connector-java:

    <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.6.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version></dependency>

第二步,需要有一个可以反问的数据库,比如我的数据库设置密码为root

mysqladmin -u root password root

第三步.创建一个spring_db 的表,并且需要授权用户远程访问,如果是本地这一步可以不用做

MariaDB [(none)]> create database spring_db;
Query OK, 1 row affected (0.000 sec)

第四步,在idea 工程中新建一个com.ssm.jdbc 的包,并在该包中创建一个JdbcTempTest的测试类,首先我们加载xml 配置,配置文件就是上面的xml配置文件,我们创建一个数据表为user_table,使用jdbctemp.execute(String s) 方法执行SQL语句。

  @Testpublic void TestJdbcTemplate() {//加载配置ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//获取JdbcTemplate实例JdbcTemplate jdbctemp = (JdbcTemplate) applicationContext.getBean("jdbcTemplate");jdbctemp.execute("create table user_table(" +"id int primary key auto_increment," +"username varchar(80)," +"password varchar(40))");}

我们执行该测试类,然后进入数据库,我们可以看到该表已经被创建出来了:

MariaDB [(none)]> use spring_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
MariaDB [spring_db]> show tables;
+---------------------+
| Tables_in_spring_db |
+---------------------+
| user_table          |
+---------------------+
1 row in set (0.000 sec)MariaDB [spring_db]>

下面,我们通过jdbc 来实现增删改查操作,首先,我们要创建一个类,名字为User,这个User 类中包含了用户的id、用户名和密码信息,并设置其set和get属性:

package com.ssm.jdbc;public class User {private Integer id;private String username;private String password;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 String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String toString() {return "User [id=" + id + ", username=" + username + ", password=" + password + "]";}
}

然后我们创建一个UserDao 接口,该接口定义了添加、更新、删除、根据ID查询和查询所有用户的方法:

package com.ssm.jdbc;import java.util.List;public interface UserDao {public int addUser(User user);public int updateUser(User user);public int deleteUser(int id);//通过id查询用户public User findUserById(int id);//查询所有用户public List<User> findAllUser();}

接下来,我们来对UserDao的接口进行实现,在这个方法中我们对具体的增删改查逻辑进行设置,直接看代码吧:

package com.ssm.jdbc;import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;import java.util.List;public class UserDaoImpl implements UserDao {private JdbcTemplate jdbcTemplate;public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}@Overridepublic int addUser(User user) {String sql="insert into user_table(username,password) value(?,?)";Object[] obj=new Object[]{user.getUsername(),user.getPassword()};int num=this.jdbcTemplate.update(sql,obj);return num;}@Overridepublic int updateUser(User user) {String sql="update user_table set username=?,password=? where id=?";Object[] params=new Object[]{user.getUsername(),user.getPassword(),user.getId()};int num=this.jdbcTemplate.update(sql,params);return num;}@Overridepublic int deleteUser(int id) {String sql="delete from user_table where id=?";int num=this.jdbcTemplate.update(sql,id);return num;}@Overridepublic User findUserById(int id) {String sql="select * from user_table where id=?";RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);return this.jdbcTemplate.queryForObject(sql,rowMapper,id);}@Overridepublic List<User> findAllUser() {String sql="select * from user_table";RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);return this.jdbcTemplate.query(sql,rowMapper);}
}

然后我们在jdbc.xml 中加入bean,加入UserDao:

 <!-- 定义id为userDao的Bean --><bean id="userDao" class="com.ssm.jdbc.UserDaoImpl"><!--将 jdbcTemplate注入到 userDao实例中 --><property name="jdbcTemplate" ref="jdbcTemplate" /></bean>

好了,一切准备就绪,我们接来下通过测试类来测试下具体的增删改查。

首先来测试下添加用户方法,如图下所示:

 @Testpublic void addUserTest(){//加载jdbc.xml 配置文件ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//获取UserDao实例UserDao userDao = (UserDao) applicationContext.getBean("userDao");//创建user实例User user = new User();//设置属性user.setUsername("张三");user.setPassword("123");//添加用户int num = userDao.addUser(user);if (num > 0) {System.out.println("Success insert "+num+" data");}else {System.out.println("erro");}}

更新用户:

 @Testpublic void updateUserTest(){//加载jdbc.xml 配置文件ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//获取UserDao实例UserDao userDao = (UserDao) applicationContext.getBean("userDao");//创建user实例User user = new User();//设置属性user.setId(1);user.setUsername("李四");user.setPassword("12345");//更新用户信息int num = userDao.updateUser(user);if (num > 0) {System.out.println("Success update "+num+" data");}else {System.out.println("erro");}}

删除用户:

 @Testpublic void delUserTest(){//加载jdbc.xml 配置文件ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//获取UserDao实例UserDao userDao = (UserDao) applicationContext.getBean("userDao");//删除,传入ID值int num = userDao.deleteUser(1);if (num > 0) {System.out.println("Success delete "+num+" data");}else {System.out.println("erro");}}

查询用户信息,包括了根据ID查询和查询所有:

@Test
public void findUserTest(){//加载jdbc.xml 配置文件ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//获取UserDao实例UserDao userDao = (UserDao) applicationContext.getBean("userDao");//根据ID查询用户User user = userDao.findUserById(2);System.out.println(user);}@Test
public void findAllUserTest(){//加载jdbc.xml 配置文件ApplicationContext applicationContext = new ClassPathXmlApplicationContext("jdbc.xml");//获取UserDao实例UserDao userDao = (UserDao) applicationContext.getBean("userDao");//根据ID查询用户List<User> list =  userDao.findAllUser();for (User user:list){System.out.println(user);}}

好了,以上就是关于如果使用Spring JDBC 操作数据库实现增删改查的方法。

更多精彩推荐☞AI 世界的硬核之战,Tengine 凭什么成为最受开发者欢迎的主流框架?
☞说了这么多 5G,最关键的技术在这里
☞360金融新任首席科学家:别指望AI Lab做成中台
☞AI图像智能修复老照片,效果惊艳到我了
☞程序员内功修炼系列:10 张图解谈 Linux 物理内存和虚拟内存
☞当 DeFi 遇上 Rollup,将擦出怎样的火花?
你点的每个“在看”,我都认真当成了喜欢

如何使用 Spring 对数据库进行 CURD?相关推荐

  1. Spring之数据库操作

    本文主要包括以下内容 spring+jdbc数据库操作 spring+jdbc声明事务处理 spring+hibernate声明事务处理 spring+jdbc数据库操作 方法 1.让自己写的一个da ...

  2. Spring访问数据库异常的处理方法(转)

    原文链接:http://sarin.javaeye.com/blog/888458 今天我们将谈谈Spring访问数据库异常的处理方法,使用JDBC API时,很多操作都要声明抛出java.sql.S ...

  3. Spring 实现数据库读写分离

    Spring 实现数据库读写分离 现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库.Master库负责数据更新和实时数据查询,Slave库当然 ...

  4. Spring的数据库编程浅入浅出——不吹牛逼不装逼

    Spring的数据库编程浅入浅出--不吹牛逼不装逼 前言 上文书我写了Spring的核心部分控制反转和依赖注入,后来又衔接了注解,在这后面本来是应该写Spring AOP的,但我觉得对于初学者来说,这 ...

  5. Spring嵌入式数据库示例

    在本教程中,我们将向您展示一些示例,以在Spring框架中配置嵌入式数据库引擎,例如HSQL,H2和Derby. 使用的技术: 春天4.1.6.RELEASE jUnit 4.1.2 Maven 3 ...

  6. spring boot数据库问号问题

    spring boot数据库问号问题 spring.datasource.url = jdbc:mysql://localhost:3306/dbmedicine?useSSL=true&ch ...

  7. SpringBoot实战(四)之使用JDBC和Spring访问数据库

    这里演示的是h2databse示例,所以简单的介绍普及下h2database相关知识 H2数据库是一个开源的关系型数据库. H2是一个嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提 ...

  8. Spring Boot数据库操作原理及整合druid数据源和mybatis

    在Spring Boot中如果需要访问数据库,我需要导入以下两个依赖: <dependency><groupId>org.springframework.boot</gr ...

  9. Spring(5)——Spring 和数据库编程

    传统 JDBC 回顾 JDBC 我们一定不陌生,刚开始学习的时候,我们写过很多很多重复的模板代码: public Student getOne(int id) {String sql = " ...

最新文章

  1. 取消tableView上面多出来20个像素
  2. 017_SpringBoot异常处理方式-自定义错误页面
  3. CentOS6 vsftpd 安装及优化方法
  4. CTL_CODE说明
  5. 【Attention九层塔】注意力机制的九重理解
  6. centos6.5 安装hadoop1.2.1亲测版
  7. 224秒!ImageNet上训练ResNet-50最佳战绩出炉,索尼下血本破纪录
  8. IC设计EDA软件虚拟机环境配置与安装教程
  9. 学好C++能够从事哪些岗位?
  10. 对面象对象概念的理解、解释
  11. [HDU2294]Pendant
  12. 自动生成构造方法、getter、setter
  13. 微信小程序 实现城市名称拼音搜索框 汉字/拼音(城市区县定位模块)
  14. 医号馆诊所管理软件系统更新,新增人脸识别、处置单等功能!
  15. Duplicate Net Names Wire Net......
  16. 微信小程序给用户发红包
  17. python情绪识别_使用百度对话情绪识别api分析文本
  18. 直播平台开发过程中关于谷歌fcm推送介绍
  19. EXCEL如何实现两个表的相应数据关联
  20. java画太极加图片_Android 画一个太极图实例代码

热门文章

  1. 史上最全的MSSQL复习笔记
  2. android4.3 Bluetooth分析之扫描分析
  3. PHP GD压缩图片
  4. windows和linux下读取文件乱码的终极解决办法!
  5. Nokia n900使用
  6. 产品工作中/阅读中的涓滴意念
  7. python 图表 web_新手向——制作web图表(基于Python和GooPyCharts)
  8. python内存管理错误的是_解读Python内存管理机制(转载)
  9. 二分查找以及数组下标的移动规律
  10. Flutter游戏:垃圾里会生蚊子