iBATIS&Spring合奏(一)--DAO
发布日期:2021-07-01 05:14:46
浏览次数:2
分类:技术文章
本文共 6603 字,大约阅读时间需要 22 分钟。
iBATIS,大家都用的比喻就是什么半自动步枪之类的,没错。一个框架是做神马的相信靠谱点的程序猿们都会先去Google,然后看看官方文档之类的,再在网上找点代码copy下然后运行看看。随后需要深入研究了,需要性能优化了,再去深入研究和体会,牛者自己写个差不多的框架用起来还爽些。这合奏系列文章就是提供给刚刚接受iBATIS框架,想和Spring放在一起用的猿类们的。也是觉得过几阵子不用它自己也会不记得了,先写下来,以后用到的时候也会方便唤醒沉睡的记忆。 1)iBATIS做ORM,还是很轻便且强大的,某些方面的性能方面比Hibernate好些啦。下面简单建两个数据库。如下图: 当然,这里先不用外键,今天是第一步。等会会有两表连接的查询,存储过程下次介绍。然后就是POJO也就是domain模型,这里就不列举代码了。Order表中的user会联合User表的username做链接查询。先以user的操作为例。 2)iBATIS的核心配置文件SqlMapConfig.xml如下:这里配置了数据源,属性值通过读取Properties文件获得。这里就不列举该文件了。涉及到了三个sqlMap标签中指明的资源配置文件。 3)sqlMap配置文件。先看看User.xml。
一看就知道了很多的sql语句。参数类型,返回值类型都在CRUD相关标签中配置了。相信熟悉Hibernate的同学看这个应该很容易理解的。##中间夹着的不就是可爱的参数啦,参数,当然我们在后面看是如何传进来的。下面开始把Spring搞进来啦。 4)Spring在此不介绍了,这里只简单用了Ioc,陆续会加上事务管理的融合再加上Aop的东东。当然也用到了Spring的中间层数据访问的DAO支持。先看beans.xmlINSERT INTO user ( username, password, company )VALUES( ?,?,? ) update user set username=#username#, password=#password#, company=#company# where id=#id# delete from user where id=#id#
5)DAO 接口的示例如下。只简单列举到User表的操作DAO。classpath:sqlmap.properties
package com.qiyun.spritis.persistence.sqlmapdao.interfaces;import java.util.List;import org.springframework.dao.DataAccessException;import com.qiyun.spritis.pojo.User;public interface UserDao { List6)DAO的实现类。这里用到了Spring的Templete方法,和HibernateTemplete差不多。如下先睹为快:getAllUsers()throws DataAccessException; List getUserByCompanyName(String compName) throws DataAccessException; void insertUser(User user) throws DataAccessException; void updateUser(User user) throws DataAccessException; void deleteUserById (int id) throws DataAccessException;}
package com.qiyun.spritis.persistence.sqlmapdao.impl;import java.util.List;import org.springframework.dao.DataAccessException;import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;import com.qiyun.spritis.persistence.sqlmapdao.interfaces.UserDao;import com.qiyun.spritis.pojo.User;public class UserSqlMapDao extends SqlMapClientDaoSupport implements UserDao { @Override public void deleteUserById(int id) throws DataAccessException { getSqlMapClientTemplate().delete("deleteUser", id); } @SuppressWarnings("unchecked") @Override public List到这里就差不多懂了吧,就是把User。xml配置文件中的id和所要传入的参数给getSqlMapClientTemplate方法去调用iBATIS来处理。Spring只是对iBATIS获取sqlMapClient这个核心类进行了轻量的封装。当然为了把AOP加进来,少不了Service层啦。 7)Service层,用Spring容器来管理的Dao们要呼之欲出了。以后要加什么逻辑的话还可以进一步封装。UserService类如下:getAllUsers() throws DataAccessException { return (List )getSqlMapClientTemplate().queryForList("getAllUsers"); } @SuppressWarnings("unchecked") @Override public List getUserByCompanyName(String compName) throws DataAccessException { return (List )getSqlMapClientTemplate().queryForList("getUsersByCompanyName2",compName); } @Override public void insertUser(User user) throws DataAccessException { getSqlMapClientTemplate().update("insertUser",user); } @Override public void updateUser(User user) throws DataAccessException { getSqlMapClientTemplate().update("updateUser",user); }}
package com.qiyun.spritis.service;import java.util.List;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.qiyun.spritis.persistence.sqlmapdao.impl.UserSqlMapDao;import com.qiyun.spritis.persistence.sqlmapdao.interfaces.UserDao;import com.qiyun.spritis.pojo.User;public class UserService { public List8)以上就不错做解释,下面开始测试啦。用JUnit来测一下吧,比较方便,用单元测试的好处,相信猿类们早有体会。UserServiceTest如下:getAllUsers() throws Exception { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); UserDao service = (UserSqlMapDao)ctx.getBean("userDao"); List list=(List )service.getAllUsers(); ctx.destroy(); return list; } public List getUserByCompanyName(String company)throws Exception { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); UserDao service = (UserSqlMapDao)ctx.getBean("userDao"); List list=(List )service.getUserByCompanyName(company); ctx.destroy(); return list; } public void insertUser(User user) throws Exception{ ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); UserDao service = (UserSqlMapDao)ctx.getBean("userDao"); System.out.println(service.getClass()); service.insertUser(user); ctx.destroy(); } public void deleteUser(int id)throws Exception{ ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); UserDao service = (UserSqlMapDao)ctx.getBean("userDao"); service.deleteUserById(id); ctx.destroy(); } public void updateUser(User user)throws Exception{ ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); UserDao service = (UserSqlMapDao)ctx.getBean("userDao"); service.updateUser(user); ctx.destroy(); }}
package com.qiyun.spritis.test;import java.util.List;import org.junit.Test;import com.qiyun.spritis.pojo.User;import com.qiyun.spritis.service.UserService;public class UserServiceTest { @Test public void testGetAllUsers() throws Exception { UserService us=new UserService(); List到此。一个Spring和iBATIS的前奏总算演奏完了。当然很简单的一个示例。后面会陆续加上连接查询,动态SQL,以及一些Handler的介绍。等用熟了之后再深入其架构,一个好用的框架当然少不了好的设计模式。先到这里。源码奉上。如果运行中报错,希望同学们先Google一下,可能是缺jar包哦。项目压缩包:spritis(Spring+iBATIS)li=us.getUserByCompanyName("TB"); for(int i=0;i li=us.getAllUsers(); System.out.println("最新添加的员工:"+li.get(li.size()-1).getUsername()); } @Test public void testDeleteUser()throws Exception{ UserService us=new UserService(); us.deleteUser(8); } @Test public void testUpdateUser()throws Exception{ User u=new User(); u.setId(new Integer(8)); u.setUsername("LK"); u.setPassword("lk"); u.setCompany("IBM"); UserService us=new UserService(); us.updateUser(u); } }
转载地址:https://nanyao.blog.csdn.net/article/details/46715369 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年05月05日 21时48分14秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[转]linux下删除文件就是unlink该文件吗?
2019-05-05
suds 0.4 : Python Package Index
2019-05-05
堆排序——BuildHeap和Heapify函数的实现
2019-05-05
GSview
2019-05-05
firefox 17.0 编包记(fedora 17)
2019-05-05
二分查找_百度百科
2019-05-05
REDHAT6 boost安装
2019-05-05
Ghostscript: Ghostscript Downloads
2019-05-05
分享:fastjson 1.1.28 发布,Java 的 JSON 库
2019-05-05
关于 Boost.PropertyTree
2019-05-05
分享:RethinkDB 1.4 发布,分布式 JSON 数据库
2019-05-05
分享:RethinkDB 1.4 发布,分布式 JSON 数据库
2019-05-05
分享:TCPDF 6.0 发布,不再支持 PHP 4.x
2019-05-05
分享:Etherpad 1.2.9 发布,线上共制平台
2019-05-05
分享:Linux C 文件打开数量限制(文件描述符)
2019-05-05