Mybatis动态SQL 条件查询,批量删除
2017-04-29 17:02
951 查看
比如说某宝的搜索。可以添加选择的嘛。也就是where 后面的条件。如果有12种条件。要是全一个一个写那是要写很多哦。mybatis就有动态sql。根据条件组合sql语句。
首先创建个前端页面
那些标题啊。日期啊。状态就是where后面的条件
sql语句怎么实现呢
用了标签。类似jsp中的标签
要注意的是where 标签。
然后 service
Controller
时间的话传过来的是字符串。利用java.sql.Date.valueOf的方法转成Date。与数据库中的时间进行比较。
批量删除
批量的删除利用的还是标签
删除,然后for循环, collection指的是说传入的是数组。item是数组的每个元素。open是说在循环的开始加上什么。这里加上( close是循环结束加上什么。这里是)形成正常的删除语句。然后separator是分隔符。形成最后的删除语句。
最后形成的语句
写dao
测试类
期间遇到了一些错误。使用了工具seay源代码审计的插件 查看mysql执行的语句的工具。很方便。可以看到每次请求的sql语句。比对看有无错误。
下载地址:https://pan.baidu.com/s/1i3Jw2uL#list/path=%2F
理解的可能比较浅显,会继续学习。
首先创建个前端页面
<!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<=#{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
理解的可能比较浅显,会继续学习。
相关文章推荐
- mybatis针对Oracle数据库进行(单个或多个条件)批量操作(新增、修改、删除)的sql写法--mysql
- mybatis针对Oracle数据库进行(单个或多个条件)批量操作(新增、修改、删除)的sql写法--mysql
- MyBatis动态sql_where查询条件
- sql批量删除和条件查询
- MyBatis中动态SQL语句完成多条件查询
- MyBatis中的动态SQL,实现不确定条件的CRUD-----使用Map来传递查询的参数
- MyBatis中动态SQL语句完成多条件查询
- 利用mybatis的动态sql 进行批量模糊查询
- mybatis分页条件查询动态sql
- Mybatis动态sql条件查询中if判断Integer的条件写法
- Sql批量添加,批量查询,批量删除,批量修改。mybatis都有对应标签
- Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询
- 一个数据库查询方法(可以动态设置查询参数,设置查询条件),很巧妙的组合sql语句
- linq to sql的多条件动态查询
- Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询
- 关于mybatis 动态 sql 的一些陷阱:防止批量update,delete,select...
- Linq to SQL 多条件动态组合查询(实战篇)
- Linq to sql 实现多条件的动态查询(方法二)
- sql 动态修改查询条件
- Linq to sql 实现多条件的动态查询(方法一)