JDBCTemplate [ jdbc操作的模板]
jdbcTemplate
定义:jdbcTemplate就是spring框架对jdbc的封装,但是还是依赖连接池,目的就是使jdbc更加容易使用,
jdbcTemplate是spring的一部分jdbcTemplate处理了资源的释放和建立,帮助了我们避免常见的错误,
比如忘了关闭流,他运行核心的jdbc工作流,如:PreparedStatement的建立和执行,而我们只需要提供sql语句即可提取结果!!
环境:
如果使用的是c3p0 jdbcTemplate相关的jar包5个 +c3p0 2个+mysql一个 =8个jar包
如果使用的是druid jdbcTemplate相关的jar包5个+druid1个+MySQl一个 =7个jar包
步骤:
1.准备c3p0连接池
2.导入依赖jar包
3.创建jdbcTemplate对象,传入c3p0连接池 构造函数为:public jdbcTemplate (DataSource datasource)
4.调用execute(),updata(),queryxxx() 方法,所以有了这个从头到尾进行jdbc操作就只需要准备sql就可以了!
封装工具类jdbcUtils
将jdbctemplate的操作封装一个工具类中,这样使用起来更加的方便
public class jdbcTemplateUitls{
//私有静态化数据源,这样程序启动以后,内存中始终就维护一个数据连接池,不需要再去重复创建
private static final DataSource ds =new CombopooledDataSource();
//提供jdbcTemplateUilts方法
public static jdbcTemplate getjdbcTemplate(){
JdbcTemplate jdbcTemplate =new JdbcTemplate(ds);
return jdbcTemplate;
}
}
对jdbcTemplate中方法的演示:重点
execute()方法:这个方法主要是用来执行数据库的DDL操作!!!
/*对这个jdbcTemplate模板工具类的测试,对数据库的DDL操作!*/
public class jdbcTemplateDemo1 {
public static void main(String[] args) {
DDL();
}
//对数据库的ddl操作,通过jdbc模板工具类
public static void DDL(){
//1.首先创建一个jdbcTemplate对象,通过调用工具类的方法
JdbcTemplate jdbcTemplate = jdbcTemplateUtils.getJdbcTemplate();
//准备sql语句,执行sql语句
String sql="create table User(" +
"uid int primary key auto_increment," +
"username varchar(20)," +
"password varchar(20))";
//执行sql语句
jdbcTemplate.execute(sql);
}
}
update()方法 :这个方法主要是执行DML操作!!!
/*利用jdbc模板工具类对数据库表的dml操作,对表中数据的增加 删除 修改*/
public class jdbcTemplateDemo2 {
public static void main(String[] args) {
//add();
//modify();
//delete();
}
//定义方法增加一条数据
public static void add(){
//获取jdbcTemplate对象
JdbcTemplate jdbcTemplate = jdbcTemplateUtils.getJdbcTemplate();
//准备sql语句
String sql="insert into User values(null,'大海','123456')";
//执行sql语句
int num = jdbcTemplate.update(sql);
//判断
if(num>0){
System.out.println("插入一条数据成功!");
}
}
//定义方法修改一条数据
public static void modify(){
//获取jdbcTemplate对象
JdbcTemplate jdbcTemplate = jdbcTemplateUtils.getJdbcTemplate();
/*
//准备sql语句
String sql="update User set username='长江',password='123' where uid=1";
//执行sql语句
int num = jdbcTemplate.update(sql);
*/
//或者用这种写法也是可以的(推荐使用这种写法)
int num = jdbcTemplate.update("update User set username=? where uid=?", "dahai", "1");
//判断
if(num>0){
System.out.println("修改一条数据成功!!");
}
}
//定义方法删除一条数据
public static void delete(){
//获取jdbcTemplate对象
JdbcTemplate jdbcTemplate = jdbcTemplateUtils.getJdbcTemplate();
//准备sql语句
String sql="delete from User where uid=?";
//执行sql语句、
int num = jdbcTemplate.update(sql, "1");
//判断
if(num>0){
System.out.println("删除一条数据成功!");
}
}
}
queryxxx()方法 查询的方法很多,但是有几个是比较重要的也比较常见,这些方法主要用来查询表中的数据
public class jdbcTemplateDemo3 {
public static void main(String[] args) {
// queryformap();
// queryforlist();
// queryforobject();
// queryforobject2();
// queryforobject3();
}
//queryForMap查询一条结果封装成map集合,字段作为map集合的key,每个字段对应的数据记录作为map集合的value
public static void queryformap(){
//调用工具类,获取jdbcTemplate对象
JdbcTemplate jdbcTemplate =jdbcTemplateUtils.getJdbcTemplate();
//准备sql语句
String sql="select * from student where id =?";
//执行sql语句
Map<String, Object> map = jdbcTemplate.queryForMap(sql, 1);
//处理结果集,将map集合打印出来
for (String s : map.keySet()) { //遍历所有的key,然后通过key拿到value的方式遍历集合
System.out.println(s+"==="+map.get(s));
}
//遍历map集合的方式二
Set<Map.Entry<String, Object>> entries = map.entrySet();//遍历所以的键值对的方式遍历集合
for (Map.Entry<String, Object> entry : entries) { //遍历所有的set集合,这个set集合中装的是键值对
System.out.println(entry.getKey()+"==="+entry.getValue());
}
}
//queryForlist 还可以查询所有的数据
public static void queryforlist(){
//调用工具类,获取jdbcTemplate方法,获取jdbcTemplate对象
JdbcTemplate jdbcTemplate = jdbcTemplateUtils.getJdbcTemplate();
//准备sql语句
String sql="select * from student";
//执行sql语句
List<Map<String, Object>> maps =jdbcTemplate.queryForList(sql);
//遍历list集合拿到map集合中的每一条数据 嵌套循环遍历
for (Map<String, Object> map : maps) {
Set<Map.Entry<String, Object>> entries = map.entrySet();
for (Map.Entry<String, Object> entry : entries) {
System.out.println(entry.getKey()+"------"+entry.getValue());
}
}
//遍历方式二,使用keyset遍历map集合
for (Map<String, Object> map : maps) {
Set<String> key = map.keySet();
for (String string : key) {
System.out.println(key+"------"+map.get(key));
}
}
}
//queryForObject() 方法查询结果,方法中传入一个接口的匿名内部类(比较繁琐,用的比较少)
//使用这个方法的前提:已经很封装好了javaBean类
public static void queryforobject(){
//调用工具类,获取到这个jdbcTemplate对象
JdbcTemplate jdbcTemplate = jdbcTemplateUtils.getJdbcTemplate();
//准备sql语句
String sql="select * from student where id =?";
//执行sql语句
student stu = jdbcTemplate.queryForObject(sql, new RowMapper<student>() {
@Override
public student mapRow(ResultSet resultSet, int i) throws SQLException {
//这个方法是实现了这个RowMap接口必须要实现的方法
//这个方法就是resultset这结果集封装到javaBean对象中
//1.首先创建javaBean类的对象
student stu=new student();
//2.通过get/set方法封装数据到javabean中
stu.setId(resultSet.getInt("id"));
stu.setName(resultSet.getString("name"));
stu.setCity(resultSet.getString("city"));
stu.setAge(resultSet.getInt("age"));
return stu;
}
//RowMap 是一个接口的对象,但是接口没有对象,只可能是一个接口实现类的对象,所有就直接使用匿名对象
}, 1);
//打印结果,直接打印对象
System.out.println(stu);
}
//queryforobject 方法将查询的某一个记录封装成一个对象,效果和上面方法一样,但是方法使用更加简单
public static void queryforobject2(){
//通过工具类拿到jdbcTemplate对象
JdbcTemplate jdbcTemplate = jdbcTemplateUtils.getJdbcTemplate();
//准备sql语句
String sql="select * from student where id=?";
//执行sql语句
student stu = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<student>(student.class), 1);
//打印输入封装好的对象
System.out.println(stu);
}
//queryforobject 方法,查询所有的记录封装成一个对象的集合,然后返回
public static void queryforobject3(){
//通过工具类拿到jdbcTemplate对象
JdbcTemplate jdbcTemplate = jdbcTemplateUtils.getJdbcTemplate();
//准备sql语句,查询所有
String sql="select * from student";
//执行sql语句
List<student> stuList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(student.class));
//遍历这stuList即可
for (student student : stuList) {
System.out.println(student);
}
}
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。