JdbcTemplate类中常用的update()方法
方法 | 说明 |
int update(String sql) | 直接传入SQL语句,并返回受影响的行数 |
int update(PreparedStatementCreator psc) | 执行从PreparedStatementCreator返回的语句,然后返回受影响的行数 |
int update(String sql,PreparedStatementSetter pss) | 通过PreparedStatementSetter设置SQL语句中的参数,并返回受影响的行数 |
int update(String sql,Object...args) | 使用Object...设置SQL语句中的参数,参数不能为NULL,并返回受影响的行数 |
第一步:在com.itheima.jdbc包中,创建Account类,并定义id、username和balance属性,以及getter/setter方法
package com.itheima.jdbc;
public class Account {
private Integer id;
private String username;
private Double 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;
}
@Override
public String toString() {
return "Account [id=" + id + ", username=" + username + ", balance=" + balance + "]";
}
}
第二步:在com.itheima.jdbc包中,创建接口AccountDao,并定义三个方法
package com.itheima.jdbc;
public interface AccountDao {
//添加
public int addAccount(Account account);
//更新
public int updateAccount(Account account);
//删除
public int deleteAccount(int id);
}
第三步:创建接口的实现类
package com.itheima.jdbc;
import org.springframework.jdbc.core.JdbcTemplate;
public class AccountDaoImpl implements AccountDao {
//声明JdbcTemplate属性及其setter方法
/*
* 想要使用JdbcTemplcat类的方法,需要先声明再使用
*/
private JdbcTemplate jdbcTemplate;
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
//添加账户
@Override //account负责接收测试类set传过来的值
public int addAccount(Account account) {
//1、定义SQL insert into 表名(字段名1,字段名2...) values(值1,值2...)
String sql="insert into user01(username,balance) values(?,?)";
//2、定义数组来存储SQL语句中的参数
Object[] obj= new Object[] {
//get获取测试类Test,set传过来的值
account.getUsername(),
account.getBalance(),
};
//3、执行添加操作,返回的是受SQL语句影响的记录条数
/*
* JdbcTemplate类中的所有方法调用后,都会返回受影响的行数,
* 所以这里定义了一个整型变量num来作为返回值
*/
int num=this.jdbcTemplate.update(sql,obj);
return num;
}
//更新账户
@Override
public int updateAccount(Account account) {
//1、定义SQL
/**
* 定义SQL语句时,数组中参数与定义SQL语句参数顺序必须一致
* 如:"update user01 set username=?,balance=? where id=?"
* 则:Object[] params = new Object[] {account.getUsername(),account.getBalance(),account.getId()};
*/
String sql = "update user01 set username=?,balance=? where id=?";
//2、定义数组来存储SQL语句中的参数
Object[] params = new Object[] {
account.getUsername(),
account.getBalance(),
account.getId()
};
/**
* JdbcTemplate类中的所有方法调用后,都会返回受影响的行数,
* 所以这里定义了一个整型变量num来作为返回值
*
* int num :定义num为整型变量
*
* this.jdbcTemplate.update(sql,params):
* 使用JdbcTemplate类的update()方法执行更新操作,第一个值为sql语句,第二个值为参数,且多个参数值按sql语句对应顺序中间逗号隔开
*
* 3、调用JdbcTemplate中的update()方法
* update()写法一:
* int num=this.jdbcTemplate.update("update user01 set username=?,balance=? where id=?",
* account.getUsername(), account.getBalance(), account.getId());
*
*/
//3、调用JdbcTemplate中的update()方法
//update()写法二:
int num=this.jdbcTemplate.update(sql,params);
//给调用者返回受影响的行数
return num;
}
//删除账户
@Override
public int deleteAccount(int id) {
//1、定义SQL
String sql = "delete from user01 where id=?";
//2、执行删除操作,返回的是受SQL语句影响的记录条数
/*
* JdbcTemplate类中的所有方法调用后,都会返回受影响的行数,
* 所以这里定义了一个整型变量num来作为返回值
*/
int num = this.jdbcTemplate.update(sql,id);
//3、返回受影响行数
return num;
}
}
第四步:在applicationContext.xml中,配置id为dataSource的数据源Bean,
和id为jdbcTemplate的JDBC模板Bean,并将数据源注入到JDBC模板中,
最后定义一个id为accountDao的Bean,
第五步:创建测试类
package com.itheima.jdbc;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
public class JdbcTemplateTest {
/**
* 使用execute()方法创建表
*/
@Test
public static void main01Test(String[] args) {
//加载配置文件
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
//获取JdbcTemplat实例
JdbcTemplate jdbcTemplate = (JdbcTemplate) applicationContext.getBean("jdbcTemplate");
//使用该实例的execute(String sql)方法执行创建数据表的SQL语句
jdbcTemplate.execute("create table user03("
+ "id int primary key auto_increment,"
+ "username varchar(10),"
+ "balance double)");
System.out.println("创建成功");
}
@Test
public static void main02Test(String[] args){
//加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取AccountDao实例
AccountDao accountDao = (AccountDao) applicationContext.getBean("accountDao");
//创建AccountDao对象,并向Account对象中添加数据
Account account = new Account();
account.setId(3);
account.setUsername("jjj");
account.setBalance(3000.00);
//执行addAccount()方法,并获取返回结果
int num = accountDao.addAccount(account); if(num>0) {
System.out.println("成功插入"+num); }else { System.out.println("插入操作执行失败"); }
}
@Test
public static void main03Test(String[] args){
//加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取AccountDao实例
AccountDao accountDao = (AccountDao) applicationContext.getBean("accountDao");
//创建AccountDao对象,并向Account对象中添加数据
Account account = new Account();
account.setId(4);
account.setUsername("ggg");
account.setBalance(4000.00);
/**
* int num 定义一个整型变量
* accountDao.updateAccount(account)调用updateAccount(Account account)方法
*/
/*
* 调用流程:首先这里带着account数组参数进入到AccountDao接口,
* AccountDao接口带着数组,去找AccountDaoImpl实现类,
* 在AccountDaoImpl实现类中通过get方法获取数组参数,并利用JdbcTemplate类中的方法,进行相应操作,并给予返回值,
* AccountDaoImpl实现类将返回值传给调用它的测试类Test,
* 然后这里定义的整型num就获取到了AccountDaoImpl返回的参数
*/
//执行updateAccount()方法,并获取返回结果
int num = accountDao.updateAccount(account);
//接收AccountDaoImpl的返回值
if(num>0) {
System.out.println("成功更新"+num+"行数据");
}else {
System.out.println("更新操作执行失败");
}
}
public static void main(String[] args){
//加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取AccountDao实例
AccountDao accountDao = (AccountDao) applicationContext.getBean("accountDao");
/*这里的删除操作,只做了指定id删除的动作,所以不需要数组了
* 创建AccountDao对象,并向Account对象中添加数据
* Account account = new Account();
* account.setId(5);
*/
/**
* int num 定义一个整型变量
* accountDao.updateAccount(account)调用updateAccount(Account account)方法
*/
/*
* 调用流程:首先这里带着account数组参数进入到AccountDao接口,
* AccountDao接口带着数组,去找AccountDaoImpl实现类,
* 在AccountDaoImpl实现类中通过get方法获取数组参数,并利用JdbcTemplate类中的方法,进行相应操作,并给予返回值,
* AccountDaoImpl实现类将返回值传给调用它的测试类Test,
* 然后这里定义的整型num就获取到了AccountDaoImpl返回的参数
*/
//执行updateAccount()方法,并获取返回结果
int num = accountDao.deleteAccount(5);
//接收AccountDaoImpl的返回值
if(num>0) {
System.out.println("成功删除"+num+"行数据");
}else {
System.out.println("删除操作执行失败");
}
}
}