这是一个合集!
因为项目都是根据同一个项目进行修改,分开写略显冗杂
啊
开始吧
项目环境
mave3.5.4
TomCat8.5
Navicat
免安装版mysql
项目结构
实现模糊查询
显示模糊查询这个功能
主要是通过mybaits里的sql语句来实现的
select * from table_name where username like concat('%',#{username},'%')
然后改写对应的controller,bean,dao,service
当然还有配置文件和页面
controller
@RequestMapping("/findUser.do")
public ModelAndView findUser(@RequestParam(defaultValue = "1") int currentPage,String username){
PageInfo<User> pageInfo=userService.findUser(currentPage,username);
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("pageInfo", pageInfo);
modelAndView.setViewName("user-list");
return modelAndView;
}
bean
package allone8.bean;
import java.util.List;
public class PageInfo<T> {
private List<T> list;
private int totalPage;
private int size;
private int totalCiunt;
private int currentPage;
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getTotalCiunt() {
return totalCiunt;
}
public void setTotalCiunt(int totalCiunt) {
this.totalCiunt = totalCiunt;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
}
dao
List<User> findUser(@Param("start") int start,@Param("username") String username);
service
@Override
public PageInfo<User> findUser(int currentPage, String username) {
PageInfo<User> pageInfo = new PageInfo<>();
pageInfo.setSize(5);
int tc = userDao.getTotalCount();
pageInfo.setTotalPage(tc);
int tp = (int) Math.ceil(tc / 5.0);
pageInfo.setTotalPage(tp);
if (currentPage < 1) {
pageInfo.setCurrentPage(1);
} else if (currentPage > tp) {
pageInfo.setCurrentPage(tp);
} else {
pageInfo.setCurrentPage(currentPage);
}
int start = (pageInfo.getCurrentPage() - 1) * 5;
List<User> userList = userDao.findUser(start,username);
pageInfo.setList(userList);
return pageInfo;
}
mapper里面也要改
<select id="findUser" resultType="user" >
select * from tb_user where username like concat('%',#{username},'%') limit #{start},5
</select>
还有相关的jsp页面
<form action="${pageContext.request.contextPath}/user/findUser.do"
method="post">
<div class="col-md-4 data1">
<input type="text" class="form-control" name="username"
placeholder="username" value="">
</div>
<button type="submit" class="btn bg-maroon">搜索</button>
</form>
实现查询结果分页
要实现分页,就要在bean里面加上一个PageInfo(分页集合
public class PageInfo<T> {
private List<T> list;
private int totalPage;
private int size;
private int totalCount;
private int currentPage;
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
@Override
public String toString() {
return "PageInfo{" +
"list=" + list +
", totalPage=" + totalPage +
", size=" + size +
", totalCount=" + totalCount +
", currentPage=" + currentPage +
'}';
}
}
改写UserController里面的@RequestMapping("/findAll.do")
public ModelAndView findAll(@RequestParam(defaultValue = "1") int currentPage,String username,@RequestParam(defaultValue = "0")int type,HttpSession session){
PageInfo<User> pageInfo=userService.findAll(currentPage,username);
ModelAndView modelAndView=new ModelAndView();
modelAndView.addObject("pageInfo",pageInfo);
modelAndView.setViewName("user-list");
return modelAndView;
}
记得在UserService里面重写一下这个方法,因为方法不一样了
@Override
public PageInfo<User> findAll(int currentPage,String username) {
PageInfo<User> pageInfo=new PageInfo<>();
pageInfo.setSize(5);
int tc=userDao.getTotalCount(username);
pageInfo.setTotalCount(tc);
int tp=(int)Math.ceil(tc/5.0);
pageInfo.setTotalPage(tp);
if(currentPage<1){
pageInfo.setCurrentPage(1);
}else if(currentPage>tp){
pageInfo.setCurrentPage(tp);
}else {
pageInfo.setCurrentPage(currentPage);
}
//0,5,10
int start=(pageInfo.getCurrentPage()-1)*5;
List<User> userList = userDao.findAll(start,username);
pageInfo.setList(userList);
return pageInfo;
}
在UserDao下新建方法
int getTotalCount(@Param("username")String username);
然后在UserMapping里写sql语句获取TotalCount
<select id="getTotalCount" resultType="int">
select count(*) from tb_user
<if test="username!=null and username!=''">
WHERE username LIKE concat("%",#{username},"%")
</if>
</select>
然后要改写页面user-list的页码那一块
</div>
<!-- /.box-body -->
<div class="box-tools pull-right">
<ul class="pagination">
<li><a href="${pageContext.request.contextPath}/user/findAll.do" aria-label="Previous">首页</a></li>
<li><a href="${pageContext.request.contextPath}/user/findAll.do?currentPage=${pageInfo.currentPage-1}">上一页</a></li>
<c:forEach begin="1" end="${pageInfo.totalPage}" var="pageNum">
<li><a href="${pageContext.request.contextPath}/user/findAll.do?currentPage=${pageNum}">${pageNum}</a></li>
</c:forEach>
<li><a href="${pageContext.request.contextPath}/user/findAll.do?currentPage=${pageInfo.currentPage+1}">下一页</a></li>
<li><a href="${pageContext.request.contextPath}/user/findAll.do?currentPage=${pageInfo.totalPage}" aria-label="Next">尾页</a></li>
</ul>
</div>
重写doFilter方法
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request= (HttpServletRequest) servletRequest;
HttpServletResponse response= (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
User user= (User) session.getAttribute("user");
String uri=request.getRequestURI();
if(user==null && uri.indexOf("login.do")==-1){
response.sendRedirect(request.getContextPath()+"../login.jsp");
}else {
filterChain.doFilter(request,response);
}
}
批量删除
首先修改user-list页面,把刷新按钮改成删除,并且加入onclick事件
<button type="button" class="btn btn-default" title="删除" onclick="deleteAll()">
<i class="fa fa-refresh"></i> 删除
</button>
改写body
<tbody>
<c:forEach items="${pageInfo.list}" var="user">
<tr>
<td><input id="ids" name="ids" type="checkbox" value="${user.id}"></td>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.password}</td>
<td class="text-center">
<a href="${pageContext.request.contextPath}/user/toUpdate.do?id=${user.id}" class="btn bg-olive btn-xs">更新</a>
<a href="${pageContext.request.contextPath}/user/deleteById.do?id=${user.id}" class="btn bg-olive btn-xs">删除</a>
<a href="#" class="btn bg-olive btn-xs">添加角色</a>
</td>
</tr>
</c:forEach>
</tbody>
添加DeletedAll功能
function deleteAll() {
var checkedNum=$("input[name='ids']:checked").length;
alert(checkedNum);
if(checkedNum==0){
alert("请至少选择一个进行删除!!!");
return;
}
if(confirm("确认要删除这些用户吗?")){
var userList=new Array();
$("input[name='ids']:checked").each(
function () {
userList.push($(this).val())
}
);
alert(userList);
$.ajax({
type:"post",
url: "${pageContext.request.contextPath}/user/deleteAll.do",
data:{userList:userList.toString()},
success:function () {
alert("删除成功");
location.reload();
},
error:function () {
alert("删除失败");
}
});
}
}
在UserController里更新DeletAll方法
@RequestMapping("deleteAll.do")
public String deleteAll(String userList){
String[] strs = userList.split(",");
List<Integer> ids=new ArrayList<>();
for(String s:strs){
ids.add(Integer.parseInt(s));
}
userService.deleteAll(ids);
return "redirect:findAll.do";
}
在UserMapper添加DeletAll方法
<delete id="deleteAll" parameterType="list">
delete from tb_user where id in
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
然后就写完了!
源码:https://github.com/SBG2333/ssm2
如有不足还请dalao指点嗷