Mybatis动态SQL 条件查询,批量删除

比如说某宝的搜索。可以添加选择的嘛。也就是where 后面的条件。如果有12种条件。要是全一个一个写那是要写很多哦。mybatis就有动态sql。根据条件组合sql语句。
首先创建个前端页面

<!DOCTYPE html>
<html>
  <head>
    <title>hight_search.html</title>

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>

  <body>
    标题:<input type="text" id="title">
    状态:<select id="status">
    <option value="0">全部</option>
    <option value="1">正常</option>
    <option value="2">删除</option>
    </select>  
    <br/>

    开始日期:<input type="text" id="begin">
  结束日期:<input type="text" id="end">
  <input type="button" id="searchBtn" value="搜索">
    <hr/>
    结果列表
    <ul id="ul">
    <li></li>
    </ul>
  </body>

  <script type="text/javascript" src="js/jquery-1.11.1.js"></script>
  <script type="text/javascript">
  var searchBtn = $("#searchBtn");
     var status;
    $("#status").change(function(){
     status= $(this).val();});;
  searchBtn.click(function(){
    var title = $("#title").val();


    var begin =$("#begin").val();
    var end = $("#end").val();

        $.ajax({
        url:"http://localhost:8080/yunnote/note/hightSearch.do",
        type:"post",
        data:{"title":title,"status":status,"beginDate":begin,"endDate":end},
        dataType:"json",
        success:function(result){
            var list = result["data"];

            var ul = $("#ul");
            ul.empty();
            var length = list.length;
            var $li = $("<li>"+"数量:"+length+"</li>");
            ul.append($li);    
            for(i=1;i<list.length+1;i++){
            var t = list[i].cn_note_title;
                var $li = $("<li>"+t+"</li>");
                ul.append($li);    
                }//for


            }//success
        });

  });


  </script>

</html>

这里写图片描述

那些标题啊。日期啊。状态就是where后面的条件

sql语句怎么实现呢

用了标签。类似jsp中的标签

<!-- 组合查询 -->
<select id="hightSearch" parameterType="map" resultType="yunnote.entity.Note">
select * from cn_note 
<where><!-- 用where标签,不然如果直接写where后面如果第一个没有,那么后面的就有and 语句不对。用where标签可以解决,过滤掉and -->
<!-- 这个里面的直接就是用到map里面的key --> 
<if test="title!=null">
 cn_note_title like #{title}
</if>
<if test="status!=null">
and   cn_note_status_id= #{status}
</if>
<if test="beginDate!=null">
and   cn_note_create_time>=#{beginDate}
</if>
<if test="endDate!=null">
and   cn_note_create_time&lt;=#{endDate}
 </if>
 </where>

</select>

要注意的是where 标签。

然后 service

    public NoteResult hightSearch(String title, String status, String beginDate,
            String endDate) {
        // TODO Auto-generated method stub
        Map params = new HashMap();
        //如果有根据标题搜索就添加%% 来模糊查询
        if(title!=null&&!"".equals(title)){
            title = "%"+title+"%";

            params.put("title", title);
        }

        //如果选择的不是全部,就添加参数
        if(status!=null&&!"0".equals(status)&&!"".equals(status)){
            params.put("status", status);
        }

        if(beginDate!=null&&!"".equals(beginDate)){
            //将其时间字符串转成long
            Date beDate=java.sql.Date.valueOf(beginDate);
            params.put("beginDate", beDate.getTime());

        }

        if(endDate!=null&&!"".equals(endDate)){
            Date enDate = java.sql.Date.valueOf(endDate);

            params.put("endDate", enDate.getTime());
        }

        List<Note> notes = noteDao.hightSearch(params);
        NoteResult result = new NoteResult();
        result.setStatus(0);
        result.setMsg("查询成功");
        result.setData(notes);
        return result;
    }

Controller

package yunnote.Controller.note;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import sun.security.x509.EDIPartyName;

import yunnote.entity.NoteResult;
import yunnote.service.NoteService;
@Controller
@RequestMapping("/note")
public class HightSearchController {
    @Resource
    private NoteService noteService;
    @RequestMapping("hightSearch.do")
    @ResponseBody
    public NoteResult execute(String title, String status, String beginDate,
            String endDate){

        NoteResult result =noteService.hightSearch(title, status, beginDate, endDate);

        return result;
    }
}

这里写图片描述

这里写图片描述

这里写图片描述

时间的话传过来的是字符串。利用java.sql.Date.valueOf的方法转成Date。与数据库中的时间进行比较。
这里写图片描述

这里写图片描述
这里写图片描述

批量删除
批量的删除利用的还是标签

<!-- 批量删除 -->

<delete id="deleteNotes">
delete from cn_note
where cn_note_id in 
<foreach collection="array" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>

删除,然后for循环, collection指的是说传入的是数组。item是数组的每个元素。open是说在循环的开始加上什么。这里加上( close是循环结束加上什么。这里是)形成正常的删除语句。然后separator是分隔符。形成最后的删除语句。

最后形成的语句 delete cn_note where cn_note_id in(1,3,5)

写dao

public int deleteNotes(String[] ids);

测试类

package yunnote.test;

import yunnote.Dao.NoteDao;

public class TestDeleteNotes extends TestBse{

    public static void main(String[] args){

        NoteDao noteDao = getContext().getBean("noteDao",NoteDao.class);
        String [] ids ={"09f60aeb-a573-4fcf-b39f-903e1536e762","0a233251-8991-493c-87c8-d36e9433eae3"};
        int rows =noteDao.deleteNotes(ids);
        System.out.println("删除了 :"+rows+"行");
    }

}

这里写图片描述

期间遇到了一些错误。使用了工具seay源代码审计的插件 查看mysql执行的语句的工具。很方便。可以看到每次请求的sql语句。比对看有无错误。
下载地址:https://pan.baidu.com/s/1i3Jw2uL#list/path=%2F

理解的可能比较浅显,会继续学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值