• 最近在项目中使用ibatis小结


    公司项目中用到ibatis,先把ibatis简单使用总结如下,以备以后使用:

    1.与spring整合,在配置数据源文件data-source.xml中设置spring操作ibatis的bean工厂:

    A.配置数据源:

    <bean id="nameDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">..</bean>
    
     <bean id="sqlMapClientProjectName" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
            <property name="dataSource" ref="nameDataSource" /> <!--配置数据源引用 nameDataSource这个是spring中的数据源-->
            <property name="configLocation" value="classpath:/dal/sqlmapName-config.xml" /><!--配置xml文件,引入项目中的多个操作各个数据表的xml文件。-->
        </bean>

    B. Dao层与数据源的连接:

    建一个基类Dao:

    public class BaseXXXDao extends SqlMapClientDaoSupport{
    
        @Resource(name = "sqlMapClientProjectName")
    
       private SqlMapClient sqlMapClient; @PostConstruct public void initSqlMapClient(){
    
           super.setSqlMapClient(sqlMapClient);
    
       }
    
    }

    其他Dao层文件继承这个基类,即可用:

    getSqlMapClientTemplate().queryxxxxx(xxxx,xxxxx);进行对数据库的操作。


    2.xml统一配置文件,如sqlmapName-config.xml内容:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
            "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
    <sqlMapConfig>
        <sqlMap resource="/dal/sqlmapName/UserAccount.xml" />
    
      .....
    
    </sqlMapConfig>

    3.书写sql语句的xml,放入一个文件夹下统一管理,UserAccount.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="表名" >
      <resultMap id="id名称" class="com.xxx.UserAccount" >
    
           <result column="数据库中表列名" property="id" jdbcType="VARCHAR" />...
    
      </resultMap>
    <!--常用sql语句格式:-->
     
    <select id="select_UserInfoByQName" resultMap="rsultMap中的id名称" parameterClass="String" >//select_UserInfoByQName 这个名称在Dao中查询时使用
    
    select语句...
    
    </select>
    
    <delete id="delete_userAccount" parameterClass="String" >delete 语句..</delete>
    
    <update id="update_userAccount" parameterClass="com.xxxUserAccount" >update语句</update>
    
    <insert id="telverifycode_insert" parameterClass="com.xxx.TelVerifyCode" >insert语句</insert>

    4.xml中的可变条件:

    select语句中:<isNotEmpty property="userId" >条件语句</isNotEmpty>  如果不为空,则执行这个条件

    update语句中:

    <dynamic prepend="set" >

         <isNotNull prepend="," property="userId" >条件语句</isNotNull>......

    </dynamic>

    如果不为空,则执行这个更新字段条件,另外还有:isEqual字符匹配等标签。

    5:$与#的区别:

    在sql配置中比如in(#rewr#) 与in ($rewr$)

    在Ibatis中我们使用SqlMap进行Sql查询时需要引用参数,在参数引用中遇到的符号#和$之间的区分为,#可以进行与编译,进行类型匹配,而$不进行数据类型匹配。
    6.xml中的map参数:
    < select id="checkLogin2" parameterClass="java.util.Map" resultClass="java.lang.Integer">
    SELECT count(*) AS value FROM userinfo WHERE uid=#uid# and pwd=#pwd#
    < /select>
    这种办法显得要清楚的很多,也不需要自己手动编写sql到java之中。
    Map map=new HashMap();
    map.put("uid", username);
    map.put("pwd", password);
    Integer r = (Integer) sqlMap.queryForObject("checkLogin2", map);
    在java中首先生成需要的map,然后作为输入参数传入即可。这个方法应该是比较好的,值得推荐。
    
    7.ibatis执行存储过程:
    A.xml文件中配置存储过程,内容格式如下:
    
    <parameterMap class="java.util.HashMap" id="procedure">
           <parameter property="xxxxx1" jdbcType="NUMBER" javaType="java.math.BigDecimal" mode="IN" />
           <parameter property="xxxxx2" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN" />
      .......
        <parameter  property="xxx3" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT" />    
     </parameterMap>
     
     <procedure id="proceName存储过程名称" parameterMap="procedure:与parameterMap中id相符 ">
       {call ProName(?,?,?,?,?)}
     </procedure>
    
    B.在Dao层,书写以下代码:
    HashMap<String,Object> paramMap = new HashMap<String,Object>();               
    paramMap.put("idType", type); //存储过程的参数idType 值:type
    ......  
    getSqlMapClientTemplate().queryForObject(procedureName,paramMap);
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  • 相关阅读:
    To My Girlfriend (DP)
    A Simple Nim (SG打表找规律)
    A Boring Question (打表)
    A Simple Chess (Lucas组合数 + 容斥)
    World is Exploding (容斥 + 统计)
    Two (DP)
    K-wolf Number (数位DP)
    Interesting (manacher + 前缀和处理)
    How Many Triangles (极角排序 + 尺取法)
    Divide the Sequence (贪心)
  • 原文地址:https://www.cnblogs.com/bestdata/p/3199790.html
Copyright © 2020-2023  润新知