概念:
iBATIS , 又是一个O/R Mapping的解决方案(例如 hibernate的ORM 也是解决方案之一.)
网上很多人便将其称为ORM , 但是用过的人, 应该都会觉得并不恰当.
与其称之为一个OR Mapping , 倒不如叫它SQL Mapping...
iBATIS 的特点是小巧, 简单. 但是要求需要熟悉SQL , 不像hibernate那样, 可以让你一句sql 都不用写
同时, 我觉得要写挺多的配置文件的. 可能会比较繁琐.

sample

还是拿最简单的 User 类来测试. User.java
public class User {

private int id;
private String username;
private String userpwd;
private String userdesc;

//Sets and Gets...
}
public class User {

private int id;
private String username;
private String userpwd;
private String userdesc;

//Sets and Gets...
}

接下来... 马上看看... dao里面的一个方法有多简单~~ UserDao.java

Java代码
public static List getAllUsers() throws SQLException {

SqlMapClient sqlMap = Utils.getSqlmap();
try {
List li = sqlMap.queryForList("getAllUsers");

} catch (SQLException e) {
e.printStackTrace();
}
return li;
}
public static List getAllUsers() throws SQLException {

SqlMapClient sqlMap = Utils.getSqlmap();
try {
List li = sqlMap.queryForList("getAllUsers");

} catch (SQLException e) {
e.printStackTrace();
}
return li;
}

是的, dao里面的一个方法只需要这么几句话.

看看怎么实现的吧...

首先, 我们需要一个跟 User 类对应的 配置文件 User.xml(名字相同并不是硬性规定, 只是方便管理)

Xml代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="User">

<typeAlias alias="user" type="pojo.User"/>

<select id="getAllUsers" resultClass="user">
select * from user order by id;
</select>

</sqlMap>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="User">

<typeAlias alias="user" type="pojo.User"/>

<select id="getAllUsers" resultClass="user">
select * from user order by id;
</select>

</sqlMap>

接下来, 需要一个另一个配置文件, 将User.xml 加入 其中, 同时还要在里面配置数据源---- 即数据库的连接等等... SqlMapConfig.xml

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

<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

<properties resource="sqlmap.properties"/>

<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${jdbc.driverClassName}" />
<property name="JDBC.ConnectionURL" value="${jdbc.url}" />
<property name="JDBC.Username" value="${jdbc.username}" />
<property name="JDBC.Password" value="${jdbc.password}" />
</dataSource>
</transactionManager>
<sqlMap resource="sql/User.xml" />

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

<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

<properties resource="sqlmap.properties"/>

<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${jdbc.driverClassName}" />
<property name="JDBC.ConnectionURL" value="${jdbc.url}" />
<property name="JDBC.Username" value="${jdbc.username}" />
<property name="JDBC.Password" value="${jdbc.password}" />
</dataSource>
</transactionManager>
<sqlMap resource="sql/User.xml" />

</sqlMapConfig>

在这里, 我们把数据库的相关参数保存在了另一个文件中, sqlmap.properties

Java代码
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/myblog
jdbc.username=root
jdbc.password=netjava
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/myblog
jdbc.username=root
jdbc.password=ipanel

这样做的好处, 相信大家也明白.. 下次我们再写一个项目的时候, 只需要把这个文件copy 过去, 改掉其中的数据库连接就ok啦 , 也算是资源的充分利用吧..

至此, 所有的配置文件 都已经上场, 当然上面写的都是最简单的测试, 看起来比较没有那么繁琐, 实际应用时候, 可能最麻烦的地方就是在 配置文件的 sqlmap 的编写...

前面 UserDao.java 的方法中, 有这么一句

Java代码
1.SqlMapClient sqlMap = Utils.getSqlmap();
SqlMapClient sqlMap = Utils.getSqlmap();

Utils 类 就是我们抽取其中的初始化的代码, 单独写成一个类, 当然还是方便重用哈.同时采用的是单实例模式, 相当环保.

Utils.java

Java代码
1.public class Utils{
2.
3. private static SqlMapClient sqlMapper;
4. public static synchronized SqlMapClient getSqlmap()
5. {
6. if(sqlMapper==null)
7. {
8. try {
9. Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
10. sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
11. reader.close();
12. } catch (IOException e) {
13. e.printStackTrace();
14. }
15. }
16. return sqlMapper;
17. }
18.}
public class Utils{

private static SqlMapClient sqlMapper;
public static synchronized SqlMapClient getSqlmap()
{
if(sqlMapper==null)
{
try {
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sqlMapper;
}
}

好了, 所有的相关文件都已经上场.. 当然, 加上 iBATIS的 jar包是前提 , 还是提醒下, 要注意版本问题...

UserDao 是怎样操作数据库的
首先 , Utils 通过SqlMapConfig.xml里面的配置, 连接到数据库, 取得SqlMap , 同时User.xml 将Sql查询映射成java中可以调用的bean, 通过SqlMap 调用这些bean 就是在执行想对应的sql语句...

ibatis新手上路相关推荐

  1. Windows内核新手上路1——挂钩SSDT

    Windows内核新手上路1--挂钩SSDT 这个系列记录学习我学习windows内核的点点滴滴,高手请直接无视. 文章核心内容:挂钩SSDT中函数列NtOpenProcess,NtDuplicate ...

  2. Windows内核新手上路3——挂钩KeUserModeCallBack

    Windows内核新手上路3--挂钩KeUserModeCallBack 1.     简介 在Windows系统中,提供了几种方式从R0调用位于R3的函数,其中一种方式是KeUserModeCall ...

  3. Windows内核新手上路2——挂钩shadow SSDT

    Windows内核新手上路2--挂钩shadow SSDT 文章核心内容:安全软件窗口保护.安全输入.截屏保护的一些思路.挂钩NtUserFindWindowEx.NtUserGetForegroun ...

  4. Linux新手上路命令

    Linux新手上路命令 命令:www.ahlinux.com Ctrl+Alt+F1  进入命令界面 Ctrl+Alt+F7  返回图形界面 root用户和普通用户切换 administrator 2 ...

  5. 千寻和省cors精度对比_测量员新手上路攻略:解析省CORS和千寻CORS账号区别及其如何选择运用...

    原标题:测量员新手上路攻略:解析省CORS和千寻CORS账号区别及其如何选择运用 说到CORS.CORS账号,想必大家都不陌生,CORS-连续运行卫星定位服务系统,现在多代指网络RTK,是在传统RTK ...

  6. python必备基础代码-新手上路必学的Python函数基础知识,全在这里了(多段代码举例)...

    原标题:新手上路必学的Python函数基础知识,全在这里了(多段代码举例) 导读:函数是Python中最重要.最基础的代码组织和代码复用方式.根据经验,如果你需要多次重复相同或类似的代码,就非常值得写 ...

  7. 软件项目经理新手上路16 - 后记,一切才刚刚开始

    如果你内向,同时觉得自己够聪明,就去做软件开发人员吧.这是我当时为什么从事软件行业的原因.而且,我发现不是我一个人这么想,中国内向的聪明人实在是太多了.这些人都认为,相对于面对人而言,他们更善于面对电 ...

  8. 固定字符结尾的正则_新手上路:图文解读助你理解和使用正则表达式

    选自janmeppe.com 作者:Jan Meppe 机器之心编译 参与:韩放.杜伟 这篇博客是关于正则表达式(regex)的插图指南,旨在为那些从来没有使用过正则表达式,想尝试但又望而生畏的新手提 ...

  9. HanLP《自然语言处理入门》笔记--1.新手上路

    文章目录 1. 新手上路 1.1 自然语言与编程语言的比较 1.2 自然语言处理的层次 1.3 自然语言处理的流派 1.4 机器学习 1.5 语料库 1.6 开源工具 1.7 总结 1.8 GitHu ...

最新文章

  1. pandas使用pd.concat纵向合并多个dataframe实战:纵向合并(ignore_index参数)、为纵向合并的多个dataframe设置标识符指定数据来源(通过字典方式设置数据来源键)
  2. android x86小白安装教程,小白的教程,在windows上安装完美的Android手机驱动
  3. 数据之路 Day8 Numpy包
  4. java 应用连接oracle 超级慢的解决方法
  5. mysql学习之-密码管理(默认密码,修改密码,解决忘记密码)
  6. Js中的callback机制
  7. OpenCASCADE:OCCT应用框架OCAF之形状属性
  8. C语言:格式字符串中的类型
  9. 34 SD配置-销售凭证设置-定义销售凭证类型
  10. linux服务器定时关机重启,Ubuntu Server 10.10 每天定时开关机linux服务器应用 -电脑资料...
  11. 枚举算法:概率计算。在标注编号分别为1,2,...,n的n张牌中抽取3张,试求抽出3张牌编号之和为素数的概率。输入整数n(3<n<=3000),输出对应的概率(四舍五入到小数点后第3位)。
  12. android强制结束进程_Android完全强制退出应用程序
  13. should, could, would, will, be going to, may, might到底有甚麼不同,又該怎麼用?
  14. bzoj 1228 [SDOI2009]ED
  15. 深度装机大师一键重装_就算是电脑小白也能使用自如的重装软件,了解一下?...
  16. win11取消右键菜单折叠恢复经典传统菜单模式方法解决
  17. Python-[jieba库应用]-统计水浒传中人物出现次数
  18. Python开发 CDN查询子域名查询
  19. 汇正财经推荐股票靠谱吗?说说自己的经历
  20. Confluence使用教程-不古出品

热门文章

  1. 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究[转]...
  2. 【c++】十进制转换成2~36进制
  3. A - Seat Occupation
  4. 来了,Github 终于上线收藏夹了
  5. 电荷放大器的Matlab仿真
  6. PTA---C++实现,计算正方体、圆柱体的表面积、体积
  7. 大数据征信的应用和启示:ZestFinance的基于大数据的信用评估技术
  8. 网络安全2.0主动防御体系有哪些新思路?
  9. 使用信用卡会影响征信?那是你没注意这些地方!
  10. 开发那点事(十五)微信小程序webView首次进入白屏优化方案