Mybatis以及数据库相关知识小记

4.2来公司实习,到今天也有半个月了,先培训公司文化培训了一个周,实际工作也就一个周,作为实习生主要还是学习知识,下面就只记录一些学习的知识。

Mybatis可以简化java与数据库的链接流程,在书写Mapper映射时需要学习一下书写规则。本次所做的工作主要是编写一个查询数据库获取数据并封装为一个调用的接口,公司目前使用的是springboot框架,我的任务是编写一个Service层接口,给上层调用。

先上代码,由于是公司代码,我会做一些改变。

<select id="queryANW" parameterType="com.a.b.c.d.e.SD" resultType="com.a.b.c.d.e.SDD">
        SELECT
        a.oii,a.oin,
        a.bi,a.bn,
        b.gd,b.gn,
        IFNULL(SUM(b.ugd),0) AS wiq
        FROM SO a,SOD b
        <where>
            a.oii=#{db}
            AND a.bn=b.bn
            AND (a.`status`=404 OR a.`status`=403)
            AND a.df=0
            AND b.df=0
            AND (DATE_SUB(CURDATE(), INTERVAL 30 DAY) &lt;= a.bdate)
            <if test="sDD!=null">
                AND dd IN
                <foreach collection="sDD" index="index" item="item" open="(" separator="," close=")">
                    #{item.gd}
                </foreach>
            </if>
        </where>
        GROUP BY a.oii,b.gd
    </select>

好了,现在开始说说自己学了什么。

<select id="queryANW" parameterType="com.a.b.c.d.e.SD" resultType="com.a.b.c.d.e.SDD">

parameterType 为指定输入类型,一般需要具体指定到一个实体类,resultType为输出类型,也需要指定到一个实体类。

IFNULL(SUM(b.ugd),0) AS wiq

SUM()这个函数可能会返回NULL,需要注意处理,MySQL自带IFNULL()函数,当sum返回null时,更改为一个指定的值。

a.oii=#{db}

#{}在Mybatis大概相当于一个占位符吧,db就是之前传入的参数中的属性。

AND (DATE_SUB(CURDATE(), INTERVAL 30 DAY) &lt;= a.bdate)

DATE_SUB()函数返回的是一个日期,即第一个传入参数的日期减去第二个参数所指定的时间,返回的是计算出减去时间后的日期。

CURDATE()是获取当前日期,INTERVAL 30 DAY是指代30天的意思。整个函数意思就是计算出当前日期往前30天的意思,即符合要求时间限制的最小日期。

a.bdate为 一个日期字段,当这个日期大于前面所计算出的最小时间日期时,便可以判定单据日期在30天以内,可以被选择出来。

在Mybatis中使用“&lt;=”来替代“<=”这个符号。

<foreach collection="sDD" index="index" item="item" open="(" separator="," close=")">
                    #{item.gd}
                </foreach>

以下的说明摘自:https://blog.csdn.net/qinyf2015/article/details/78688877

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

foreach元素的属性主要有 item,index,collection,open,separator,close。
item集合中每一个元素进行迭代时的别名,
index表示在迭代过程中,每次迭代到的位置,
open该语句以什么开始,
separator在每次进行迭代之间以什么符号作为分隔 符,
close以什么结束,
在使用foreach的时候最关键的也是最容易出错的就是collection属性,
该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,
主要有一下3种情况:
1.     如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2.     如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

3.     如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了

GROUP BY a.oii,b.gd
Group By 语句可以对选出的数据进行条件分组,但是同时其又具有排序功能,若选择分组的字段全部是字符类型的,它会按照首字符ASCLL码的大小进行由小到大的排序。
阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页