比如说某宝的搜索。可以添加选择的嘛。也就是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>
那些标题啊。日期啊。状态就是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;
}
}
时间的话传过来的是字符串。利用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
理解的可能比较浅显,会继续学习。