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

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


<html>
  <head>
    <title>hight_search.htmltitle>

    <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">

    

  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 = $("
  • "+"数量:"+length+"
  • "
    ); ul.append($li); for(i=1;i1
    ;i++){ var t = list[i].cn_note_title; var $li = $("
  • "+t+"
  • "
    ); ul.append($li); }//for }//success }); }); script> html>

    Mybatis动态SQL 条件查询,批量删除_第1张图片

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

    sql语句怎么实现呢

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

    
    <select id="hightSearch" parameterType="map" resultType="yunnote.entity.Note">
    select * from cn_note 
    <where>
     
    <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<=#{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;
        }
    }
    
    

    Mybatis动态SQL 条件查询,批量删除_第2张图片

    Mybatis动态SQL 条件查询,批量删除_第3张图片

    Mybatis动态SQL 条件查询,批量删除_第4张图片

    时间的话传过来的是字符串。利用java.sql.Date.valueOf的方法转成Date。与数据库中的时间进行比较。
    Mybatis动态SQL 条件查询,批量删除_第5张图片

    Mybatis动态SQL 条件查询,批量删除_第6张图片
    Mybatis动态SQL 条件查询,批量删除_第7张图片

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

    
    
    <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+"行");
        }
    
    }
    

    Mybatis动态SQL 条件查询,批量删除_第8张图片

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

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

    你可能感兴趣的:(java那条路)