JDBC Template - 基础篇

简介: JDBC Template - 基础篇

image.png

  • execute:DDL语句,如:建表、修改表结构
  • update、batchUpdate:增删改
  • query、queryXXX:查
  • call:存储过程

image.pngimage.pngimage.pngimage.pngimage.png

<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><propertyname="driverClassName"value="com.mysql.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/selection_course?useUnicode=true&amp;characterEncoding=utf-8"/><propertyname="username"value="root"/><propertyname="password"value="root"/></bean><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"><propertyname="dataSource"ref="dataSource"/></bean><context:component-scanbase-package="com.imooc.sc"/></beans>

案例一:

packagecom.imooc.sc.dao;
importcom.imooc.sc.entity.Course;
importcom.imooc.sc.entity.Student;
importjava.util.List;
publicinterfaceCourseDao {
voidinsert(Coursecourse);
voidupdate(Coursecourse);
voiddelete(intid);
Courseselect(intid);
List<Course>selectAll();
}
packagecom.imooc.sc.dao.impl;
importcom.imooc.sc.dao.CourseDao;
importcom.imooc.sc.entity.Course;
importcom.imooc.sc.entity.Student;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.jdbc.core.JdbcTemplate;
importorg.springframework.jdbc.core.RowMapper;
importorg.springframework.stereotype.Repository;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.List;
@RepositorypublicclassCourseDaoImplimplementsCourseDao {
@AutowiredprivateJdbcTemplatejdbcTemplate;
publicvoidinsert(Coursecourse) {
Stringsql="insert into course(name,score) values(?,?)";
jdbcTemplate.update(sql,course.getName(),course.getScore());
    }
publicvoidupdate(Coursecourse) {
Stringsql="update course set name=?,score=? where id=?";
jdbcTemplate.update(sql,course.getName(),course.getScore(),course.getId());
    }
publicvoiddelete(intid) {
Stringsql="delete from course where id=?";
jdbcTemplate.update(sql,id);
    }
publicCourseselect(intid) {
Stringsql="select * from course where id=?";
returnjdbcTemplate.queryForObject(sql,newCourseRowMapper(),id);
    }
publicList<Course>selectAll() {
Stringsql="select * from course";
returnjdbcTemplate.query(sql,newCourseRowMapper());
    }
privateclassCourseRowMapperimplementsRowMapper<Course> {
publicCoursemapRow(ResultSetresultSet, inti) throwsSQLException {
Coursecourse=newCourse();
course.setId(resultSet.getInt("id"));
course.setName(resultSet.getString("name"));
course.setScore(resultSet.getInt("score"));
returncourse;
        }
    }
}

案例二:

packagecom.imooc.sc.dao;
importcom.imooc.sc.entity.Selection;
importjava.util.List;
importjava.util.Map;
publicinterfaceSelectionDao {
voidinsert(List<Selection>seles);
voiddelete(intsid,intcid);
List<Map<String,Object>>selectByStudent(intsid);
List<Map<String,Object>>selectByCourse(intcid);
}
packagecom.imooc.sc.dao.impl;
importcom.imooc.sc.dao.SelectionDao;
importcom.imooc.sc.entity.Selection;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.jdbc.core.JdbcTemplate;
importorg.springframework.stereotype.Repository;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Map;
@RepositorypublicclassSelectionDaoImplimplementsSelectionDao {
@AutowiredprivateJdbcTemplatejdbcTemplate;
publicvoidinsert(List<Selection>seles) {
Stringsql="insert into selection values(?,?,?,?)";
List<Object[]>list=newArrayList<Object[]>();
for(Selectionsel:seles){
Object[] args=newObject[4];
args[0] =sel.getSid();
args[1]=sel.getCid();
args[2] =sel.getSelTime();
args[3] =sel.getScore();
list.add(args);
        }
jdbcTemplate.batchUpdate(sql,list);
    }
publicvoiddelete(intsid,intcid) {
Stringsql="delete from selection where student=? and course=?";
jdbcTemplate.update(sql,sid,cid);
    }
publicList<Map<String, Object>>selectByStudent(intsid) {
Stringsql="select se.*,stu.name sname,cou.name cname from selection se "+"left join student stu on se.student=stu.id "+"left join course cou on se.course=cou.id"+"where student=?";
returnjdbcTemplate.queryForList(sql,sid);
    }
publicList<Map<String, Object>>selectByCourse(intcid) {
Stringsql="select se.*,stu.name sname,cou.name cname from selection se "+"left join student stu on se.student=stu.id "+"left join course cou on se.course=cou.id"+"where course=?";
returnjdbcTemplate.queryForList(sql,cid);
    }
}

案例三:

packagecom.imooc.sc.dao;
importcom.imooc.sc.entity.Student;
importjava.util.List;
publicinterfaceStudentDao {
voidinsert(Studentstu);
voidupdate(Studentstu);
voiddelete(intid);
Studentselect(intid);
List<Student>selectAll();
}
packagecom.imooc.sc.dao.impl;
importcom.imooc.sc.dao.StudentDao;
importcom.imooc.sc.entity.Student;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.jdbc.core.JdbcTemplate;
importorg.springframework.jdbc.core.RowMapper;
importorg.springframework.stereotype.Repository;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.List;
@RepositorypublicclassStudentDaoImplimplementsStudentDao {
@AutowiredprivateJdbcTemplatejdbcTemplate;
publicvoidinsert(Studentstu) {
Stringsql="insert into student(name,sex,born) values(?,?,?)";
jdbcTemplate.update(sql,stu.getName(),stu.getSex(),stu.getBorn());
    }
publicvoidupdate(Studentstu) {
Stringsql="update student set name=?,sex=?,born=? where id=?";
jdbcTemplate.update(sql,stu.getName(),stu.getSex(),stu.getBorn(),stu.getId());
    }
publicvoiddelete(intid) {
Stringsql="delete from student where id=?";
jdbcTemplate.update(sql,id);
    }
publicStudentselect(intid) {
Stringsql="select * from student where id=?";
returnjdbcTemplate.queryForObject(sql,newStudentRowMapper(),id);
    }
publicList<Student>selectAll() {
Stringsql="select * from student";
returnjdbcTemplate.query(sql,newStudentRowMapper());
    }
privateclassStudentRowMapperimplementsRowMapper<Student> {
publicStudentmapRow(ResultSetresultSet, inti) throwsSQLException {
Studentstu=newStudent();
stu.setId(resultSet.getInt("id"));
stu.setName(resultSet.getString("name"));
stu.setSex(resultSet.getString("sex"));
stu.setBorn(resultSet.getDate("born"));
returnstu;
        }
    }
}

优点:

- 简单、灵活:封装了 JDBC API。

缺点:

- Java代码和SQL代码混合:使得后端不能很好的和数据库端分离开发,影响开发效率。

- 功能不丰富:1、分页;2、关联关系。

总结:JDBC只能是相对于JDBC API开发前进了一小步,但是还不足够强大到真正的ORM关系。JDBC Template是Spring框架对JDBC操作的封装,简单、灵活但不够强大。实际应用中还需要和其它ORM框架混合使用。


目录
相关文章
|
SQL Java 数据库连接
JDBC系列--template实例练习
JDBC系列--template实例练习
85 0
数据库基础(五)----- 数据库连接池,JDBC Template
数据库基础(五)----- 数据库连接池,JDBC Template
数据库基础(五)----- 数据库连接池,JDBC Template
|
Java 数据库连接
JDBC Template - 入门篇
JDBC Template - 入门篇
97 0
JDBC Template - 入门篇
|
SQL NoSQL Java
Spring Boot 整合 JDBC Template 实例
Spring Boot 整合 JDBC Template 实例
148 0
Spring Boot 整合 JDBC Template 实例
|
SQL Oracle Java
放弃 MyBatis、JPA,我最终选择了 JDBC Template…
因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最好的,可惜不是完全免费,最终选择JDBC Template。 Hibernate和Mybatis是使用最多的两个主流框架,而JOOQ、Ebean等小众框架则知道的人不多,但也有很多独特的优点;而JPA则是一组Java持久层Api的规范,Spring Data JPA是JPA Repository的实现,本来和Hibernate、Mybatis、JOOQ之类的框架不在同一个层次上,但引入Spring Data JPA之类框架之后,我们会直接使用JPA的API查询更新数据库,就
252 0
|
Java 数据库连接 数据库
|
23天前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
67 1
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
79 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
35 0