发表于: 2018-03-17 15:34:38

1 712


今天完成的事情:

JdbcTemplateMybatis的练习

之前有做过一个类似于影碟租赁系统的程序,也有使用到数据库,所以就试试能不能用JdbcTemplateMybatis实现一下。

先介绍一下我们的实体,有3个,第一个是dvd

4个属性编号、影碟名字、借出次数、状态(可借\ 不可借)

2个是记录

5个属性编号、用户id、影碟id、借出时间、归还时间

3个是用户

4个属性编号、账号、密码、类型(管理员\普通用户)

建立新的maven工程

 

pom.xml文件中添加依赖,去之前的工程中找就行

建立好实体类,用于封装从数据库中查询出来的数据,定义好他们的属性和类型以及getset方法。

 

由于使用的是JdbcTemplate,我们要给它写dao接口,并在里面为它定义好功能,由于有3张表,所以我打算每个表实现一个功能。

接着写实现类,去用代码实现具体的功能

由于User中的功能还是查询,所以跟之前使用的方法一样。

public void query() {

    // TODO Auto-generated method stub

    String sql="select *from users";

    SqlRowSet sqlRowSet = jdbcTemplate.queryForRowSet(sql);

    while(sqlRowSet.next()) {

       System.out.println(sqlRowSet.getInt(1) + "," + sqlRowSet.getString(2)+","+sqlRowSet.getString(3)+","+sqlRowSet.getInt(4));

    }

  }

DVDRecord中是增加和删除的功能,所以使用了另外一个方法

public void insert() {

    // TODO Auto-generated method stub

    String sql="insert into dvds(id,dname,dacont,status) values(12,'全职猎人',0,1)";

     jdbcTemplate.update(sql);

  }

public void delete() {

    // TODO Auto-generated method stub

    String sql="delete from records where id=1";

    jdbcTemplate.update(sql);

  }

接着我们写一个main函数来测试一下。

我们要采取注入的方式生成这三个实现类对象,所以我们要去配置applicationContext.xml

和之前的差不多,只是这次要有3份,注意beanid和所对应class文件的路径即可

’本来是想靠这样生成三个对象的

但出现了这样的问题

我的理解是可能JdbcTemplate使用了单例模式,所以不允许创建多个JdbcTemplate对象。

于是我想到一个办法,为3个实现类创建一个基类然后继承,这样它们拥有的Jdbc引用就是同一个了。

<?xml version="1.0" encoding="UTF-8"?>

 

<beans xmlns="http://www.springframework.org/schema/beans"

 

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">       

 

 

<bean id="BaseDao" class="com.iotek.dao.impl.BaseDao">

 

        <property name="jdbcTemplate" ref="jdbcTemplate"></property>

 

    </bean>

 

               

 

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

 

        <property name="dataSource" ref="dataSource"></property>

 

    </bean>

 

  

 

     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

 

        <property name="driverClassName">

 

           <value>com.mysql.jdbc.Driver</value>

 

       </property>

 

       <property name="url">

 

           <value>jdbc:mysql://127.0.0.1:3306/data</value>

 

       </property>

 

       <property name="username">

 

           <value>root</value>

 

       </property>

 

       <property name="password">

 

           <value>zhangfeng8751</value>

 

        </property>   

 

       </bean>     

       

        <bean id="daoImpl" class="com.iotek.dao.impl.DvdDaoImpl">

 

        <property name="jdbcTemplate" ref="jdbcTemplate"></property>

 

    </bean>

       

       

       

        <bean id="daoImpl2" class="com.iotek.dao.impl.RecordDaoImpl">

 

        <property name="jdbcTemplate" ref="jdbcTemplate"></property>

 

    </bean>

 

               

     <bean id="daoImpl3" class="com.iotek.dao.impl.UserDaoImpl">

 

        <property name="jdbcTemplate" ref="jdbcTemplate"></property>

 

    </bean>

 

</beans>

 

配置信息如上,很明显关于BaseDao中是有生成JdbcTemplate的内容的,剩下的继承的真正的实现类只有引用,并没有去生成。

尝试执行,没有报错

先尝试Userdao的查询方法.

成功

尝试Dvddaoinsert方法。

 

 

成功

recordDaodelete方法

成功

JdbcTemplate的实现就完美完成了。

 

接着我们用Mybatis来实现一下,有了前面的基础,我感觉对它们的工作方式已经有了比较清楚的认识。我感觉MyBatis其实和JdbcTemplate其实也没有太大差别,只是将sql语句也写在了xml文件中以及与对象的绑定,正好JdbcTemplate我们又没有用到实体类,毕竟业务逻辑太简单,压根没有封装到对象中的必要,为了让实体类有用武之地,我们就快速实现一下Mybatis.

创建工程

添加依赖,跟之前的一样就好。

创建实体类,将之前的实体类的包复制过来就好

由于重复性工作很多,我们就完成User的查询功能。

配置好xml文件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

 

<configuration>

    <typeAliases>

        <typeAlias alias="User" type="com.iotek.entity.User"/>

    </typeAliases>

 

    <environments default="development">

        <environment id="development">

            <transactionManager type="JDBC"/>

            <dataSource type="POOLED">

                <property name="driver" value="com.mysql.jdbc.Driver"/>

                <property name="url" value="jdbc:mysql://localhost:3306/data"/>

                <property name="username" value="root"/>

                <property name="password" value="zhangfeng8751"/>

            </dataSource>

        </environment>

    </environments>

   

    <mappers>

        <mapper resource="user.xml"/>

    </mappers>

</configuration>

 

config.xml中内容

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

<mapper namespace="com.iotek.dvd">

    <select id="insert"resultType="User">

        <![CDATA[

            select * from User where id= 5

        ]]>

    </select>

</mapper>

user.xml中内容

 

UserDao中写好代码

写个测试类测试一下

成功

User的查询功能就利用Mybatis成功实现了。

 

明天计划的事情:

了解学习Junit完成步骤18,了解学习Spring

 

遇到的困难:其实最大的麻烦就是配置xml文件,有的时候你感觉已经非常小心翼翼了,但还是避免不了执行程序时结果一片泛红。不过通过返回的错误信息还是可以非常准确的定位出错误在哪的,认真修改就好。

 

收获:今天并没有太多新东西,相当于做了一次练习,不过我觉得很有意义,通过这几天对JdbcTemplate以及Mybatis的学习和操作,以及maven的导包,已经对用配置文件来写程序感到非常习惯了,相信之后框架的学习也会常常用到配置文件。对JdbcTemplateMybatis的使用变得熟练了,而且通过不停的配置信息,对bean也已经由之前的完全不懂到现在已经基本清楚是怎么个回事了。继续努力吧!

 



返回列表 返回列表
评论

    分享到