Spring的数据库编程
创始人
2025-05-30 18:00:24
0

1.JDBCTemplate 

针对数据库操作,Spring框架提供了JdbcTemplate类,JdbcTemplate是一个模板类,Spring JDBC中的更高层次的抽象类均在JdbcTemplate模板类的基础上创建。JdbcTemplate类提供了操作数据库的基本方法,包括添加、删除、查询和更新。在操作数据库时,JdbcTemplate类简化了传统JDBC中的复杂步骤,这可以让开发人员将更多精力投入到业务逻辑中。

JdbcTemplate类继承自抽象类JdbcAccessor,同时实现了JdbcOperations接口。抽象类JdbcAccessor提供了一些访问数据库时使用的公共属性,具体如下:

  • DataSource: DataSource主要功能是获取数据库连接。在具体的数据操作中,它还提供对数据库连接的缓冲池和分布式事务的支持。
  • SQLExceptionTranslator: SQLExceptionTranslator是一个接口,它负责对SQLException异常进行转译工作。

2.Spring JDBC的配置

Spring JDBC中的4个包说明

Spring对数据库的操作都封装在core、dataSource、object和support这4个包,使用Spring JDBC,就要对这些包进行配置。在Spring中,JDBC的配置是在配置文件applicationContext.xml中完成的。 

3.配置数据源:

包括数据库驱动、连接数据库url、连接数据库用户名、连接数据库密码。

下面看具体操作:

第一步引入依赖:


4.0.0org.example_202303191.0-SNAPSHOT88UTF-8org.springframeworkspring-context5.2.3.RELEASEorg.springframeworkspring-beans5.2.3.RELEASEmysqlmysql-connector-java5.1.47org.springframeworkspring-jdbc5.3.6

UserDao操作数据库

package cn.hdc;import org.springframework.jdbc.core.JdbcTemplate;public class UserDaoImpl {private JdbcTemplate jdbcTemplate;public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public JdbcTemplate getJdbcTemplate() {return jdbcTemplate;}
}

applicationContext.xml配置信息:



测试类:

import cn.hdc.UserDaoImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class APP {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserDaoImpl userDao = (UserDaoImpl) context.getBean("userDao");System.out.println(userDao.getJdbcTemplate());}
}

运行结果:

注意:

dataSource配置4个属性的含义

 

在dataSource的4个属性中,需要根据数据库类型或者系统配置设置相应的属性值。例如,如果数据库类型不同,需要更改驱动名称;如果数据库不在本地,则需要将地址中的localhost替换成相应的主机IP;默认情况下,数据库端口号可以省略,但如果修改过MySQL数据库的端口号,则需要加上修改后的端口号。此外,连接数据库的用户名和密码需要与数据库创建时设置的用户名和密码保持一致。

4.JDBCTemplate的常用方法

熟悉excute()方法,能够在程序中使用excute()方法

代码示例:


4.0.0org.example_202303191.0-SNAPSHOT88UTF-8org.springframeworkspring-context5.2.3.RELEASEorg.springframeworkspring-beans5.2.3.RELEASEmysqlmysql-connector-java5.1.47org.springframeworkspring-jdbc5.3.6org.springframeworkspring-tx5.3.6
package cn.hdc;import org.springframework.jdbc.core.JdbcTemplate;public class UserDaoImpl {private JdbcTemplate jdbcTemplate;public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public JdbcTemplate getJdbcTemplate() {return jdbcTemplate;}
}



import cn.hdc.UserDaoImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;public class APP {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");jdbcTemplate.execute("create table account" +"(" +"    id int primary key auto_increment," +"    username varchar(50)," +"    balance double" +");");System.out.println("account表创建成功!");//        UserDaoImpl userDao = (UserDaoImpl) context.getBean("userDao");//        System.out.println(userDao.getJdbcTemplate());}
}

运行结果:

成功创建了account表!

update方法代码示例:

JdbcTemplate类中常用的update()方法

 

代码示例:

pom.xml


4.0.0org.example_202303191.0-SNAPSHOT88UTF-8org.springframeworkspring-context5.2.3.RELEASEorg.springframeworkspring-beans5.2.3.RELEASEmysqlmysql-connector-java5.1.47org.springframeworkspring-jdbc5.3.6org.springframeworkspring-tx5.3.6

AccountDao接口:

package cn.hdc.dao;import cn.hdc.model.Account;public interface AccountDao {public Integer addAccount(Account account);public Integer deleteAccount(Integer id);public Integer updateAccount(Account account);}

AccountDaoImpl类:

package cn.hdc.dao.impl;import cn.hdc.dao.AccountDao;
import cn.hdc.model.Account;
import org.springframework.jdbc.core.JdbcTemplate;public class AccountDaoImpl implements AccountDao {private JdbcTemplate jdbcTemplate;public JdbcTemplate getJdbcTemplate() {return jdbcTemplate;}public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}@Overridepublic Integer addAccount(Account account) {String sql = "insert into account(username,balance) values(?,?)";Object[] params = new Object[]{account.getUsername(), account.getBalance()};jdbcTemplate.update(sql, params);return jdbcTemplate.update(sql, params);}@Overridepublic Integer deleteAccount(Integer id) {return 0;}@Overridepublic Integer updateAccount(Account account) {return 0;}
}

Account类:

package cn.hdc.model;public class Account {private Integer id;private String username;private Double balance;@Overridepublic String toString() {return "Account{" +"id=" + id +", username='" + username + '\'' +", balance=" + balance +'}';}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 Double getBalance() {return balance;}public void setBalance(Double balance) {this.balance = balance;}
}

applicationContext.xml



测试类:

import cn.hdc.dao.AccountDao;
import cn.hdc.dao.impl.AccountDaoImpl;
import cn.hdc.model.Account;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;public class APP {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");AccountDao accountDao = (AccountDao) context.getBean("accountDao");Account account = new Account();account.setUsername("tom");account.setBalance(1000.011);Integer ret = accountDao.addAccount(account);if (ret > 0) {System.out.println("插入成功!");} else {System.out.println("插入失败!");}//        jdbcTemplate.execute("create table account" +
//                "(" +
//                "    id int primary key auto_increment," +
//                "    username varchar(50)," +
//                "    balance double" +
//                ");");
//        System.out.println("account表创建成功!");//        UserDaoImpl userDao = (UserDaoImpl) context.getBean("userDao");//        System.out.println(userDao.getJdbcTemplate());}
}

运行结果:

 

 

增加,删除,修改的实现代码:

pom.xml


4.0.0org.example_202303191.0-SNAPSHOT88UTF-8org.springframeworkspring-context5.2.3.RELEASEorg.springframeworkspring-beans5.2.3.RELEASEmysqlmysql-connector-java5.1.47org.springframeworkspring-jdbc5.3.6org.springframeworkspring-tx5.3.6

AccountDao接口:

package cn.hdc.dao;import cn.hdc.model.Account;public interface AccountDao {public Integer addAccount(Account account);public Integer deleteAccount(Integer id);public Integer updateAccount(Account account);}

 AccountDaoImpl类:

package cn.hdc.dao.impl;import cn.hdc.dao.AccountDao;
import cn.hdc.model.Account;
import org.springframework.jdbc.core.JdbcTemplate;public class AccountDaoImpl implements AccountDao {private JdbcTemplate jdbcTemplate;public JdbcTemplate getJdbcTemplate() {return jdbcTemplate;}public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}@Overridepublic Integer addAccount(Account account) {String sql = "insert into account(username,balance) values(?,?)";Object[] params = new Object[]{account.getUsername(), account.getBalance()};jdbcTemplate.update(sql, params);return jdbcTemplate.update(sql, params);}@Overridepublic Integer deleteAccount(Integer id) {String sql = "delete from account where id = ?";return jdbcTemplate.update(sql, id);}@Overridepublic Integer updateAccount(Account account) {String sql = "update account set username=?,balance=? where id=?";Object[] params = new Object[]{account.getUsername(), account.getBalance(), account.getId()};return jdbcTemplate.update(sql, params);}
}

Account实体类:

package cn.hdc.model;public class Account {private Integer id;private String username;private Double balance;@Overridepublic String toString() {return "Account{" +"id=" + id +", username='" + username + '\'' +", balance=" + balance +'}';}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 Double getBalance() {return balance;}public void setBalance(Double balance) {this.balance = balance;}
}

 applicationContext.xml



测试类:

import cn.hdc.dao.AccountDao;
import cn.hdc.dao.impl.AccountDaoImpl;
import cn.hdc.model.Account;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;public class APP {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");AccountDao accountDao = (AccountDao) context.getBean("accountDao");Integer ret = accountDao.deleteAccount(2);if (ret > 0) {System.out.println("删除成功!");} else {System.out.println("删除失败!");}
//        Account account1 = new Account();
//        account1.setId(2);
//        account1.setUsername("zhangsan");
//        account1.setBalance(5000.02153);
//        Integer ret = accountDao.updateAccount(account1);
//        if (ret > 0) {
//            System.out.println("修改成功!");
//        } else {
//            System.out.println("修改失败!");
//        }//        Account account = new Account();
//        account.setUsername("tom");
//        account.setBalance(1000.011);
//        Integer ret = accountDao.addAccount(account);
//        if (ret > 0) {
//            System.out.println("插入成功!");
//        } else {
//            System.out.println("插入失败!");
//        }//        jdbcTemplate.execute("create table account" +
//                "(" +
//                "    id int primary key auto_increment," +
//                "    username varchar(50)," +
//                "    balance double" +
//                ");");
//        System.out.println("account表创建成功!");//        UserDaoImpl userDao = (UserDaoImpl) context.getBean("userDao");//        System.out.println(userDao.getJdbcTemplate());}
}

通过刚才的例子,我们已经了解到JdbcTemplate类中的增,删,改操作,接下来,我们在看看JdbcTemplate类中的查操作。

JdbcTemplate类中常用的查询方法

 

代码示例:

Account实体类:

package cn.hdc.model;public class Account {private Integer id;private String username;private Double balance;@Overridepublic String toString() {return "Account{" +"id=" + id +", username='" + username + '\'' +", balance=" + balance +'}';}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 Double getBalance() {return balance;}public void setBalance(Double balance) {this.balance = balance;}
}

AccountDao接口:

package cn.hdc.dao;import cn.hdc.model.Account;import java.util.List;public interface AccountDao {public Integer addAccount(Account account);public Integer deleteAccount(Integer id);public Integer updateAccount(Account account);public Account findAccountById(Integer id);public List findAll();
}

AccountDaoImpl类:

package cn.hdc.dao.impl;import cn.hdc.dao.AccountDao;
import cn.hdc.model.Account;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;import java.util.List;public class AccountDaoImpl implements AccountDao {private JdbcTemplate jdbcTemplate;public JdbcTemplate getJdbcTemplate() {return jdbcTemplate;}public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}@Overridepublic Integer addAccount(Account account) {String sql = "insert into account(username,balance) values(?,?)";Object[] params = new Object[]{account.getUsername(), account.getBalance()};jdbcTemplate.update(sql, params);return jdbcTemplate.update(sql, params);}@Overridepublic Integer deleteAccount(Integer id) {String sql = "delete from account where id = ?";return jdbcTemplate.update(sql, id);}@Overridepublic Integer updateAccount(Account account) {String sql = "update account set username=?,balance=? where id=?";Object[] params = new Object[]{account.getUsername(), account.getBalance(), account.getId()};return jdbcTemplate.update(sql, params);}@Overridepublic Account findAccountById(Integer id) {String sql = "select * from account where id = ?";RowMapper accountRowMapper = new BeanPropertyRowMapper<>(Account.class);Account account = jdbcTemplate.queryForObject(sql, accountRowMapper, id);return jdbcTemplate.queryForObject(sql, accountRowMapper, id);}@Overridepublic List findAll() {String sql = "select * from account";RowMapper accountRowMapper = new BeanPropertyRowMapper<>(Account.class);List list = jdbcTemplate.query(sql, accountRowMapper);return list;}
}

测试类:

import cn.hdc.dao.AccountDao;
import cn.hdc.dao.impl.AccountDaoImpl;
import cn.hdc.model.Account;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;import java.util.List;public class APP {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");AccountDao accountDao = (AccountDao) context.getBean("accountDao");List list = accountDao.findAll();list.forEach(account -> {System.out.println(account);});//        Account account = accountDao.findAccountById(1);
//        System.out.println(account);//        Integer ret = accountDao.deleteAccount(2);
//        if (ret > 0) {
//            System.out.println("删除成功!");
//        } else {
//            System.out.println("删除失败!");
//        }
//        Account account1 = new Account();
//        account1.setId(2);
//        account1.setUsername("zhangsan");
//        account1.setBalance(5000.02153);
//        Integer ret = accountDao.updateAccount(account1);
//        if (ret > 0) {
//            System.out.println("修改成功!");
//        } else {
//            System.out.println("修改失败!");
//        }//        Account account = new Account();
//        account.setUsername("tom");
//        account.setBalance(1000.011);
//        Integer ret = accountDao.addAccount(account);
//        if (ret > 0) {
//            System.out.println("插入成功!");
//        } else {
//            System.out.println("插入失败!");
//        }//        jdbcTemplate.execute("create table account" +
//                "(" +
//                "    id int primary key auto_increment," +
//                "    username varchar(50)," +
//                "    balance double" +
//                ");");
//        System.out.println("account表创建成功!");//        UserDaoImpl userDao = (UserDaoImpl) context.getBean("userDao");//        System.out.println(userDao.getJdbcTemplate());}
}

applicatioContext.xml



相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...