关于Spring-Template的一些总结,很久之前学习完JDBC就直接学习Mybatis了,今天突然想起来,就把这个拿出来学习了一把。
直接开始,不说废话
一,前置条件
关于spring.xml的相关配置
1.JDBC
2.自动扫描注释
spring.xml
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/selection_course?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--扫描包下面的所有注释-->
<context:component-scan base-package="org.berg.*"/>
</beans>
pom文件里面代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.berg</groupId>
<artifactId>sc</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<spring.version>4.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<!--spring的四个配置-->
spring的beans文件
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
spring的core中心容器
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
spring的上下文
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
spring的aop的动态代理
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!--测试文件-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
</project>
主要的方法如下
(1)execute方法
(2)update与batchUpdate方法
(3)query与queryXXX方法
一,execute方法
主要作用:用来生成表格的方法
二,update与batchUpdate的方法
主要作用:添加操作和批量操作
三,query与queryXXX方法
public void queryForObject3(){
String sql="select * from student where id=?";
student student = jdbcTemplate.queryForObject(sql, new StudentRow(), 1);
System.out.println(student.toString());
}
private class StudentRow implements RowMapper<student>{
public student mapRow(ResultSet resultSet, int i) throws SQLException{
student student = new student();
student.setId(resultSet.getInt("id"));
student.setName(resultSet.getString("name"));
student.setBorn(resultSet.getDate("born"));
return student;
}
}
代码基本上copy完毕,当然这个绝不是今天做笔记的原因。
今天做笔记主要在思考这几个方法
二,思考与总结
<1>为什么说JDBC-template好,好在哪里?
首先JDBC有哪些操作呢
1.加载驱动,生成connection,配置相应的sql语句的statement,执行操作,处理结果集,关流
JDBC-template有哪些操作
2.通过配置文件加载bean生成上下文路径,拿到template,最后执行对应的不同sql语句。
对比:在这里template就已经进行了大量封装的操作,首先把以前通过url,user,password配置直接放到配置文件中去,通过springioc直接注入到ApplicationContext(这里就节约了大量的代码,实现了分离,代码阅读大大提高),将生成statement一些的方法,直接一个方法代理,不用关流(已经封装),如果要类型转换,写了一个new StudentRow(),查询转换,可以到处调用,节约了大量的代码,实用性更加的优秀,对于方法来说,批量的添加和查询方法,使得实际的开发效率来说,得到了不少的调高。
<2>JDBC-template真好很好吗?
讨论:其实并不然,虽然template对于JDBC有了大量的操作,但是这些操作相对于JDBC来说的确简便了不少,连接方面来说,实用方面,体验感提高不少,但是相对于mybatis来说,
1.mysql和执行程序并没有分离,导致看起来十分不顺眼,浏览感极差。
2.转换问题,还是要经行对象类型转行,虽然template相对于JDBC来说已经做得很好了,但是对于Mybatis来说还是太复杂了。3.如果实际的开发中遇到很多复杂的业务逻辑(对表联查),template的类型转换方法(一次声明,到处copy)显然已经不够用了,也没有相应的缓存机制,导致每一次都要相应的数据的需求都要立马访问数据库,这一点对于web层的体验感来说,这是相当的不舒服。
<3>对于spring的一些理解,自己可以访问数据库,配置mybatis也可以访问数据库,这一点做的还是很不错,能过集成别人,自己也可以来操作,好的可以拿来吸收,自己也自强不息,有点哲学的思想。