JdbcTemplate模式

这是一种相比传统的Jdbc要方便一些的数据库操作模板吧。


常规的JDBC

存在的问题
http://wenku.baidu.com/link?url=GtMpDtr_D9iLIn0LK6LMIlfFJ0Vk0E6UOOiG1dfqgsbWKG9lAWZazXu37JUaI_iFwXSFXIUz1FCCnAE6lrxFErbo1Km2cEnB128BjYQo6IC
1.低层次

JDBC是一个非常基础的数据存取API,并且它封装了对关系型数据库的访问。
但它还是属于比较低层次的API

2.冗长的错误处理代码

来确保ResultSets,Statements以及Connection 在使用后的关闭

3.不提供异常的层次

利用 Spring 中的 JdbcTemplate 类进行数据库访问

结合手头的一个框架,Spring MVC,利用 JdbcTemplate 进行数据库操作。

Spring MVC 框架已经搭建完毕。

数据源配置如下(mvc-dispatcher-servlet.xml):

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName">
            <value>${db.driverClass}</value>
        </property>
        <property name="url">
            <value>${db.url}</value>
        </property>
        <property name="username">
            <value>${db.username}</value>
        </property>
        <property name="password">
            <value>${db.password}</value>
        </property>
    </bean>

数据库信息写在了配置文件(db-config.properties)里

//被自己蠢哭了,url都抄不对。。看看下面这个url有什么不对
db.url=jdbc:mysql//ip:port/yourdb?useUnicode=true&characterEncoding=gbk

db.username=root
db.password=xxxxxx
db.driverClass=com.mysql.jdbc.Driver

mysql后面少了冒号:

db.url=jdbc:mysql://ip:port/yourdb?useUnicode=true&characterEncoding=gbk

在要用到的文件里引入即可

 <!-- 获取配置文件 -->
<bean id="config"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:db-config.properties</value>
            </list>
        </property>
    </bean>

使用 JdbcTemplate 需要引入spring-jdbc-core 包

org.springframework.jdbc.core.JdbcTemplate

使用 Maven 添加该包

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
</dependency>

spring.version已在前面定义

  <properties>
        <spring.version>4.1.1.RELEASE</spring.version>
   </properties>

有时候 maven 反应比较迟钝,有可能是没有打开 auto enable,有可能就是 maven 没有反应过来。这时候,我会把那个dependency Ctrl+X ,再 Ctrl+C,反复几次。或者就是直接IDE(Intellij IDEA)重启。

包下载好后,在 mvc-dispatcher-servlet.xml 中添加

   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource" />
    </bean>
jdbcTemplate编程

我最先是搭建过SSH的框架,起点好高,而且还是注解式的,按理来说,搭建时,一搜一堆的教程,东抄抄,西借借,虽然问题蹦出一大堆,但只要把搭建时哪些问题解决掉,框架搭起来以后,用的时候简直不要更多模板,就跟手工复制似的,我觉得学到的很少。

会用,但不懂,这个问题其实是很严重的。


今天,我在用JdbcTemplate访问数据库操作时,犯了很多错误。

错误1

就是前面提到的 db.url 写少了一个冒号

错误2

我没有引入 mysql-connector-java 的包。
所以它才会一直说

Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.driver'

我的内心是崩溃的,为什么就找不到一个driver呢?

刚开始,我以为是我配置的问题,我换了c3p0(不要问我为什么这么蠢,都没看出来问题),maven了(这个当动词用,感觉不错)c3po的包(格式?我后面在告诉你,先说重点)。

com.mysql.jdbc.Driver 是 mysql-connector-java 包里的一个类。大小写还是得区分的吧,所以应该是Driver,而不是driver(当然,前面介绍的那个是对的,不知道怎么被我无头无脑的改了)。

//一些包的maven格式

     <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5-pre8</version>
     </dependency>

     <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.25</version>
     </dependency>

错误3

这个问题就涉及到注入了
前面有一个 beanid 为 jdbcTemplate ,这种属于在文件里配置的。
用的时候,直接声明一下,就可以直接用了,不用再去new了。

//是我的问题,这里还少一个
@Autowired
private  JdbcTemplate  jdbcTemplate;

update方法啊,query系列方法等等。

我用网上搜到的方法,同 jdbcTemplate 一样设置service实现类,并没有成功,name 属性始终提示有错,我不懂怎么解决。

然后我用了老一套,注解,因为本身Controller就是用的注解的方式,比较方便。

@Service("productService")
public Class ProductServiceImp implement ProductService{
    @Override的一些方法,略
}

ProductService是一个接口类,~Imp就是它的实现类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值