针对数据库的操作,Spring框架提供了JdbcTemplate类,该类是Spring框架数据抽象层的基础,JdbcTemplate类是Spring JDBC的核心类。
2、Spring JDBC的配置Spring JDBC模板主要由四个包组成,core(核心包)、dataSource(数据包)、object(对象包)和support(支持包),具体说明如下表:
使用JDBC需要在applicationContext.xml中完成配置,配置模板如下:
dataSource中有四个属性:
driverClassName:所使用驱动名称,对应Jar包中的Driver类【com.mysql.jdbc.Driver】
url:数据库源所在地址。MySQL通常配为【jdbc:mysql://localhost:3306/db_spring】(其中db_spring数据库名,3306为默认端口号)
username:访问数据库用户名
password:访问数据库密码
定义jdbcTemplate时,需要把dataSource注入到jdbcTemplate中,而其他使用jdbcTemplate的Bean,也需要将jdbcTemplate注入到Bean中。
二、spring JdbcTemplate的常用方法JdbcTemplate类中提供了大量更新和查询数据库的方法。
前提:
- 首先创建一个Web项目以及一个名为db_spring数据库将需要的JAR包导入到项目中 在src目录下创建applicationContext.xml配置文件
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句(创建数据库以及数据表);
applicationContext.xml配置文件
创建测试类JdbcTemplateTest
public class JdbcTemplateTest {
public static void main(String[] args) {
//加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取JdbcTemplate实例
JdbcTemplate jdbcTemplate = (JdbcTemplate) applicationContext.getBean("jdbcTemplate");
//使用execute()方法执行SQL语句,创建用户表user
jdbcTemplate.execute("create table user(" +
"id int primary key auto_increment," +
"username varchar(40)," +
"password varchar(40))");
}
}
运行后测试成功
2、update()——更新数据(1)创建实体类User,定义id、username、password属性,及其对应的setter()、getter() 方法。
package com.ssm.jdbc;
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void setId(int id) {
this.id = id;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}
(2)创建UserDao接口,定义添加、删除、修改用户的方法
package com.ssm.jdbc;
import java.util.List;
import org.springframework.stereotype.Repository;
public interface UserDao {
public int addUser(User user);
public int updateUser(User user);
public int deleteUser(int id);
}
(3)创建UserDaoImpl类,实现UserDao接口,并实现接口中的方法
package com.ssm.jdbc;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository("userDao")
public class UserDaoImpl implements UserDao{
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
//新增
public int addUser(User user) {
String sql="insert into user(username,password) value(?,?)";
Object[] iobj=new Object[]{
user.getUsername(),
user.getPassword()
};
int num=this.jdbcTemplate.update(sql,iobj);
return num;
}
//修改
public int updateUser(User user) {
String sql="update user set username=?,password=? where id=?";
Object[] uobj=new Object[]{
user.getUsername(),
user.getPassword(),
user.getId()
};
int num=this.jdbcTemplate.update(sql,uobj);
return num;
}
//删除
public int deleteUser(int id) {
String sql="delete from user where id=?";
int num=this.jdbcTemplate.update(sql,id);
return num;
}
}
(4)在applicationContext.xml中添加bean注入
下面展示一些 内联代码片。
(5)在JdbcTemplateTest测试类中添加测试方法addUser()用于添加用户信息、updateUserTest()更新信息和DeleteUserTest()删除信息。
package com.ssm.jdbc;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
public class JdbcTemplateTest {
@Test
public void addUser(){
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao=(UserDao) app.getBean("userDao");
User user=new User();
user.setUsername("admin");
user.setPassword("admin");
int num=userDao.addUser(user);
if(num>0){
System.out.println("成功插入"+num+"条数据");
}else{
System.out.println("插入数据执行失败");
}
}
@Test
public void updateUserTest(){
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao=(UserDao) app.getBean("userDao");
User user=new User();
user.setId(2);
user.setUsername("HQX");
user.setPassword("123456");
int num=userDao.updateUser(user);
if(num>0){
System.out.println("成功修改"+num+"条数据");
}else{
System.out.println("修改数据执行失败");
}
}
@Test
public void DeleteUserTest(){
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao=(UserDao) app.getBean("userDao");
int num=userDao.deleteUser(6);
if(num>0){
System.out.println("成功删除"+num+"条数据");
}else{
System.out.println("删除数据执行失败");
}
}
添加@Test注释,用JUnit4测试运行。测试成功。
| 方法 | 说明 |
|---|---|
| List query( String sql,RowMapperrowMapper) | 执行String类型参数提供的SQL语句,并通过RowMapper返回一个List类型的结果。 |
| List query(String sql,PreparedStatementSetterpss,RowMapperrowMapper) | 根据 String类型参数提供的SQL语句创建PreparedStatement对象,通过RowMapper将结果返回到List中。 |
| List query( String sql,RowMapperrowMapper) | 使用Object的值来设置SQL语句中的参数值,采用RowMapper回调方法可以直接返回List类型的数据。 |
| queryForObject(String sql, RowMapperrowMapper,Object…args) | 将args参数绑定到5QL语句中,并通过RowMapper返回一个Object类型的单行记录。 |
| queryForList(string sql, Object[] args, classelementType) | 该方法可以返回多行数据的结果,但必须是返回列表,elementType参数返回的是List元素类型。 |
下面展示实例 通过id查询单个用户和查询所有的数据。
1、在UserDao中添加两个方法
//查询单个用户 public User findUser(int id); //查询所有 public ListfindAllUser();
2、在UserDaoImpl中实现方法,并用query()方法进行查询
public User findUser(int id) {
String sql="select * from user where id=?";
RowMapper mapper=new BeanPropertyRowMapper(User.class);
return this.jdbcTemplate.queryForObject(sql, mapper,id);
}
public List findAllUser() {
String sql="select * from user ";
RowMapper rowmapper=new BeanPropertyRowMapper(User.class);
return this.jdbcTemplate.query(sql, rowmapper);
}
上述代码中,BeanPropertyRowMapper是RowMapper接口的实现类可以自动将数据表中的数据映射到用户自定义的类中(前提自定义类中的字段要与数据表中字段相对应)。创建完BeanPropertyRowMapper对象后,在findUser方法中通过queryForObject()方法返回一个Object类型的单行记录。findAllUser()中通过query()返回一个集合结果。
3、在测试类中添加
@Test
public void QueryUser(){
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao=(UserDao)app.getBean("userDao");
User user=userDao.findUser(2);
System.out.println(user);
}
@Test
public void findAllUserTest(){
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao=(UserDao)app.getBean("userDao");
List list=userDao.findAllUser();
for(User user:list){
System.out.println(user);
}
}
下面展示一些 内联代码片。
5、测试结果



