原标题:如何使用 Spring 对数据库进行 CURD?
作者 | 阿文,责编 | 郭芮
头图 | CSDN 下载自视觉中国
作为一名程序员,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″?>
< beansxmlns= “http://www.springframework.org/schema/beans”
xmlns:xsi= “http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation= “http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd” >
<!–1配置数据源 –>
< beanid= “dataSource”
class= “org.springframework.jdbc.datasource.DriverManagerDataSource”>
<!–数据库驱动 –>
< propertyname= “driverClassName”value= “com.mysql.jdbc.Driver”/>
<!–连接数据库的ur1 –>
< propertyname= “url”value= “jdbc:mysql://localhost:3306/spring_db”/>
<!–连接数据库的用户名 –>
< propertyname= “username”value= “root”/>
<!–连接数据库的密码 –>
< propertyname= “password”value= “root”/>
</ bean>
<!–2配置JDBC模板 –>
< beanid= “jdbcTemplate”class= “org.springframework.jdbc.core.JdbcTemplate”>
<!–默认必须使用数据源 –>
< propertyname= “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;
QueryOK, 1row affected ( 0. 000sec)
第四步,在idea 工程中新建一个com.ssm.jdbc 的包,并在该包中创建一个JdbcTempTest的测试类,首先我们加载xml 配置,配置文件就是上面的xml配置文件,我们创建一个数据表为user_table,使用jdbctemp.execute(String s) 方法执行SQL语句。
@Test
publicvoidTestJdbcTemplate{
//加载配置
ApplicationContext applicationContext = newClassPathXmlApplicationContext( “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 forcompletion oftable andcolumn names
You can turn offthis feature togeta quicker startup with-A
Database changed
MariaDB [spring_db]> show tables;
+———————+
| Tables_in_spring_db |
+———————+
| user_table |
+———————+
1row inset( 0.000sec)
MariaDB [spring_db]>
下面,我们通过jdbc 来实现增删改查操作,首先,我们要创建一个类,名字为User,这个User 类中包含了用户的id、用户名和密码信息,并设置其set和get属性:
packagecom.ssm.jdbc;
publicclassUser{
privateInteger id;
privateString username;
privateString password;
publicInteger getId{
returnid;
}
publicvoidsetId(Integer id){
this.id = id;
}
publicString getUsername{
returnusername;
}
publicvoidsetUsername(String username){
this.username = username;
}
publicString getPassword{
returnpassword;
}
publicvoidsetPassword(String password){
this.password = password;
}
publicString toString{
return“User [id=”+ id + “, username=”+ username + “, password=”+ password + “]”;
}
}
然后我们创建一个UserDao 接口,该接口定义了添加、更新、删除、根据ID查询和查询所有用户的方法:
packagecom.ssm.jdbc;
importjava.util.List;
publicinterfaceUserDao{
publicintaddUser(User user);
publicintupdateUser(User user);
publicintdeleteUser( intid) ;
//通过id查询用户
publicUser findUserById( intid) ;
//查询所有用户
publicList<User> findAllUser;
}
接下来,我们来对UserDao的接口进行实现,在这个方法中我们对具体的增删改查逻辑进行设置,直接看代码吧:
package com.ssm.jdbc;
importorg.springframework.jdbc.core.BeanPropertyRowMapper;
importorg.springframework.jdbc.core.JdbcTemplate;
importorg.springframework.jdbc.core.RowMapper;
importjava.util. List;
public classUserDaoImplimplementsUserDao{
private JdbcTemplate jdbcTemplate;
public voidsetJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public intaddUser(User user) {
Stringsql= “insert into user_table(username,password) value(?,?)”;
Object[] obj= newObject[]{
user.getUsername,
user.getPassword
};
intnum= this.jdbcTemplate.update(sql,obj);
returnnum;
}
@Override
public intupdateUser(User user) {
Stringsql= “update user_table set username=?,password=? where id=?”;
Object[] params= newObject[]{
user.getUsername,
user.getPassword,
user.getId
};
intnum= this.jdbcTemplate.update(sql,params);
returnnum;
}
@Override
public intdeleteUser( intid) {
Stringsql= “delete from user_table where id=?”;
intnum= this.jdbcTemplate.update(sql,id);
returnnum;
}
@Override
public User findUserById( intid) {
Stringsql= “select * from user_table where id=?”;
RowMapper<User> rowMapper= newBeanPropertyRowMapper<User>(User. class);
returnthis.jdbcTemplate.queryForObject(sql,rowMapper,id);
}
@Override
public List<User> findAllUser {
Stringsql= “select * from user_table”;
RowMapper<User> rowMapper= newBeanPropertyRowMapper<User>(User. class);
returnthis.jdbcTemplate.query(sql,rowMapper);
}
}
然后我们在jdbc.xml 中加入bean,加入UserDao:
<!– 定义id为userDao的Bean –>
< beanid= “userDao”class= “com.ssm.jdbc.UserDaoImpl”>
<!–将 jdbcTemplate注入到 userDao实例中 –>
< propertyname= “jdbcTemplate”ref= “jdbcTemplate”/>
</ bean>
好了,一切准备就绪,我们接来下通过测试类来测试下具体的增删改查。
首先来测试下添加用户方法,如图下所示:
@ Test
publicvoidaddUserTest{
//加载jdbc.xml 配置文件
ApplicationContext applicationContext = newClassPathXmlApplicationContext( “jdbc.xml”);
//获取UserDao实例
UserDao userDao = (UserDao) applicationContext.getBean( “userDao”);
//创建user实例
User user = newUser;
//设置属性
user.setUsername( “张三”);
user.setPassword( “123”);
//添加用户
intnum = userDao.addUser(user);
if(num > 0) {
System. out.println( “Success insert “+num+ ” data”);
} else{
System. out.println( “erro”);
}
}
更新用户:
@ Test
publicvoidupdateUserTest{
//加载jdbc.xml 配置文件
ApplicationContext applicationContext = newClassPathXmlApplicationContext( “jdbc.xml”);
//获取UserDao实例
UserDao userDao = (UserDao) applicationContext.getBean( “userDao”);
//创建user实例
User user = newUser;
//设置属性
user.setId( 1);
user.setUsername( “李四”);
user.setPassword( “12345”);
//更新用户信息
intnum = userDao.updateUser(user);
if(num > 0) {
System. out.println( “Success update “+num+ ” data”);
} else{
System. out.println( “erro”);
}
}
删除用户:
@ Test
publicvoiddelUserTest{
//加载jdbc.xml 配置文件
ApplicationContext applicationContext = newClassPathXmlApplicationContext( “jdbc.xml”);
//获取UserDao实例
UserDao userDao = (UserDao) applicationContext.getBean( “userDao”);
//删除,传入ID值
intnum = userDao.deleteUser( 1);
if(num > 0) {
System. out.println( “Success delete “+num+ ” data”);
} else{
System. out.println( “erro”);
}
}
查询用户信息,包括了根据ID查询和查询所有:
@ Test
publicvoidfindUserTest{
//加载jdbc.xml 配置文件
ApplicationContext applicationContext = newClassPathXmlApplicationContext( “jdbc.xml”);
//获取UserDao实例
UserDao userDao = (UserDao) applicationContext.getBean( “userDao”);
//根据ID查询用户
User user = userDao.findUserById( 2);
System.out.println(user);
}
@ Test
publicvoidfindAllUserTest{
//加载jdbc.xml 配置文件
ApplicationContext applicationContext = newClassPathXmlApplicationContext( “jdbc.xml”);
//获取UserDao实例
UserDao userDao = (UserDao) applicationContext.getBean( “userDao”);
//根据ID查询用户
List<User> list= userDao.findAllUser;
for(User user: list){
System.out.println(user);
}
}
责任编辑: