首先看下jdbc最原始的操作方法
/**
*@Author: Han Yu
*@Description: jdbc 最原始的实现(简单的列子)
*@Param:
*@Return:
*@Date: Create in 21:07 2019/1/12
*/
@Test
public void JDBCTest(){
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try{
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//创建连接
conn = DriverManager.getConnection("jdbc:mysql:///springjdbc","root","mysql");
// 编写sql语句
String sql = "select * from user where id = ?";
//预编译sql
psmt = conn.prepareStatement(sql);
//设置参数值
psmt.setInt(1,1);
//执行sql
rs = psmt.executeQuery();
//遍历结果集
while (rs.next()){
//得到返回的结果值
int id = rs.getInt("id");
String name = rs.getString("user");
User user = new User();
user.setId(id);
user.setUser(name);
System.out.println(user);
}
}catch(Exception e){
e.printStackTrace();
}finally {
try{
rs.close();
psmt.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
spring jdbcTemplate操作步骤
1 导入spring jdbcTemplate的jar包
spring-jdbc-4.2.4.RELEASE.jar 这是 spring jdbc 的 jar 包
spring-tx-4.2.4.RELEASE.jar 这是 spring 事务管理的 jar 包
还需要数据库的驱动的 jar 包
2 创建对象 设置数据库信息
3 创建 jdbcTemplate 对象,设置数据源
4 调用 jdbcTmplate 对象里面的方法实现操作
具体代码
1 使用JdbcTemplate创建数据表
/*
jdbc模板 依赖连接池获得数据连接, 所以必须先构造连接池
*/
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///springjdbc");
dataSource.setUsername("root");
dataSource.setPassword("mysql");
/*
创建jdbc模板
*/
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
/*
建表的sql语句
*/
String sql="create table student(id int,name char(20) )";
jdbcTemplate.execute(sql);
2 对表的增删改
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
/**
* @Author: Han Yu
* @Description: spring-jdbc模板-表数据crud操作
* @Date: Create in 19:03 2019/1/12
*/
public class CrudTest {
/**
*@Author: Han Yu
*@Description: 配置jdbc连接池(创建数据库连接池 创建模板对象)
*@Param: void
*@Return: JdbcTemplate
*@Date: Create in 19:53 2019/1/12
*/
public static JdbcTemplate setjdbc(){
//数据库连接池
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///springjdbc");
dataSource.setUsername("root");
dataSource.setPassword("mysql");
//创建模板对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate;
//
}
/**
*@Author: Han Yu
*@Description: 向springjdbc数据库下的User表中添加操作
*@Param: void
*@Return: void
*@Date: Create in 19:18 2019/1/12
*/
@Test
public void add(){
//数据库连接池
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///springjdbc");
dataSource.setUsername("root");
dataSource.setPassword("mysql");
//创建模板对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//
String sql="insert into User values('张三',2) ";
jdbcTemplate.execute(sql);
}
/**
*@Author: Han Yu
*@Description: 向springjdbc数据库下的User表中添加一列
*@Param:
*@Return:
*@Date: Create in 19:24 2019/1/12
*/
@Test
public void AddColumn(){
JdbcTemplate jdbcTemplate=CrudTest.setjdbc();
String sql="Alter table user ADD id int";
jdbcTemplate.execute(sql);
}
/**
*@Author: Han Yu
*@Description:对springjdbc数据库下的User表中进行删除操作
*@Param:
*@Return:
*@Date: Create in 19:22 2019/1/12
*/
@Test
public void DeleteTest(){
JdbcTemplate jdbcTemplate = CrudTest.setjdbc();
String sql="delete from user where id=?";
jdbcTemplate.update(sql,"2");
//jdbcTemplate.execute(sql);
}
/**
*@Author: Han Yu
*@Description: 对springjdbc数据库下的User表中进行更新操作
*@Param:
*@Return:
*@Date: Create in 20:03 2019/1/12
*/
@Test
public void UpdateTest(){
JdbcTemplate jdbcTemplate = CrudTest.setjdbc();
String sql="update User set user=? WHERE id =?";
//jdbcTemplate.execute(sql);
jdbcTemplate.update(sql,"李四",1);
}
}
3 对表中数据进行的查询操作
jdbcTemplate 实现查询 有接口 RowMapper
jdbcTemplate 针对这个接口没有实现类 得到不同的数据需要自己进行数据封装
4 查询具体实现
4.1 查询返回某一个值
4.2 查询返回对象
4.3 查询返回 List 集合
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import java.sql.*;
import java.util.List;
/**
* @Author: Han Yu
* @Description: 对springjdbc数据库下的User表中进行查询操作
* @Date: Create in 20:40 2019/1/12
*/
public class SelectTest {
/**
*@Author: Han Yu
*@Description: 配置jdbc连接池(创建数据库连接池 创建模板对象)
*@Param: void
*@Return: JdbcTemplate
*@Date: Create in 19:53 2019/1/12
*/
public static JdbcTemplate setjdbc() {
//数据库连接池
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///springjdbc");
dataSource.setUsername("root");
dataSource.setPassword("mysql");
//创建模板对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate;
//
}
/**
*@Author: Han Yu
*@Description: 查询user表中的一共有多少条数据
*@Param: void
*@Return: int
*@Date: Create in 20:41 2019/1/12
*/
@Test
public void CountTest(){
//得到jdbcTemplate对象
JdbcTemplate jdbcTemplate = SelectTest.setjdbc();
//编写查询sql语句
String sql = "select Count(*) from User";
//调用jdbcTemplate的方法
int count = jdbcTemplate.queryForObject(sql,Integer.class);
System.out.println(count);
}
/**
*@Author: Han Yu
*@Description: 查询返回对象
*@Param:
*@Return:
*@Date: Create in 21:28 2019/1/12
*/
@Test
public void testObject(){
JdbcTemplate jdbcTemplate = SelectTest.setjdbc();
String sql="Select * from user where id = ?";
/*调用模板中的方法
第一个参数是sql语句
第二个参数是 RowMapper, 是接口 类似于dbutils里面的接口
第三个参数是 可变参数 sql语句中传的值
第二个参数接口RowMapper 需要自己写类实现接口 自己做数据封装
*/
User user = jdbcTemplate.queryForObject(sql,new MyRowMapper(),1);
System.out.println(user);
}
/**
*@Author: Han Yu
*@Description: 查询返回集合
*@Param: void
*@Return: void
*@Date: Create in 12:41 2019/1/13
*/
@Test
public void listTest(){
JdbcTemplate jdbcTemplate = SelectTest.setjdbc();
//sql语句
String sql="select * from user";
//调用jdbc的方法
/*调用模板中的方法
第一个参数是sql语句
第二个参数是 RowMapper,
第三个参数是 可变参数
第二个参数接口RowMapper 需要自己写类实现接口 自己做数据封装
*/
List<User> list = jdbcTemplate.query(sql,new MyRowMapper());
System.out.println(list);
}
/**
*@Author: Han Yu
*@Description: jdbc 最原始的实现(简单的列子)
*@Param:
*@Return:
*@Date: Create in 21:07 2019/1/12
*/
@Test
public void JDBCTest(){
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try{
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//创建连接
conn = DriverManager.getConnection("jdbc:mysql:///springjdbc","root","mysql");
// 编写sql语句
String sql = "select * from user where id = ?";
//预编译sql
psmt = conn.prepareStatement(sql);
//设置参数值
psmt.setInt(1,1);
//执行sql
rs = psmt.executeQuery();
//遍历结果集
while (rs.next()){
//得到返回的结果值
int id = rs.getInt("id");
String name = rs.getString("user");
User user = new User();
user.setId(id);
user.setUser(name);
System.out.println(user);
}
}catch(Exception e){
e.printStackTrace();
}finally {
try{
rs.close();
psmt.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
/**
*@Author: Han Yu
*@Description: 封装的RowMapper方法
*@Param:
*@Return:
*@Date: Create in 12:44 2019/1/13
*/
class MyRowMapper implements RowMapper<User>{
@Override
public User mapRow(ResultSet resultSet, int num) throws SQLException {
//从结果集中拿到数据
int id = resultSet.getInt("id");
String name = resultSet.getString("user");
//把数据封装到对象
User user = new User();
user.setUser(name);
user.setId(id);
return user;
}
}