IBatis是持久层的框架,也就是我们说的Dao层框架,关注数据库操作以及和Java对象之间的关联,我们将这样的框架也称之为ORM(Object/Relaction Mapping)框架.而这里映射的主要是我们的表和实体(bean)之间的对应关系。或者说IBatis更像是一个映射器.

一,概念介绍:IBatis是对JDBC的轻量级的封装,可以使我们将SQL语句写在配置文件中,独立出来,通过映射器SQL Mapper来达到实体和数据表的一一映射,看这张图:

所以说IBatis的核心仍然是SQL语句,使用IBatis框架,避免了写繁杂的JDBC代码,我们只需要在配置文件中写我们的想要实现功能的sql语句,然后进行相关配置,在Dao层进行调用即可了,既方便了我们的编写代码,提高了效率,还是我们的sql语句独立了出来,我们可以根据业务需求进行随时的修改,达到了高扩展性的要求。

二,IBatis框架的使用步骤:

1,导入IBatis框架的jar包:ibatis-2.3.4.726.jar(根据自己版本)

2,由于iBatis框架封装了JDBC,简化了JDBC的操作,所以需要连接数据库,导入数据库的驱动jar包(ojdbc14.jar)

3,(可选)如果我们想要看操作日志,可以使用log4j组件,导入其对应的jar包:log4j-1.2.14.jar,然后将对应的配置文件log4j.properties放到对应的类跟路劲下(src目录下)。

4,将ibatis框架中提供的核心配置文件SqlMapConfig.xml文件拷贝到类的根路径下,需要注意的是:a,该文件的名字不一定叫做SqlMapConfig.xml,可以修改,因为后边需要我们指定;            b,该文件存放的路径不一定是类的根路径,只要在类的路径当中即可,这个也是需要我们指定的。    c,SqlMapConfig.xml是ibatis框架的核心配置文件,在该文件中主要配置连接池以及事务管理器等。

5,将ibatis框架中提供的配置文件SqlMap.xml文件拷贝到项目中:注意:a,该文件主要配置SQL语句的映射关系,主要在该配置文件中编写SQL语句。      b,一般情况下这个文件和javabean放在一起,便于管理,一个javabean会对应一个SqlMap.xml文件。     c,该文件的命名一般都和javabean的类名一致。(当然这只是大家习惯,没有强制规定。)

这样,我们的环境就算搭建出来了,除了jar包考取外,重要的就是SqlMapConfig.xml和SqlMap.xml这两个重要的配置文件。这个只是使用了IBatis相对来说比较简单,后边会有和spring的集成合并,会有各自的分工。

三,SqlMapConfig.xml文件的编写

在属性文件db.properties中我们设定我们连接数据库的相关信息,在SqlMapConfig.xml中我们可以利用JDBC进行简单数据库的连接,然后就是对SqlMap.xml进行资源配置:看下边简单的例子:

 <sqlMapConfig><!-- 读取属性文件 --><properties resource="db-config.properties"/><!-- 配置事务管理器 --><transactionManager type="JDBC" commitRequired="false"><!-- 连接池 --><dataSource type="SIMPLE"><property name="JDBC.Driver" value="${driver}" /><property name="JDBC.ConnectionURL" value="${url}" /><property name="JDBC.Username" value="${username}" /><property name="JDBC.Password" value="${password}" /></dataSource></transactionManager><!-- 配置SqlMap.xml文件的路径 --><sqlMap resource="com/ljh/ibatis/bean/User.xml" /></sqlMapConfig>

这样在Dao层中通过创建IBatis的核心对象SqlMapClient,就能读取我们的这个配置文件,进行起作用了。

看一下D层如何获取此对象:

 //定义成员静态变量,整个类都可以使用private static SqlMapClient sqlMapper;//静态块,初始化加载的static{Reader reader = null;try {//读核心配置文件reader = Resources.getResourceAsReader("SqlMapConfig.xml");//根据配置文件得到sqlMapClient对象,以供后边使用。sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);} catch (IOException e) {e.printStackTrace();}finally{if(reader!=null){try {reader.close();} catch (IOException e) {e.printStackTrace();}}}}

四,SqlMap.xml文件的编写,在这个文件中我们一个编写所有的增删改查的语句,当然也可以编写事物,在这里我们可以制定传入参数,返回结果,可以是字符串型的,实体类对象的,也可以利用集合来代替一些多表的查询等,因为语法较多,这里简单几个例子:

<sqlMap namespace="empSQL"><!-- 指定类型的别名 --><typeAlias alias="MapType" type="java.util.HashMap"/><typeAlias alias="EmpType" type="com.bjpowernode.ibaits.bean.Emp"/><typeAlias alias="StringType" type="java.lang.String"/><!-- 根据Map集合查询,返回实体结果 --><select id="selectEmpID" parameterClass="MapType" resultClass="EmpType">select * from emp where deptno=#a# and job=#b# and sal=#c#</select><!-- 根据字符串字符查询返回map集合 --><select id="selectEmp2ID" parameterClass="StringType" resultClass="MapType">select e.ename,e.sal,d.dname,s.grade from emp e join dept d on e.deptno=d.deptno join salgrade s    on e.sal between s.losal and s.hisal where e.job=#xxxx#</select></sqlMap>

这里我想提的是,实体中的属性名和表中的字段名最好一致,如果不一致需要我们as进行映射,不过还是根据实际清空,来决定。

我们把SQL语句编写好以后,就剩下我们Dao层的访问了,看这两个类,是不是很简单哈:

     //根据map集合中的字符串查找,返回实体的list集合public List<Emp> selectEmp(String deptno, String job, String sal)throws Exception {Map<String,String> map = new HashMap<String,String>();map.put("a", deptno);map.put("b", job);map.put("c", sal);return sqlMapper.queryForList("empSQL.selectEmpID", map);}@Override//根据实体查询,返回map的list集合,感觉还是非常实用的public List<Map> selectEmp2(String job) throws Exception {return sqlMapper.queryForList("empSQL.selectEmp2ID", job);}

当然这只是简单的使用,更多的IBatis资料,请查看这里:IBatis入门       iBatis SqlMap的配置总结
当然更重要的是我们在使用中的不断的熟悉掌握,才能得心应手。

IBatis——初步总结相关推荐

  1. 【转】ibatis的简介与初步搭建应用

    [转]ibatis的简介与初步搭建应用 一.ibatis的简介 ibatis是什么东西就不介绍了,自己去找谷老师. 这里讲下自己的使用体会.之前自己学过Hibernate,是看尚学堂的视频教学的,看完 ...

  2. ibatis的简介与初步搭建应用

    一.ibatis的简介 ibatis是什么东西就不介绍了,自己去找谷老师. 这里讲下自己的使用体会.之前自己学过Hibernate,是看尚学堂的视频教学的,看完以后发现Hibernate体系中的内容真 ...

  3. (Mybatis)Mybatis简介和初步使用

    1. Mybatis简介 1.1什么是Mybatis MyBatis 是一款优秀的持久层框架 它支持定制化 SQL.存储过程以及高级映射. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参 ...

  4. TensorRT 7.2.1开发初步

    TensorRT 7.2.1开发初步 TensorRT 7.2.1开发人员指南演示了如何使用C ++和Python API来实现最常见的深度学习层.它显示了如何采用深度学习框架构建现有模型,并使用该模 ...

  5. SOC,System on-a-Chip技术初步

    SOC,System on-a-Chip技术初步 S O C(拼作S-O-C)是一种集成电路,它包含了电子系统在单个芯片上所需的所有电路和组件.它可以与传统的计算机系统形成对比,后者由许多不同的组件组 ...

  6. iBatis的CRUD操作详细总结

    昨天晚上看了一下关于iBatis的一个讲解的视频,讲的和我的这个简单的总结差不多.... 思考了一下还是把主要操作都总结一下吧,当然这里也不是全的,知识简单的CRUD... 首先我觉得持久层的操作主要 ...

  7. 《OpenCV3编程入门》学习笔记3 HighGUI图形用户界面初步

    第3章 HighGUI图形用户界面初步 3.1 图像的载入.显示和输出到文件 1.OpenCV命名空间2种访问方法 (1)代码开头加:usingnamespace cv; (2)每个类或函数前加:cv ...

  8. 初步判断内存泄漏方法

    有时候,内存泄漏不明显,或者怀疑系统有内存泄漏,我们可以通过下面介绍的方法初步确认系统是否存在内存泄漏. 首先在Java命令行中增加-verbose:gc参数, 然后重新启动java进程. 当系统运行 ...

  9. android蓝牙4.0(BLE)开发之ibeacon初步

    一个april beacon里携带的信息如下 ? 1 <code class=" hljs ">0201061AFF4C0002159069BDB88C11416BAC ...

最新文章

  1. 使用SVG中的Symbol元素制作Icon
  2. 在线旅游资源点评受宠,但质量参差不齐
  3. 小白 vue-cli 项目打包
  4. C++实现插值查找(附完整源码)
  5. Spring boot 定制banner
  6. 把日志文件从Linux服务器拷贝到Windows上
  7. 三星WP7手机MANGO一分钟完美越狱
  8. Hibernate中使用Criteria查询及注解——(DeptTest.java)
  9. Host key verification failed. fatal: Could not read from remote repository.Please make sure you have
  10. Python入门(01) -- 列表简介
  11. VALSE学习(十九):VALSE2018-历届资源汇总
  12. 从零开始研发GPS接收机连载——4、GPS模拟器数据采集验证
  13. 迭代重心法 matlab,重心法
  14. strcmp, strcasecmp, memcmp
  15. 面试被问到CAS原理,触及知识盲区,脸都绿了!
  16. 通过微信小程序看前端
  17. 查看linux snmp状态,Linux开启snmp及查询
  18. Basler工业相机python开发(Pypylon)
  19. Oracle回收站及flashback drop
  20. linux下eclipse开发storm,eclipse 通过maven 开发storm项目

热门文章

  1. 高级shell扩展---getopts命令
  2. 浪潮存储实现“微秒级”响应,为新农合IT服务提速
  3. 网站安全性评估内容要求
  4. 小米note3 android费电,大电池就是续航长?荣耀 Play3 与红米 Note8 耗电效率实测对比...
  5. view.performclick()不执行
  6. AndroidHook机制——Hook动态代理实现插件化
  7. WordPress留言随机本地头像
  8. android TextView文字底部或者中间加横线
  9. Go+ Together!——Go+ 1.0 发布在即
  10. java 与 模式_从状态模式看 JavaScript 与 Java