首页 > 其他 > 详细

第二个项目总结

时间:2019-07-20 16:10:42      阅读:95      评论:0      收藏:0      [点我收藏+]

1.写业务的思想:先分析页面实现的是增删改查哪个功能,参数是从前台向后台传还是从后台向前台传

2.先写控制层里面的方法,然后思考业务层写哪些方法,数据层写哪些方法,用了mybatis之后,如果数据层需要接收多种数据类型需要采用Map集合的方式传递,先在业务层将需要传递的参数封装到map集合中,再将这个map集合传递到数据层。

3.mybatis中常见的接收参数类型:单个参数(基本数据类型,如:Integer,String,Long等),对象(VO类的对象),Map集合等。

4.前台向后台参数传递(前台代码):

  ● 直接通过form表单传递:点击提交(submit)时,会全部提交表单中所有的参数,表单中所有的name属性的值就是所要传递的参数名称,传递的格式为

*.action?属性名称=值&属性名称=值&...,如果表单是get模式的话可以在网址栏中直接看到传递的参数,如果是post模式就看不到了。

技术分享图片

<form class="searchform" action="pages/back/admin/resumes/resume_list.action" method="get">
        <select name="status" class="form-control">
          <option value="">状态</option>
            <option value="1" <c:if test="${status==1}">selected</c:if>>入档</option>
          <option value="2" <c:if test="${status==2}">selected</c:if>>通知面试</option>
		<option value="3" <c:if test="${status==3}">selected</c:if>>违约</option>
		<option value="4" <c:if test="${status==4}">selected</c:if>>录用</option>
		<option value="5" <c:if test="${status==5}">selected</c:if>>不录用</option>
        </select>
        <input type="text" class="form-control" name="keywords" placeholder="请输入姓名" value="${keywords}"/>
        <button type="submit" class="btn btn-primary">搜索</button>
      </form>

  注意:表单中的隐藏域:经常用在编辑业务中,有时候我们需要修改每条记录,点击编辑之后需要向后台传递这条记录的id,但是这个id又不需要让用户看到,这个时候就可以使用隐藏域将其隐藏起来但是参数依然会传递。如下代码:

<input type="hidden" name="resid" value="${resume.resid}">

  ● 如果不使用表单提交,我们也可以使用*.action?参数=value&参数=value&参数=value&...的方式传递,这种方式适合参数比较少的情况,如下代码:

   查看预览的时候需要将预览的这条数据的id传过去,所以就可以手动在后面加参数

<td><a href="pages/back/admin/resumes/resume_editPre.action?resid=${resume.resid}" target="_blank">查看预览</a></td>

  ● 使用ajax传递参数:现在我还没搞懂,待更新

5.前台向后台参数传递(后台代码):

  ●  可以直接在控制层的方法参数 的括号中直接接收(必须保证action括号中的参数名称与前台jsp参数name的值保持一致),此种传递适合传递参数比较少的情况,如下代码

 @RequestMapping("resume_editPre.action")
    public ModelAndView editPre(String resid){  //这里的resid是从前台jsp页面中的name="resid"那里传过来的,name="resid"对应的value值就是这里resid的值
        ModelAndView mav=new ModelAndView("back/admin/resumes/form");
        Resume resume=this.resumeServiceClient.getIResumeService().findResumeByResid(Long.parseLong(resid));
        List<WorkYears> allWorkYears=this.resumeServiceClient.getIResumeService().findWorkYears();
        mav.addObject(resume);
        return mav;

  ● 也可以直接在控制层的方法中直接获取一个VO类对象,一定要保证前端表单中的name属性的值与vo类对应的数据表字段相同,如下代码:

 @RequestMapping("resume_edit.action")
    public String edit(Resume resume){
        this.resumeServiceClient.getIResumeService().doEdit(resume);
        return "forward:resume_list.action";
    }

6.后台向前台参数传递:

  ● 如果传递单个参数(例如:字符串等):

    ● 后台:mav.addObject("keywords","你好");

    ● 前台:${keywords}

  ● 如果传递一个对象:

    ●  后台:Resume resume=this.resumeServiceClient.getIResumeService().findResumeByResid(Long.parseLong(resid));

        mav.addObject(resume);

    ●  前台:${resume.字段1},${resume.字段2},${resume.字段3},${resume.字段4},...

  ● 如果传递一个List集合:

    ●  后台:mav.addObject("allEducation",this.resumeServiceClient.getIResumeService().findAll());  说明:findAll()的返回值类型是一个List集合

    ●  前台:<c:forEach items="${allEducation}" var="education">${education.字段1},${education.字段2},${education.字段3},...</c:forEach>

  ● 如果传递一个Map集合:注意前面几个都是用的ModelAndView类中的addObject()方法,而传递map集合的时候用的是addAllObjects()方法

    ●  后台:Map<String,Object> map=this.resumeServiceClient.getIResumeService().findSplit(status,keywords,spu.getCurrentPage(),5,"state","name");

        mav.addAllObjects(map);说明:在业务层的方法返回的map集合里面有两个key,分别为allResumes,allRecorders

    ●  前台:<c:forEach items="${allResumes}" var="resume">${resume.字段1},${resume.字段2},${resume.字段3},...</c:forEach>

7.前台中文传到数据库乱码问题:在数据库连接的资源文件(database.properties)中,数据库连接地址后面加上?useUnicode=true&characterEncoding=UTF8

  db.druid.url=jdbc:mysql://inheart.club:3306/museum?useUnicode=true&characterEncoding=UTF8

8.分页组件的使用:

  ● 分页工具类:

package com.yootk.util.split;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;

public class SplitPageUtil {
    private Long currentPage ;//当前页
    private Integer lineSize ;//每页存放的数据记录数
    private String keyword ;//查询关键字
    private String column ;//查询列
    private String columnData ;//
    private String url ;//在哪个控制层使用的此类,写上控制层的完整路径
    public SplitPageUtil(String url) {
        this(url,null) ;
    }
    public SplitPageUtil(String url,String columnData) {
        this.url = url ;
        this.columnData = columnData ;
        this.splitHandle();
    }
    private void splitHandle() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        try {
            this.currentPage = Long.parseLong(request.getParameter("cp")) ;
        } catch (Exception e) {}
        try {
            this.lineSize = Integer.parseInt(request.getParameter("ls")) ;
        } catch (Exception e) {}
        this.column = request.getParameter("col") ;
        this.keyword = request.getParameter("kw") ;
        request.setAttribute("currentPage",this.currentPage);
        request.setAttribute("lineSize",this.lineSize);
        request.setAttribute("column",this.column);
        request.setAttribute("keyword",this.keyword);
        request.setAttribute("url",this.url);
        request.setAttribute("columnData",this.columnData);
    }

    public Long getCurrentPage() {
        if (this.currentPage == null) {
            return 1L ;
        }
        return currentPage;
    }

    public String getColumn() {
        return column;
    }

    public String getKeyword() {
        return keyword;
    }

    public Integer getLineSize() {
        if (this.lineSize == null) {
            return 5 ;
        }
        return lineSize;
    }
}

  ● 控制层要写的内容:下面这个是输入两个关键字查询两个字段

技术分享图片

SplitPageUtil spu=new SplitPageUtil("/pages/back/admin/resumes/resume_list.action");//先实例化分页工具类实例
 Map<String,Object> map=this.resumeServiceClient.getIResumeService().findSplit(status,keywords,spu.getCurrentPage(),5,"state","name");

  说明:status,keywords分别为第一个关键字,和第二个关键字;"state","name"分别为两个查询列的名称

  ● 业务层要写的内容:使用分页查询一定要将数据的总记录数传递到前台

/**
* 分页查询全部的简历
* @param name "请输入姓名"框中输入的关键字
* @param state "状态"框中输入的关键字
* @param currentPage 当前页
* @param lineSize 每页显示的记录数
* @param columnone 要查的字段1,这里是状态
* @param columntwo 要查的字段,这里是姓名
* @return 返回Map集合
*/
 public Map<String, Object> findSplit(String name, String state, Long currentPage, Integer lineSize, String columnone, String columntwo) {
        Map<String,Object> params=new HashMap<>();
        Map<String,Object> results=new HashMap<>();
        params.put("name",name);
        params.put("state",state);
        params.put("start",(currentPage-1)*lineSize);
        params.put("end",lineSize);
        params.put("columnone",columnone);
        params.put("columntwo",columntwo);
        results.put("allResumes",this.resumeMapper.findAll(params));
        results.put("allRecorders",this.resumeMapper.getAllRecorders(params));//这里的key一定要写成allRecorders,因为表单上接收的是allRecorders
        return results;
    }

  ● 数据层要写的内容:

<select id="findAll" parameterType="java.util.Map" resultType="Resume"><!--根据查询条件查询出符合条件的全部数据-->
    select
    <include refid="Base_Column_List" />
    from resume
    <where>
        <if test="name != null and name !=""">
          ${columnone} like #{name}
        </if>
      <if test="state != null and state !=""">
        and ${columntwo} like #{state}    <!--如果前面name==null,mybatis会自动去掉这个and关键字-->
      </if>
    </where>
    limit #{start},#{end}
  </select>
  <select id="getAllRecorders" resultType="java.lang.Long" parameterType="java.util.Map"><!--返回符合条件的全部记录数-->
    select count(*) from resume
    <where>
    <if test="name != null and name !=""">
      ${columnone} like #{name}
    </if>
    <if test="state != null and state !=""">
      and ${columntwo} like #{state}
    </if>
    </where>
  </select>

9.如果怀疑自己在映射文件中写的sql语句对不对:可以观察dubbo微服务中的日志:里面会有执行的SQL语句,自己观察即可,里面的Total只是返回的行数

10.运行的时候先启动dubbo微服务,再启动tomcat,如果修改提供端代码就需要重启对应的微服务(可能也需要重启tomcat,我不确定),如果修改消费端后台代码就需要重启tomcat。

11.采用dubbo的目录结构:

  

第二个项目总结

原文:https://www.cnblogs.com/wxl123/p/11218030.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!