Spring的jdbcTemplate操作
1.spring框架一站式框架
(1)针对javaee三层,每一层都有解决技术
(2)在dao层,使用jdbcTemplate
2.spring对不同的持久化成都进行了封装
CRM持久化技术 模板类
JDBC org.springframework.jdbc.core.JdbcTemplate
Hibemate org,springframework.orm.hibernate.HibernateTemplate
IBatis(Mybatis) org.springframework.orm/ibatis.SqlMapClienTemplate
JPA org.springfamework.orm.jpa.JpaTemplate
3).JdbcTemplate对jdbc进行封装
3.JdbcTemplate使用和dbutils使用很相似,都是对数据库进行CRUD操作
增加:
1.导入JdbcTemplate使用的jar包
spring-jdbc-4.2
spring-ts-4.2S事务的内容
2.创建对象设置数据库的信息
3.创建一个JdbcTemplate对象,设置数据源
4.调用JdbcTemplate对象里面的方法进行实现操作
public void add() {
//创建对象设置数据库的信息
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/teachger_student");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//创建一个JdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
//调用JdbcTemplate对象里面的方法进行实现操作
String sql="insert into user value(? ,?)";
int row = jdbcTemplate.update(sql, "users","123");
System.out.println(row);
}
修改:
public void update() {
//创建对象设置数据库的信息
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/teachger_student");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//创建一个JdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
//调用JdbcTemplate对象里面的方法进行实现操作
String sql="update user set passwoerd=? where username=?";
int row = jdbcTemplate.update(sql,"12345","user");
System.out.println(row);
}
删除:
public void delete() {
//创建对象设置数据库的信息
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/teachger_student");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//创建一个JdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
//调用JdbcTemplate对象里面的方法进行实现操作
String sql="delete from user where username=?";
int row = jdbcTemplate.update(sql,"user");
System.out.println(row);
}
查询:
/*
QueryRunner runner=new QueryRunner(dataSource);
返回对象
runner.query(sql,new BeanHandler<User>(User.class));
返回list集合
runner.query(sql,new BeanListHandler<User>(User.class));
在dbutils时候,有接口ResultSetHanlder
dbutils提供了针对不同的结果实现类
*/
/*
2.在JdbcTemplate实现查询,有接口RowMapper
JdbcTemplate针对这个接口没有提供实现类,得到不同的类型数据需要自己进行数据封装
3.查询具体的实现
第一个:查询返回某一个值
jdbcTemplate.queryForObject(sql, Integer.class);
第一个参数:是sql语句
第二个参数 返回值类型的class
@Test
public void testCount() {
/创建对象设置数据库的信息
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/teachger_student");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//创建一个JdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
//调用JdbcTemplate对象里面的方法进行实现操作
String sql="select count(*) from user ";
Integer row = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(row);
}
原始jdbc代码
@Test
public void jdbc() {
Connection con=null;
PreparedStatement pr=null;
ResultSet rs=null;
//加载驱动
try {
Class.forName("com.mysql.jdbcl.Driver");
//创建连接
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/teachger_student"
, "root", "123456");
String sql="select * from user where username=?";
pr=con.prepareStatement(sql);
//设置参数
pr.setString(1, "lucy");
rs=pr.executeQuery();
while(rs.next()) {
Usre user=new User();
user.setUsername(rs.getString(username));
user.setPassword(rs.getString(password));
System.out.println(user);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
rs.close();
pr.close();
con.close();
}
}
第二个:查询返回对象
jdbcTemplate.queryForObject(sql, rowMapper, args)
第一个参数:是sql语句
第二个参数:RowMapper接口,类似于dbutils里面的接口
第三个参数:可变参数
@Test
public void testObject() {
//创建对象设置数据库的信息
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/teachger_student");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//创建一个JdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
String sql="select * from user where username=?";
//第二个参数是:接口rowMapper,需要自己写实现接口类,自己做数据封装
User user=jdbcTemplate.queryForObject(sql, new myRowMapper(), "nary");
System.out.println(user);
}
//rowMapper的实现类
class myRowMapper implements RowMapper<T>{
@Override
public T mapRow(ResultSet rs, int arg1) throws SQLException {
//1从结果集中得到数据
String username=rs.getString("username");
String password=rs.getString("password");
//2.把得到的数据封装到对象里面
User user=new User();
user.setUsername(username);
user.setPassword(password);
return user;
}
}
带三个:查询返回list集合
jdbcTemplate.query(sql, rowMapper, args)
第一个参数:sql语句
第二个参数:RowMapper接口,自己写类实现数据封装
第三个:可变参数
@Test
public void testList () {
//创建对象设置数据库的信息
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/teachger_student");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//创建一个JdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
String sql="select * from user";
List<user> list=jdbcTemplate.query(sql, new myRowMapper());
System.out.println(list);
}