【SpringMVC+MyBatis 】List集合获取的id加强型循环从数据库查找内容存入另一个List集合,且集合不会覆盖原来数据

标题有点复杂,我不太会描述。小白的问题。我现在所做的功能是从一张表获取id,这个id是另一个表的外键,根据id查找内容,刷新再将内容通过ajax请求显示在主页面上,其实用单独的一条sql语句就可以实现,不过我使用了两次sql语句。

1. 数据库表

表一 :内容表 announcement

【SpringMVC+MyBatis 】List集合获取的id加强型循环从数据库查找内容存入另一个List集合,且集合不会覆盖原来数据_第1张图片

表二 :公告表 notice
【SpringMVC+MyBatis 】List集合获取的id加强型循环从数据库查找内容存入另一个List集合,且集合不会覆盖原来数据_第2张图片
此处的aid表示 表一的id,nid表示 此条内容显示在主页面的位置。
主页面有三个div,要分别的出现在三个div盒子里面,而不能重叠。

2. 主页面视图(我使用颜色占位,稍微有点丑,因为我需要看到div的位置)
【SpringMVC+MyBatis 】List集合获取的id加强型循环从数据库查找内容存入另一个List集合,且集合不会覆盖原来数据_第3张图片

3. 主页面html代码

   

4. 后台视图
【SpringMVC+MyBatis 】List集合获取的id加强型循环从数据库查找内容存入另一个List集合,且集合不会覆盖原来数据_第4张图片
5. 后台部分html代码

	    
检查

5. 后台部分ajax请求
此处我使用了一个layer插件,这样会有一个弹出窗口,alter也可以的。

    function UPTONOTICE() {
        var selectid = $("#selectid").val();
        var id = $("#id").val();
        alert(id);
        $.ajax({
            type : "POST",
            url  : "${cx}/public/announcement/upToNotice",
            data : { "id" : id ,"selectid":selectid},
            cache: false,
            success : function(result) {
                if ( result.success ) {
                    layer.msg("公告信息发布成功", {time:2000, icon:6, shift:6}, function(){
                        window.location.href = "${cx}/public/announcement";
                    });
                } else {
                    layer.msg("公告信息发布失败", {time:2000, icon:5, shift:6}, function(){

                    });
                }
            }
        })
    }

此处就不用贴后台处理类,就是根据这些信息把a表的 id取出来,存在n表的aid里面,之所以贴出来是因为此处是选择了这个信息具体要更新到页面的哪一个位置(公告位置)。

6. 主界面ajax请求
参考3主界面代码

        var noticeid1 = $("#notice1");
        var noticeid2 = $("#notice2");
        var noticeid3 = $("#notice3");
        var notice = $("#notice");
        $.ajax({
            async: false,
            method:"GET",
            url: "${cx}/getNoticeinfo", //数据URL路径
            contentType: "application/json",
            success: function (data) {   //成功后的方法               
                if (data==null||data==""){
                    var ico=" \n";
                    notice.append(ico+"

当前没有公告

") }else{ alert("公告长度"+data.length); for(var i =0 ;i<3;i++){ var content =data[i].content; var time = data[i].time; var noticecontent = ""+content+"

发布日期:"+time+"

"; //因为我是按照正序反回信息的,只有三条信息 if (i==0){ noticeid1.append(noticecontent); } else if(i==1){ noticeid2.append(noticecontent); }else{ noticeid3.append(noticecontent); } } } }, error: function () { // ajax请求失败 alert("公告请求失败!"); } }); }

7.controller类处理请求
刷新主页面,ajax请求获取notice表中aid,和nid,再根据aid和announcement表中的id进行对比,查找正确的内容content再显示在主界面上。
Announcement、notice都是有实体类的。用list存储可以获取整条信息。

  //TODO 加载公告信息 getNoticeinfo
    @ResponseBody
    @RequestMapping(value = {"/getNoticeinfo"},method = RequestMethod.GET)
    public List getNoticeinfo(){
    //获取notice所有信息,一定只有三条,因为div就三个位置
    //根据notice表里面的aid  获取announcement表的id  ,得到了id就知道了content内容
        List notices=publicService.GetNotice();
        if(notices.isEmpty()){
            System.out.println("当前没有公告");
            return null;
        }
        List announcements= new ArrayList<>();
        int aid=0;
        for(Notice notice :notices){
        	//得到aid
            aid=notice.getAid();
            //这里不能用announcements=publicService.GetNoticeByAid(aid);  
            //因为这样永远只能存储最后一条信息,所以我更改了这里,单独写了一个方法。每次调用存进去!!!!
            announcements.add(GetNotice(aid));
        }
        System.out.println("announcements"+announcements);
        return announcements;
    }

自定义方法:

    private Announcement GetNotice(int aid){
        return publicService.GetNoticeByAid(aid);
    }

7. Mybatis Service类和Dao类处理方法

GetNotice()

 public List GetNotice() {
       return publicDao.GetNotice();
    }
   @Select("select * from notice order by nid")
    List GetNotice();

GetNoticeByAid(aid)

 //根据nid 从announcement中找到相关的公告内容
    public Announcement GetNoticeByAid(int aid) {
        return publicDao.GetNoticeByAid(aid);
    }
    @Select("select * from announcement where id = #{aid}")
    Announcement GetNoticeByAid(int aid);
  • 总结
    我的想法是,后台添加了公告,并且填写了具体位置,那么我再次刷新就是ajax请求,而不是session。我一开始在添加公告的时候就没有用session保存,因为当我关闭浏览器再次打开主界面是不会出现内容的。所以用ajax请求来完成访问数据库读取信息并且填充到相关位置。而且当访问的是其他人也是一样的效果。

小白希望得到大家的建议,谢谢。

你可能感兴趣的:(SpringMvc)