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码的大小进行由小到大的排序。
阅读更多

数据库相关知识求救!

03-11

学了线性表,我想用C++实现相关的功能:功能包括(1.初始化线性表,t2.销毁线性表t3.清空t4.是否为\t5.当前长度空\t6.取元素t7.返回指定元素的位置t8.取所指元素的前驱t9.取所指元素的后继\t10.插入元素t11.删除元素t12.显示整个线性表的数值t13.退出\rn文件1:rnSqlist.cpprnlength);rn getch(); */rn switch(cho)rn case 1:Mylist->InitList(Mylist);break;rn case 2:Mylist->DestroyList(Mylist);break;rn case 3:Mylist->ClearList(Mylist);break;rn case 4:Mylist->EmptyList(Mylist);break;rn case 5:Mylist->List_len(Mylist);break;rn case 6:rn system("cls");rn printf("请输入所指定数据的位置:");rn int n;rn cin>>n;rn Mylist->GetElem(Mylist, n);break;rn rn case 7:rn system("cls");rn printf("请输入所要查询的数据:");rn status e;rn cin>>e;rn Mylist->LocateElem(Mylist,e);rn break;rn rn //取所指元素的前驱rn case 8:rn system("cls");rn printf("请输入所要查询的数据(前驱)的位置:");rn status e;rn cin>>e;rn Mylist->List_pri(Mylist, e);rn break;rn rn//9.取所指元素的后继rn case 9:rn system("cls");rn printf("请输入所要查询的数据(后继)的位置:");rn status e;rn cin>>e;rn Mylist->List_nex(Mylist, e);rn break;rn rn //\t10.插入元素rn case 10:rn system("cls"); status i,e;rn printf("请输入所要插入数据的位置:");rn cin>>i;rn printf("请输入所要插入的数据:");rn cin>>e;rn Mylist->InsertElem(Mylist,i,e);rn break;rn rn //\t11.删除元素\nrn case 11:rn system("cls");rn int i;rn printf("请输入所要删除的数据的位置:");rn cin>>i;rn Mylist->DeleteElem(Mylist,i);rn break;rn rnrn case 12:Mylist->DisList(Mylist);break;rn case 13:exit(0);break;rn rn rn while(1);rnrnrn rnrnrnrn>rnrnrnrnpublic.hrnrnrnrnrnSqlist.hrnrn#include rn#include rn#include rn#define MaxSize 50rn#define size 30rnclass Sqlistrnpublic:rn status *Elem;rn int length;rn /*Sqlist()rn length=0;rn Elem=NULL;rn */rnrn void InitList(Sqlist *&L);rn void DestroyList(Sqlist *&L);rn void ClearList(Sqlist *&L);/*how to form the funtion*/rn void EmptyList(Sqlist *L);rn void List_len(Sqlist *L);rn void GetElem(Sqlist *L,int n);rn void LocateElem(Sqlist *L,status &e);rn void List_pri(Sqlist *L,int i);rn void List_nex(Sqlist *L,int i);rn void InsertElem(Sqlist *&L,int i,status e);rn void DeleteElem(Sqlist *&L, int i);rn void DisList(Sqlist *L);rn;rnvoid Sqlist::InitList(Sqlist *&L)rn system("cls");rn L->Elem=(status *)malloc(30*sizeof(Elem));rn if(L->Elem!=NULL)rn L->length=0;rn printf("初始化成功!");rn rn elsern printf("初始化失败!");rn getch();rnrnvoid Sqlist::DestroyList(Sqlist *&L)rn system("cls");rn free(L);rn printf("删除成功!");rn getch();rnrnvoid Sqlist::EmptyList(Sqlist *L)rn system("cls");rn if(L->length==NULL)rn printf("线性链表为空!");rn rn else rn printf("线性链表不为空!");rn getch();rnrnrnvoid Sqlist::ClearList(Sqlist *&L)rn system("cls");rn L->length=0;rn printf("clear successful...\n");rn getch();rnrnvoid Sqlist::List_len(Sqlist *L)rn system("cls");rn printf("its length is %d\n",L->length);rn getch();rnrnrnrnrnvoid Sqlist::GetElem(Sqlist *L,int n)rn rn if(L->Elem==NULL||n>L->length||n<0) rn printf("ERROR!\n");rn rn else rn printf("所查的数是:%d",L->Elem[n-1]);rn rn getch();rnrnrnrnvoid Sqlist::LocateElem(Sqlist *L,status &e)rn int i,temp=0;rn rn if(L->length!=0)rn for(i=0;ilength;i++)rn rn if(e==L->Elem[i])rn rn printf("its prosation is %d",i);rn temp++;rn rn rn if(temp==0)rn printf("线性表中无此元素\n");rn getch();rnrn//i是那个元素的位置rnvoid Sqlist::List_pri(Sqlist *L,int i)rn rn if(ilength&&L->Elem!=NULL)rn printf("第%d个数的前驱是:%d",i,L->Elem[i-2]);rn rn else printf("出错!!");rn getch();rnrnvoid Sqlist::List_nex(Sqlist *L,int i)rn system("cls");rn if(ilength&&L->Elem!=NULL)rn printf("第%d个数的后继是:%d",i,L->Elem[i]);rn rn else printf("出错!!");rn getch();rnrn//位置是第I,插入数据是Ernvoid Sqlist::InsertElem(Sqlist *&L,int i,status e)rn system("cls");rn int j=0;rn for(j=L->length;j>=i;j--)rn L->Elem[j]=L->Elem[j-1];rn rn L->Elem[i]=e;rn L->length++;rn printf("添加成功!!");rn getch();rnrn// 0 1 2 3 4 5 6 4times7 4rn//删除第I个元素rnvoid Sqlist::DeleteElem(Sqlist *&L,int i)rn system("cls");rn for(int j=i;jlength;j++)rn L->Elem[j]=L->Elem[j+1];rn L->length--;rn printf("删除成功!!!");rn getch();rnrnrnvoid Sqlist::DisList(Sqlist *L)rn system("cls");rn for(int i=0;ilength;i++)rn printf("%d\t",L->Elem[i]);rn getch();rnrn>rnrn为什么老是出错啊rnrn谢谢!!!!

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