IBatis——初步总结

article/2025/9/13 8:41:54

          IBatis是持久层的框架,也就是我们说的Dao层框架,关注数据库操作以及和Java对象之间的关联,我们将这样的框架也称之为ORMObject/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.xmlSqlMap.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的配置总结
当然更重要的是我们在使用中的不断的熟悉掌握,才能得心应手。




http://chatgpt.dhexx.cn/article/Y98WOk1K.shtml

相关文章

XMind导入Markdown(利用Typora导出opml)

安装Xmind XMind 是一款非常实用的商业思维导图软件 首先&#xff0c;安装Xmind并打开。通过"帮助"——>“关于Xmind”&#xff0c;可以获取到当前的版本号为 XMind 8 Update 9 在"文件"——>“导入”&#xff0c;可以看到Xmind支持的导入格式仅有…

推荐一款高效Cpp解析xml工具--RapidXml

解析效率比Xerces DOM 快50-100倍&#xff0c;tinyxml快30-60 &#xff0c;作者自己牛逼哄哄的说这是他所知道的最快的xml解析库了~~ 作者介绍说&#xff1a;" The table below compares speed of RapidXml to some other parsers, and to strlen() function executed on…

C++中rapidxml用法及例子

rapidxml是一个快速的xml库&#xff0c;比tinyxml快了50-100倍。本文给出创建、读取、写入xml的源码。 由于新浪博客不支持文本文件上传&#xff0c;在使用下面代码需要先下载 rapidxml&#xff0c;关于这个库的下载地址为&#xff1a; 官方网站&#xff1a; http://rapidxml.…

C++ Xml解析的效率比较(Qt/TinyXml2/RapidXml/PugiXml)

C Xml解析的效率比较&#xff08;Qt/TinyXml2/RapidXml/PugiXml&#xff09; C Xml解析的效率比较QtTinyXml2RapidXmlPugiXml 问题背景测试环境Qt - QDomDocumentTinyXml-2RapidXmlPugiXml总结 通常我们在一些软件的初始化或者保存配置时都会遇到对XML文件的操作&#xff0c;包…

SlimXml和TinyXml,RapidXml的性能对比

July 18th, 2010 zero Leave a comment Go to comments 前两天有朋友问&#xff0c;我的SlimXml有没有和RapidXml对比过效率&#xff1f;我是第一次听说这个库&#xff0c;更不用说对比效率了&#xff0c;于是上他们网站看了下。 好家伙&#xff0c;居然号称比TinyXml快30&…

RapidXml使用

vs2017 rapidxml-1.13 1 RapidXml使用 1.1 创建xml #include <iostream> #include "rapidxml/rapidxml.hpp" #include "rapidxml/rapidxml_utils.hpp" #include "rapidxml/rapidxml_print.hpp"using namespace rapidxml;void crateXml(…

使用rapidxml解析xml

rapidxml是一个由C模板实现的高效率xml解析库&#xff0c;号称解析速度比tinyxml快50倍&#xff08;忽悠&#xff09;&#xff0c;并作为boost::property的内置解析库&#xff1a; 其独立版本的官网&#xff1a;http://rapidxml.sourceforge.net/ 使用rapidxml的方法tinyxml极其…

RapidXml读取并修改XML文件

RapidXml读取并修改XML文件 RapidXml介绍RapidXml读取与修改xml文件 RapidXml介绍 RapidXml尝试创建最快的XML解析器&#xff0c;同时保留可用性&#xff0c;可移植性和合理的W3C兼容性。它是一个用现代C 编写的原位解析器&#xff0c;解析速度接近strlen在同一数据上执行的函数…

c++开源库rapidxml介绍与示例

官方地址&#xff1a;http://rapidxml.sourceforge.net/ 官方手册&#xff1a;http://rapidxml.sourceforge.net/manual.html 也可以在github上下载到别人上传的rapidxml:https://github.com/dwd/rapidxml 1.头文件 一般我们用到的头文件只有这三个 #include "rapidx…

Ubuntu 18.04 LDAP认证

将ubuntu配置为通过ldap认证&#xff0c;使其成为ldap client&#xff0c;系统版本ubuntu 18.04。 一 软件安装 apt-get install ldap-utils libpam-ldap libnss-ldap nslcd配置1 配置2 配置3 配置4 配置5 配置6 配置7 配置8 配置8 二 认证方式中添加Ldap #auth-client-conf…

LDAP认证服务器

1.要准备的环境与软件(这里测试环境是Centos6.0-64位系统) alfresco-community-4.2.c-installer-linux-x64.bin (注: alfresco是一个免费开源系统&#xff0c;可以自己去下载) apache-tomcat-7.0.42.tar db-4.5.20.tar jdk-6u45-linux-x64.bin openldap-stable-20100219.tar ph…

Jumpserver部署+Ldap认证

内容导航 &#xff08;一&#xff09;jumpserver快速部署1&#xff0c;部署内容2&#xff0c;附上安装脚本3&#xff0c;解决github无法连接4&#xff0c;修改配置 &#xff08;二&#xff09;使用jumpserver1&#xff0c;登录信息2&#xff0c;添加主机3&#xff0c;web终端登…

SVN使用LDAP认证

前言 SVN架构 用户访问SVN服务器分为两个部分&#xff1a;认证与授权。 SVN内置了有认证与授权机制&#xff0c;其认证是通过SVN仓库内的passwd文件提供&#xff0c;但它是明文、静态的&#xff0c;不方便且安全性低。 SVN还支持外部的认证&#xff0c;比如SASL&#xff0c;…

ldap 认证 java_Java实现LDAP认证(上)

Baidu脑残&#xff0c;把原来的空间改得不伦不类。所以把一些技术的东西挪到这里。 我找到两种方法&#xff0c;大同小异&#xff0c;第一种是通过Spring&#xff0c;适合已经采用Spring的项目。 一般来说用户名和密码都是保存在数据库中。现在有这个需求&#xff0c;用户名和密…

Harbor 整合ldap认证

前提&#xff1a; ldap服务器已经安装&#xff1a;OpenLDAP安装部署 harbor服务器已经安装&#xff1a;Harbro v1.8.0部署 一、ldap组织结构 1、登录信息 2、查看用户信息 二、harbor配置 1、使用默认密码登录&#xff0c;admin/Harbor12345 2、认证模式 3、测试ldap服务器…

ldap认证 java_Java实现LDAP认证(上) | 学步园

Baidu脑残&#xff0c;把原来的空间改得不伦不类。所以把一些技术的东西挪到这里。 我找到两种方法&#xff0c;大同小异&#xff0c;第一种是通过Spring&#xff0c;适合已经采用Spring的项目。 一般来说用户名和密码都是保存在数据库中。现在有这个需求&#xff0c;用户名和密…

Zabbix 整合ldap认证

前提&#xff1a; zabbix部署完成&#xff1a;CentOS7.3 64位&#xff0c;搭建Zabbix3.4 ldap部署完成&#xff1a;OpenLDAP安装部署 一、LDAP服务端 1、ldap登录信息 2、查看ldap组织架构 3、添加zabbix默认用户Admin 二、Zabbix网页端 1、使用zabbix默认管理员用户登录 …

linux+配置ldap认证,Linux LDAP 认证配置

Linux通过LDAP方式&#xff0c;使用windows AD帐户登录linux shell&#xff0c;这个想法很cool吧。之前配置过一次&#xff0c;但过了太久忘记了&#xff0c;因此&#xff0c;今天把配 Linux通过LDAP方式&#xff0c;使用windows AD帐户登录linux shell&#xff0c;这个想法很c…

JumpServer 整合ldap认证

前提&#xff1a; ldap服务器已经安装&#xff1a;OpenLDAP安装部署 一、JumpServer安装 官网安装地址安装部署 - JumpServer 文档 1、一键部署 #系统版本 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) #默认会安装到 /opt/jumpser…

linux samba 配置ldap认证,Samba集成Ldap认证

Samba集成Ldap认证 1.基础安装 yum -y install samba-common samba samba-client smbldap-tools openldap-clients nss-pam-ldapd 2.配置authconfig-tui 执行命令 "authconfig-tui" 验证配置 # getent passwd zhangsan:x:6460:18650:zhangsan:/home/zhangsan:/bin/…