zoukankan      html  css  js  c++  java
  • IBatis——(一)

        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进行资源配置:看下边简单的例子:

    1. <sqlMapConfig>  
    2.      <!-- 读取属性文件 -->  
    3.     <properties resource="db-config.properties"/>  
    4.     <!-- 配置事务管理器 -->  
    5.     <transactionManager type="JDBC" commitRequired="false">  
    6.         <!-- 连接池 -->  
    7.         <dataSource type="SIMPLE">  
    8.             <property name="JDBC.Driver" value="${driver}" />  
    9.             <property name="JDBC.ConnectionURL" value="${url}" />  
    10.             <property name="JDBC.Username" value="${username}" />  
    11.             <property name="JDBC.Password" value="${password}" />  
    12.         </dataSource>  
    13.     </transactionManager>  
    14.     <!-- 配置SqlMap.xml文件的路径 -->  
    15.     <sqlMap resource="com/ljh/ibatis/bean/User.xml" />  
    16. </sqlMapConfig>  

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

     

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

    1. //定义成员静态变量,整个类都可以使用  
    2. private static SqlMapClient sqlMapper;  
    3.     //静态块,初始化加载的  
    4.     static{  
    5.         Reader reader = null;  
    6.         try {  
    7.                  //读核心配置文件  
    8.             reader = Resources.getResourceAsReader("SqlMapConfig.xml");  
    9.             //根据配置文件得到sqlMapClient对象,以供后边使用。  
    10.             sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);  
    11.         } catch (IOException e) {  
    12.             e.printStackTrace();  
    13.         }finally{  
    14.             if(reader!=null){  
    15.                 try {  
    16.                     reader.close();  
    17.                 } catch (IOException e) {  
    18.                     e.printStackTrace();  
    19.                 }  
    20.             }  
    21.         }  
    22.     }  

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

     

    1. <sqlMap namespace="empSQL">  
    2.       
    3.     <!-- 指定类型的别名 -->  
    4.     <typeAlias alias="MapType" type="java.util.HashMap"/>  
    5.     <typeAlias alias="EmpType" type="com.bjpowernode.ibaits.bean.Emp"/>  
    6.     <typeAlias alias="StringType" type="java.lang.String"/>  
    7.       
    8.     <!-- 根据Map集合查询,返回实体结果 -->  
    9.     <select id="selectEmpID" parameterClass="MapType" resultClass="EmpType">  
    10.         select * from emp where deptno=#a# and job=#b# and sal=#c#  
    11.     </select>  
    12.     <!-- 根据字符串字符查询返回map集合 -->  
    13.     <select id="selectEmp2ID" parameterClass="StringType" resultClass="MapType">  
    14.         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#  
    15.     </select>  
    16.       
    17. </sqlMap>  
    1.   

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

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

    1. //根据map集合中的字符串查找,返回实体的list集合  
    2. public List<Emp> selectEmp(String deptno, String job, String sal)  
    3.         throws Exception {  
    4.       
    5.     Map<String,String> map = new HashMap<String,String>();  
    6.     map.put("a", deptno);  
    7.     map.put("b", job);  
    8.     map.put("c", sal);  
    9.       
    10.     return sqlMapper.queryForList("empSQL.selectEmpID", map);  
    11. }  
    12.   
    13. @Override  
    14. //根据实体查询,返回map的list集合,感觉还是非常实用的  
    15. public List<Map> selectEmp2(String job) throws Exception {  
    16.     return sqlMapper.queryForList("empSQL.selectEmp2ID", job);  
    17. }  

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

  • 相关阅读:
    HDU 5640 King's Cake
    HDU 5615 Jam's math problem
    HDU 5610 Baby Ming and Weight lifting
    WHU1604 Play Apple 简单博弈
    HDU 1551 Cable master 二分
    CodeForces659C Tanya and Toys map
    Codeforces 960E 树dp
    gym 101485E 二分匹配
    Codeforces 961E 树状数组,思维
    Codeforces Round #473 (Div. 2) D 数学,贪心 F 线性基,模板
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4745834.html
Copyright © 2011-2022 走看看