Web开发:ibatis的使用笔记

一、简介

ibatis是一个基于SQL映射支持Java和.NET的持久层框架:

1.如下所示id是对应程序的statement,resultClass需要填写SQL查询到的字段对应的类的命名空间+类名DAO.QueryForList<实体类>),以此完成持久层和业务逻辑层的交互;

<select id="GetIncomeMonth" resultClass="XXXX.Model.StatistMonth">
    <![CDATA[
                /*我是一条注释*/
    ]]>
</select>

可以这样映射到常用的类型:

<select id="SelectDetailViewByParam" resultType="System.String">

2.一般标签有select,Insert,Update,Delete,Query,procedure  

3.数据库查询的字段要和实体类对应,不对应的SQL语句要用AS起别名统一,否则映射失败

<!-- 起别名的SQL,要包起来 例如:SELECT A.NAME,B.PLACE FROM TABLE A LEFT JOIN B ON A.ID=B.ID-->

<!-- 需要改为SELECT * FROM (SELECT A.NAME,B.PLACE FROM TABLE A LEFT JOIN B ON A.ID=B.ID) AS T-->

4.占位符,通过字典键值对传递,命名要一致,dic.Add(“ID”,”123”):

需求SQL写法示例一示例二
精确匹配ID=#ID#ID="123"
模糊匹配ID LIKE '%$ID$%' ID="123"
包含匹配ID IN ($ID$)ID="123, 456"ID='123','456'

区别:#默认给两边加单引号,$不会,传进来是什么就是什么。示例一二是入参样板,包含匹配中示例一是筛选数字,示例二是筛选字符串。

//包含匹配中的语法

var ID = input.Contains(',') ? $"'{input.Replace(",","','")}'":$"'{input}'";//字符串中的in语法

var ID = input;//数字中的in语法

5.配置xml位置:Config\SqlMap.config,注意先后顺序,先写T4模板生成的xml,再写自己写的xml

二、标签

1.CDATA转义

出现以下符号需要用CDATA包裹:“<”“>”“?”“&”等符号

2.isnotnull

【说明】不为空则执行包裹的SQL,其中prepend可以是and、or、空

<select id="省略"  resultClass="省略">
     select * from table where 1=1
        <isNotEmpty prepend="and" property="ID">
            ID = #ID#
        </isNotEmpty>
</select>

假如ID是空的,那么将执行

select * from table where 1=1

假如ID不是空的,那么将执行

select * from table where 1=1 and ID='123456'

一般来讲SQL中的like,即使输入空的,比如以下情况,也会默认查到所有,但是性能会下降,建议还是写上IsNotNull标签

select * from table where ID like '%%'

3.isequal

若字典中传入ShowResign=0,则执行包裹的SQL,并且SQL前用and连接

<isEqual prepend="and" property="ShowResign" compareValue="0">
  u.LeaveDate IS NULL
</isEqual>

4.foreach循环(处理入参不同查询不同)

【情景】

有一个成绩表:scoreid,studentid,score,testnum

有一个学生表:studentid,studentname

假如传入1,2显示出studentid,studentname,'testnum=1的成绩','testnum=2的成绩'

假如传入1,2,3显示出studentid,studentname,'testnum=1的成绩','testnum=2的成绩','testnum=3的成绩'

解答:其中入参testnum=1,2,3

<select id="getStudentScores" resultClass="FitsWeb.Model.StudentDetails">

        SELECT s.studentid, s.studentname,

            <foreach collection="testnums" item="item" separator=",">

                MAX(CASE WHEN sc.testnum = #{item} THEN sc.score END) AS 'testnum=${item}的成绩'

            </foreach>

        FROM 学生表 s

        LEFT JOIN 成绩表 sc ON s.studentid = sc.studentid

        WHERE sc.testnum IN (#{testnum})

        GROUP BY s.studentid, s.studentname

</select>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值