spring jdbc Template操作
2018-05-29 本文已影响12人
DouDouZH
一、介绍
1、spring框架是一站式框架
- 针对javaee三层,每一层都有解决技术
- 在dao层,使用jdbcTemplate
2、spring对不同的持久化层的技术都进行了封装
- jdbcTomplte对jdbc进行了封装
3、jdbcTemplate和dbUtils使用很相似,都是对数据库进行crud操作
二、增加操作
1、导入相关的jar包
image.png2、创建对象设置数据库信息
image.png3、创建jdbcTemplate对象,设置数据源
image.png4、调用jdbcTompiate对象里的方法实现操作
image.png5、代码
TestAdd.java
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class TestAdd {
//修改操作
@Test
public void add() {
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/person");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
//调用jdbcTemplate对象方法实现操作
String sql="insert into person(name,age,sex) values(?,?,?)";
String [] data={"zhangsan","20","nan"};
int row=jdbcTemplate.update(sql, data);
System.out.println(row);
}
}
6、运行结果
控制台 数据库三、修改操作
1、设置数据库信息
2、创建jdbcTemplate
3、调用jdbcTemplate模版的方法实现
4、代码
update.java
package work.doudou.test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class update {
//添加操作
@Test
public void updata() {
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/person");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
//调用jdbcTemplate对象方法实现操作
String sql="update person set name=? where name=?";
String [] data={"lisi","zhangsan"};
int row=jdbcTemplate.update(sql, data);
System.out.println(row);
}
}
5、运行结果
控制台 数据库四、删除操作
1、设置数据库信息
2、创建jdbcTemplate
3、调用jdbcTemplate模版的方法实现
4、代码
delete.java
package work.doudou.test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class delete {
//删除操作
@Test
public void delete() {
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/person");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
//调用jdbcTemplate对象方法实现操作
String sql="delete from person where name=?";
String [] data={"lisi"};
int row=jdbcTemplate.update(sql, data);
System.out.println(row);
}
}
5、运行结果
控制台 数据库
五、查询操作
1、使用jdbcTemplate实现查询操作
- jdbcTemplate有接口RowMapper
- jdbcTemplate对这个接口没有提供实现类,得到不同的数据类型需要自己进行封装
2、查询具体实现
(1)返回一个值 queryForObject(sql, requiredType)
- 第一个参数是SQL语句
- 第二个参数是返回类型的class
代码seletc.java
package work.doudou.test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.experimental.theories.FromDataPoints;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class seletc {
//查询操作
@Test
public void seletcCount() {
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/person");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
//调用方法得到记录数
String sql="select count(*) from person";
//调用jdbcTemplate的方法
int count=jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(count);
}
}
运行结果
查到3条数据
数据库有3条数据
(2)返回一个对象 queryForObject(sql, rowMapper, args)
- 要自己写封装类
UserBean.java
package work.zhangdouou.bean;
public class UserBean {
private int id;
private String name;
private int age;
private String sex;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "UserBean [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
}
MyRowMapper .java
package work.doudou.myrowmapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import work.zhangdouou.bean.UserBean;
public class MyRowMapper implements RowMapper<UserBean> {
@Override
public UserBean mapRow(ResultSet rs, int num) throws SQLException {
//1从结果集得到数据
int id=rs.getInt("id");
String name=rs.getString("name");
int age=rs.getInt("age");
String sex=rs.getString("sex");
//2把得到数据封装到对象
UserBean userBean=new UserBean();
userBean.setId(id);
userBean.setName(name);
userBean.setAge(age);
userBean.setSex(sex);
return userBean;
}
}
seletc.java
package work.doudou.test;
import static org.junit.Assert.*;
import java.sql.ResultSet;
import java.sql.SQLDataException;
import javax.swing.tree.RowMapper;
import javax.swing.tree.TreePath;
import org.junit.Test;
import org.junit.experimental.theories.FromDataPoints;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import work.doudou.myrowmapper.MyRowMapper;
import work.zhangdouou.bean.UserBean;
public class seletc {
//查询操作,查询返回对象
@Test
public void seletcBean() {
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/person");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
//调用方法得到记录数
String sql="select * from person where name=?";
String [] data={"zhangsan"};
//调用jdbcTemplate的方法
//第二个方法是个借口你RoMapper需要自己实现接口,自己封装数据
UserBean userBean=jdbcTemplate.queryForObject(sql, new MyRowMapper(), data);
System.out.println(userBean.toString());
}
}
运行结果
image.png
(3)返回list集合 query(sql, rse, args)
- sql语句
- RowMapper接口,自己写类实现封装
- 可变参数
UserBean.java
package work.zhangdouou.bean;
public class UserBean {
private int id;
private String name;
private int age;
private String sex;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "UserBean [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
}
MyRowMapper .java
package work.doudou.myrowmapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import work.zhangdouou.bean.UserBean;
public class MyRowMapper implements RowMapper<UserBean> {
@Override
public UserBean mapRow(ResultSet rs, int num) throws SQLException {
//1从结果集得到数据
int id=rs.getInt("id");
String name=rs.getString("name");
int age=rs.getInt("age");
String sex=rs.getString("sex");
//2把得到数据封装到对象
UserBean userBean=new UserBean();
userBean.setId(id);
userBean.setName(name);
userBean.setAge(age);
userBean.setSex(sex);
return userBean;
}
}
seletc.java
package work.doudou.test;
import static org.junit.Assert.*;
import java.sql.ResultSet;
import java.sql.SQLDataException;
import java.util.List;
import javax.swing.tree.RowMapper;
import javax.swing.tree.TreePath;
import org.junit.Test;
import org.junit.experimental.theories.FromDataPoints;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import work.doudou.myrowmapper.MyRowMapper;
import work.zhangdouou.bean.UserBean;
public class seletc {
//查询操作返回list
@Test
public void seletcList() {
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/person");
dataSource.setUsername("root");
dataSource.setPassword("root");
//创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
//调用方法得到记录数
String sql="select * from person";
//调用jdbcTemplate的方法
//第二个方法是个借口你RoMapper需要自己实现接口,自己封装数据
List<UserBean> list = jdbcTemplate.query(sql, new MyRowMapper());
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).toString());
}
}
}
运行结果
image.png