在传统方法中,我们一般建立 Connection 链接,然后通过 Statement stm = conn.createStatement() 来获取 Statement 对象,最后用 Statement 对象操作数据库。
在 spring 中,则是通过 com.alibaba 的 druid 配置数据源工具,来配置要连接的数据库,然后将配置好的数据源作为属性传入 JDBCTemplate 对象当中,最后用 JDBCTemplate 对象操作数据库。
org.springframework
spring-jdbc
6.0.2
mysql
mysql-connector-java
8.0.30
com.alibaba
druid
1.0.31
package com.mysql.conn;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
//使用spring整合junit5进行测试
@SpringJUnitConfig(locations = "classpath:bean-jdbc.xml")
public class TestUpdate {
@Autowired
public JdbcTemplate jdbcTemplate;
@Test
public void testUpdate() {
String sql ="insert into user values(?,?,?)";
int rows = jdbcTemplate.update(sql,11,"lucy","30");
System.out.println(rows);
}
}
String sql ="insert into user values(?,?,?)";
Object[] x={11,"lucy","30"};
int rows = jdbcTemplate.update(sql,x);
System.out.println(rows);
String sql ="delete from user where id = ? ";
int rows = jdbcTemplate.update(sql,10);
System.out.println(rows);
String sql ="update user set account=?,password=? where id=?";
int rows = jdbcTemplate.update(sql,"James",123,8);
System.out.println(rows);
① 创建对象类
package com.mysql.conn;
public class User {
private int id;
private String account;
private String password;
//生成set方法,这一步很关键
public void setId(int id) {
this.id = id;
}
public void setAccount(String account) {
this.account = account;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", account='" + account + '\'' +
", password='" + password + '\'' +
'}';
}
}
② 测试类
package com.mysql.conn;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
@SpringJUnitConfig(locations = "classpath:bean-jdbc.xml")
public class TestUpdate {
@Autowired
public JdbcTemplate jdbcTemplate;
@Test
public void testUpdate() {
String sql ="select * from user where id = ?";
//第一种写法
User user1 = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<>(User.class),1);
System.out.println(user1);
//第二种写法
User user2 = jdbcTemplate.queryForObject(sql,
(rs, rowNum) -> {
User user = new User();
user.setId(rs.getInt("id"));
user.setAccount(rs.getString("account"));
user.setPassword(rs.getString("password"));
return user;
}, 2);
System.out.println(user2);
}
}
① 目标类不变
② 测试类
package com.mysql.conn;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import java.util.List;
@SpringJUnitConfig(locations = "classpath:bean-jdbc.xml")
public class TestUpdate {
@Autowired
public JdbcTemplate jdbcTemplate;
@Test
public void testUpdate() {
String sql ="select * from user";
List list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
System.out.println(list);
}
}
测试类(查询多少行)
package com.mysql.conn;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
@SpringJUnitConfig(locations = "classpath:bean-jdbc.xml")
public class TestUpdate {
@Autowired
public JdbcTemplate jdbcTemplate;
@Test
public void testUpdate() {
String sql ="select count(account) from user";
Integer i = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(i);
}
}