zoukankan      html  css  js  c++  java
  • Java后台技术IBATIS入门

      做过.net后台开发的同志一定用过Entity FrameWork,该框架实现了实体Entity到数据库行的映射,通过操作实体DataSet,就能够直接同步修改到数据库。但是Java暂时没有类似的技术,今天要给大家讲述的是一个通过SQL语句来实现实体Entity到数据库映射的技术:IBATIS.

      

    iBatis提供了以下设计理念 -

    • 简单- iBATIS的被广泛认为是当今是最简单的持久化框架之一。

    • 快速发展- iBATIS的做一切努力,促进超快速的发展。

    • 可移植性- iBATIS的可用于几乎任何语言或平台如Java,Ruby和C#中的Microsoft .NET来实现。

    • 独立接口- iBATIS的提供与数据库无关的接口和API,帮助应用程序的其余部分保持独立的持久性相关的资源。

    • 开源- iBATIS的是自由和开放源码软件。

    iBATIS的具有以下优点 -

    • 支持存储过程- iBATIS的封装在SQL存储过程的形式,使业务逻辑保持了数据库,应用程序更易于部署和测试,更便于携带。

    • 支持嵌入式SQL -无需预编译器,你可以完全访问所有的SQL的功能。

    • 支持动态SQL - iBATIS的功能提供动态构建基于参数的SQL查询。

    • 支持O / RM - iBATIS的支持许多相同的功能,作为一个O / RM工具,如延迟加载,连接抓取,高速缓存,运行时代码生成和继承

      iBATIS的利用了JAVA编程语言,而开发数据库应用导向。在进一步讨论之前,请确保您了解程序和面向对象编程的基础知识 - 控制结构,数据结构和变量,类,对象,等等。

      

      废话不多说,用示例来进行讲解。首先我们得有一个实体类,这里以HmUserDTO为例。

     1 public class HmUserDTO implement Serializable{
     2 private String v;
     3 private String username;
     4 private String sex;
     5 private String mobilephone;
     6 
     7 public HmUserDTO(String name,String sex,String phone)
     8 {
     9     this.username = name;
    10     this.sex = sex;
    11     this.mobilephone= phone;
    12 }
    13 
    14 public String getV(){return v;}
    15 public void setV(String v){this.v = v;}
    16 
    17 public String getUsername(){return username;}
    18 public void setUsername(String username){this.username = username;} 
    19 
    20 public String getSex(){return sex;}
    21 public void setSex(String sex){this. sex = sex;} 
    22 
    23 public String getMobilephone (){return mobilephone;}
    24 public void setMobilephone (String mobilephone){this. mobilephone = mobilephone;} 
    25 
    26 }

    然后需要安装相应的jar包,大家可以从网上找相关教程进行安装。

    下面我们给代码添加IBATIS脚本sqlmqp_mapping_user.xml,如下所示:

     1 <?xml version=”1.0” encoding=”UTF-8”?>
     2 <!DOCTYPE sqlMap PUBLIC “-//iBATIS.com/dtd/sql-map-2.dtd”>
     3 
     4 <sqlMap namespace=”user”>
     5     <!--  如果实体属性名与数据库列名不一致,可添加以下方法进行映射-->
     6     <resultMap id=”user-result” class=”dto.user.HmUserDTO”> <!—此处class即为对于实体类-->
     7         <result property=”username” column=”username”/>
     8         <result property=”sex” column=”sex”/>
     9         <result property=”mobilephone” column=”mobilephone”/>
    10     </reusltMap>
    11 
    12     <!—新增用户信息-->
    13     <insert id=”user.insert” parameterClass=”dto.user.UserDTO”> <!—parameterClass可为该数据库对应的实体类,也可为另外一个实体类 -->
    14         INSERT INTO hm_base_user
    15                  (username,sex,mobilephone)
    16         VALUES
    17                 (#name#,#sex#,#phone#)
    18     </insert>
    19 
    20 <!—获取全部用户信息-->
    21     <!—resultMap需当数据库字段与实体属性名不一致时使用-->
    22     <select id=”user.queryAllUser” resultMap=”user-result” 
    23         SELECT * FROM hm_base_user user        
    24     </select>
    25 
    26     <!—搜索用户信息-->
    27     <!—resultMap需当数据库字段与实体属性名不一致时使用-->
    28     <select id=”user.queryUser” resultMap=”user-result” parameterClass=”String”>
    29         SELECT user.username,user.sex,user.mobilephone 
    30         FROM hm_base_user user
    31         WHERE user.username = #username#        
    32     </select>
    33 
    34     <!—我们也可用将另一个实体类插入到另外一个数据库表中,当然为了管理方便,建议仅在一个IBATIS脚本中处理一个实体类的数据库操作-->
    35     <insert id=”user.insertExt” parameterClass=”dto.user.UserDTO”> 
    36         INSERT INTO hm_base_use_extr
    37                  (username,sex,mobilephone)
    38             VALUES
    39                 (#name#,#sex#,#phone#)
    40     </insert>
    41 
    42     <!—批量查询-->
    43     <select id=”user.queryUsers” parameterClass=”java.util.List”>
    44     SELECT user.username,user.sex,user.mobilephone
    45     FROM hm_base_user
    46     WHERE user.username IN
    47         <iterate conjunction=”,” open=”(” close=”)”>
    48         #[]#
    49         </iterate>
    50     </select>
    51 </sqlMap>
    52                     

    在使用时,可以用以下方式来调用脚本中的方法,注意需要用到Resources.getResourceAsReader和SqlMapClientBuilder.buildSqlMapClient方法。

    1 Reader rd = Resources.getResourceAsReader("sqlmqp_mapping_user.xml"); 
    2 SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(rd); 3 HmUserDTO em = new HmUserDTO ("Zara", "Man", “18218021421”); smc.insert("user.insert", em); 4 List <HmUserDTO> user = (List<HmUserDTO>)smc.queryForList("user.queryAllUser ", null);

      在IBATIS脚本中添加其他方法的方式与上面类似,这里不再赘述。

      不过我现在接触的Java代码对IBATIS又进行了一次封装,免去了Resources.getResourceAsReader和SqlMapClientBuilder.buildSqlMapClient环节,下一节我来讲述以下怎么做这个封装。

      

  • 相关阅读:
    查询datatime类型
    ms的题目,无聊不妨看看
    读取客户端收藏夹资料的问题
    delphi中的DBGrid无法刷新数据
    jsp与javascript
    .net2.0 web site中的cs文件怎么编译为dll
    由传奇木马引起的遐想
    com组件的调用
    Crystal Report的奇怪问题
    算法导论15章LCS实现(c++)
  • 原文地址:https://www.cnblogs.com/chenchaochao034/p/11448542.html
Copyright © 2011-2022 走看看