发表于: 2018-03-17 15:34:38
1 713
今天完成的事情:
JdbcTemplate与Mybatis的练习
之前有做过一个类似于影碟租赁系统的程序,也有使用到数据库,所以就试试能不能用JdbcTemplate与Mybatis实现一下。
先介绍一下我们的实体,有3个,第一个是dvd
有4个属性编号、影碟名字、借出次数、状态(可借\ 不可借)
第2个是记录
有5个属性编号、用户id、影碟id、借出时间、归还时间
第3个是用户
有4个属性编号、账号、密码、类型(管理员\普通用户)
建立新的maven工程
往pom.xml文件中添加依赖,去之前的工程中找就行
建立好实体类,用于封装从数据库中查询出来的数据,定义好他们的属性和类型以及get、set方法。
由于使用的是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));
}
}
而DVD和Record中是增加和删除的功能,所以使用了另外一个方法
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份,注意bean的id和所对应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的查询方法.
成功
尝试Dvddao的insert方法。
成功
recordDao的delete方法
成功
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的导包,已经对用配置文件来写程序感到非常习惯了,相信之后框架的学习也会常常用到配置文件。对JdbcTemplate和Mybatis的使用变得熟练了,而且通过不停的配置信息,对bean也已经由之前的完全不懂到现在已经基本清楚是怎么个回事了。继续努力吧!
评论