SSM框架不用实体类,查询单个对象返回Map,多条记录返回list<Map>,及分页

来源:互联网 发布:苹果手机相机软件 编辑:程序博客网 时间:2024/06/06 00:34
1.编写分页方法接口层
    
public interface MainMemberDao {
//账号管理:查询member表列表显示:序号,手机号,用户名,姓名,身份证,邀请码,注册时间。
List<Map> selectAll(Map map);
//查询条数
Integer getMemberCount();
//账号管理动态模糊查询带分页
List<Map> getAllMemberByKey(Map map);
//模糊查询查询条数
Integer getMemberByKeyCount(Member member);
  } 

2. 编写接口实现

 
@Repository
public class MainMemberDaoImpl implements MainMemberDao{

@Autowired
SqlSession sqlSession;
//账号管理:查询member表列表显示:序号,手机号,用户名,姓名,身份证,邀请码,注册时间。
public List<Map> selectAll(Map map) {
List<Map> list=sqlSession.selectList("MemberMapper.selectAll",map);
return list;
}
//查询条数
public Integer getMemberCount() {
return sqlSession.selectOne("MemberMapper.getMemberCount");
}
//账号管理动态模糊查询带分页
public List<Map> getAllMemberByKey(Map map) {
return sqlSession.selectList("MemberMapper.selectAllMemberByKey", map);
}
//模糊查询查询条数
public Integer getMemberByKeyCount(Member member) {
return sqlSession.selectOne("MemberMapper.getMemberByKeyCount",member);
}
 }

3.编写服务层接口(和方法接口层一模一样,不在阐述)

4.编写服务层接口实现类
@Service
public class MainMemberServiceImpl implements MainMemberService{
@Autowired
MainMemberDao memberDao;
//账号管理:查询member表列表显示:序号,手机号,用户名,姓名,身份证,邀请码,注册时间。
public List<Map> selectAll(Map map) {
return memberDao.selectAll(map);
}
//查询条数
public Integer getMemberCount() {
return memberDao.getMemberCount();
}
//账号管理动态模糊查询带分页
public List<Map> getAllMemberByKey(Map map) {
System.out.println(map);
return memberDao.getAllMemberByKey(map);
}
//模糊查询查询条数
public Integer getMemberByKeyCount(Member member) {
return memberDao.getMemberByKeyCount(member);
}



4.在
MemberMapper.xml中编写分页sql语句
        <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="MemberMapper" >

      <sql id="Base_Column_List" >
       id, member_name, name, password, salt, mobile_Phone, status, del_flag, identity, 
       create_date, update_date, weiBoAccount, weixinAccount, headid, invitationCode, withdraw_password, 
       qqAccount, invitedCode, qqNumber
     </sql>
 
<!-- 账号管理:查询member表列表显示:序号,手机号,用户名,姓名,身份证,邀请码,注册时间。 -->
  <select id="selectAll" resultType="java.util.Map" parameterType="java.util.Map">
  select id, member_name, name, password, salt, mobile_Phone, status, del_flag, identity, 
invitationCode, qqAccount, withdraw_password, create_date, update_date, weiBoAccount, 
weixinAccount, headid, invitedCode, qqNumber from member where 1=1 order by create_date 
limit #{beginRow},#{rows}
  </select>
  <!-- 查询条数 -->
  <select id="getMemberCount" resultType="int">
  select count(*) from (select id, member_name, name, password, salt, mobile_Phone, status, del_flag, identity, 
invitationCode, qqAccount, withdraw_password, create_date, update_date, weiBoAccount, 
weixinAccount, headid, invitedCode, qqNumber from member where 1=1 order by create_date) a;
  </select>
 
  <!-- 账号管理动态模糊查询带分页-->
   <select id="selectAllMemberByKey" resultType="java.util.Map" parameterType="java.util.Map">
    select 
<include refid="Base_Column_List" />
    from member where 1=1 
    <if test="name!=null and name!=''">
    and name like "%"#{name}"%"
    </if>
    <if test="mobilePhone!=null and mobilePhone!=''">
    and mobile_Phone like "%"#{mobilePhone}"%"
    </if>
    <if test="memberName!=null and memberName!=''">
    and member_name like "%"#{memberName}"%"
    </if>
    <if test="invitationcode!=null and invitationcode!=''">
    and invitationCode like "%"#{invitationcode}"%"
    </if>
    <if test="createDate!=null and createDate!=''">
    and date(create_date)=#{createDate}
    </if>
    order by create_date desc limit #{beginRow},#{rows}
    </select>
    <!--  -->
    <select id="getMemberByKeyCount" resultType="int" parameterType="Member">
    select count(*) from member where 1=1 
    <if test="name!=null and name!=''">
    and name like "%"#{name}"%"
    </if>
    <if test="mobilePhone!=null and mobilePhone!=''">
    and mobile_Phone like "%"#{mobilePhone}"%"
    </if>
    <if test="memberName!=null and memberName!=''">
    and member_name like "%"#{memberName}"%"
    </if>
    <if test="invitationcode!=null and invitationcode!=''">
    and invitationCode like "%"#{invitationcode}"%"
    </if>
    <if test="createDate!=null and createDate!=''">
    and date(create_date)=#{createDate}
    </if>
    order by create_date desc
    </select>
</mapper> 


5.在MemberHanlder.java控制层中编写业务逻辑处理

@Controller
public class MainMemberHanlder {

@Autowired
MainMemberService memberService;

// 账号管理:查询member表列表显示:序号,手机号,用户名,姓名,身份证,邀请码,注册时间。
@RequestMapping("getAllMember")
public String getAllMember(Map<String, Object> map,Integer page,Model model) {
//要想分页,主要取到当前的页数
//注意:第一次进入列表时page是空的
Integer rows=5;//每页显示的条数 
if(page==null){//当前页数
page=1;
}
//从第几条开始查询
int beginRow=(page-1)*rows;
//总条数
Integer count = memberService.getMemberCount();
//总页数
Integer total =count%rows==0?count/rows:count/rows+1;
Map map1 = new HashMap();
map1.put("beginRow", beginRow);
map1.put("rows", rows);
List<Map> list = memberService.selectAll(map1);
map.put("page", page);
map.put("total",total);
map.put("list", list);
Member member=new Member();               //要绑定对象这一步必须在到页面之前放进去,不然会报500错误,为页面的ModelAttribute绑定实体做出声明
map.put("member", member);
model.addAttribute("status", 0);          //定义一个status状态变量以便于区分模糊查询的分页和查询所有的分页,在jsp页面以便于选择跳转地址。
return "main/zhanghaoguanli";
}
//账号管理动态模糊查询带分页
@RequestMapping(value="getAllMemberBykey",method={RequestMethod.POST,RequestMethod.GET})    =====》设置支持GET和POST两种提交方式
public String getAllMemberByKey(Map<Object, Object> map,Member member,Integer page){
System.out.println(666);
Integer rows=5;
if(page==null){
page=1;
}
int beginRow=(page-1)*rows;
Integer count=memberService.getMemberByKeyCount(member);
Integer total =count%rows==0?count/rows:count/rows+1;
Map map1 = new HashMap();
map1.put("name", member.getName());
map1.put("mobilePhone", member.getMobilePhone());
map1.put("memberName", member.getMemberName());
map1.put("invitationcode", member.getInvitationcode());
map1.put("createDate", member.getCreateDate());
map1.put("beginRow", beginRow);
map1.put("rows", rows);
List<Map> list = memberService.getAllMemberByKey(map1);
map.put("page", page);
map.put("total",total);
map.put("list", list);
map.put("member", member);
return "main/zhanghaoguanli";
}


6.编写jsp页面  ========>使用spring的标签的ModelAttribute绑定实体类对象时,path里面的字段类型为String类型,如果实体类的日期类型为Date,提交表达会报400错误,跳不进Conntroller.故改写实体类日期字段为String类型

        <div class="box-right-main">
<h2>
<span class="glyphicon glyphicon-play" style="margin-right: 5px"></span>账号管理
</h2>

<div class="tablelist">
<form:form action="${basePath }getAllMemberBykey" method="post" id="form1" modelAttribute="member">
<table class="table tabletop">
<tr>
                    <td style="width:110px;padding-left:30px">用户名:</td>
   <td style="width:180px"><form:input path="name" placeholder="用户名" class="form-control" /></td>
<td style="width:110px;padding-left:30px">手机号:</td>
<td style="width:180px"><form:input path="mobilePhone" class="form-control" placeholder="手机号" /></td>
<td style="width:110px;padding-left:30px">姓名:</td>
<td style="width:180px"><form:input path="memberName" class="form-control" placeholder="姓名" /></td>
<td style="width:110px;padding-left:30px">邀请码:</td>
<td style="width:180px"><form:input path="invitationcode" class="form-control" placeholder="邀请码"/></td>
<td style="width:110px;padding-left:30px">注册时间:</td>
<td style="width:180px"><form:input path="createDate" class="form-control time" placeholder="注册时间" readonly="readonly" /></td>
<td class="pull-right" style="padding-right:10px"><button type="submit" class="btn btn-primary btn-sm">查询</button></td>
<td><button type="button" class="btn btn-primary btn-sm" onclick="$('#form1').find(':input').not(':button, :submit, :reset').val('').removeAttr('checked').removeAttr('selected');">重置</button></td>
                 </tr>     
</table>
</form:form>
<table class="table table-bordered tablebox">
<tr class="text-center" bgcolor="#f7f7f7">
<td>序号</td>
<td>手机号</td>
<td>用户名</td>
<td>姓名</td>
<td>身份证</td>
<td>邀请码</td>
<td>注册时间</td>
<td>操作</td>
</tr>
<% %>
<c:forEach items="${list }" var="member" varStatus="status">
<tr class="text-center">
<td>${status.count }</td>
<td>${member.mobile_Phone }</td>
<td>${member.name }</td>
<td>${member.member_name }</td>
<td>${member.identity }</td>
<td>${member.invitationCode }</td>
<td>${member.create_date }</td>
<td><a class="btn btn-primary btn-sm"
href="${member.id }/getAllById">账号详情</a></td>
</tr>
</c:forEach>
</table>
</div>
<table align="center">
<tr>
<td>
<c:choose>
<c:when test="${status==0}">
共${total}页/当前第${page }页&nbsp;&nbsp;
<a href="getAllMember?page=1">首页</a>&nbsp;&nbsp;
<a href="getAllMember?page=${page==1?1:page-1}">上一页</a>&nbsp;&nbsp;
<a href="getAllMember?page=${page==total?total:page+1}">下一页</a>&nbsp;&nbsp;
<a href="getAllMember?page=${total}">尾页</a>&nbsp;&nbsp;
</c:when>
<c:otherwise>
共${total}页/当前第${page }页&nbsp;&nbsp;
<a href="#" onclick="doshou()">首页</a>&nbsp;&nbsp;
<a href="#" onclick="doshang()">上一页</a>&nbsp;&nbsp;
<a href="#" onclick="doxia()">下一页</a>&nbsp;&nbsp;
<a href="#" onclick="dowei()">尾页</a>&nbsp;&nbsp;
</c:otherwise>
============================动态模糊查询分页因为不光要传递从第几条开始查询和每页显示的条数,还要传递输入的表单里面的控件里面的值,所以点击超链接必须触发form表单提交并传值
++++++++++++++++++如果没有触发表单提交也就没有了查询条件,就变成了查询所有的分页,不符合业务需求!
这是用jquery实现,并且超链接的href="#",因为herf也会触发跳转,但不能带动表单,只是一个平常的get提交。

</c:choose>
===============》》》用stauts状态是否为0判断分页的方式,是什么方式(模糊查询分页还是查询所有分页)
</td>
</tr>
</table>
    <script type="text/javascript">
function doshang(){
var frm=document.getElementById("form1");
frm.action="getAllMemberBykey?page="+${page==1?1:page-1};
frm.method="post";
frm.submit();
}
function doxia(){
var frm=document.getElementById("form1");
frm.action="getAllMemberBykey?page="+${page==total?total:page+1};
frm.method="post";
frm.submit();
}
function dowei(){
var frm=document.getElementById("form1");
frm.action="getAllMemberBykey?page="+${total};
frm.method="post";
frm.submit();
}
function doshou(){
var frm=document.getElementById("form1");
frm.action="getAllMemberBykey?page"+1;
frm.method="post";
frm.submit();
}
</script>
<!-- 内容结束 -->
</div>
阅读全文
0 0
原创粉丝点击