springboot项目新感悟

1. 前言

这几天老师带领我们做一个标准的Java web项目,提供了前端的源码,是一次很好的练习机会,老师带领做的是基于自己引入包的SSM框架,而自己是用springboot管理开发的。做的过程中也学到了很多新的知识,总结一下,希望以后温故而知新。

2. 前端

2.1 头文件

引入thymeleaf模板需要添加

<html lang="en" xmlns:th="http://www.thymeleaf.org">

因为是老师给的前端静态界面,IDEA中仍然无法提示出th:xxx。后发现原因是最上面的标签影响了




还有一个就是相对/绝对路径的问题
开头为/的路径为绝对路径,引入css/js/…最好使用绝对路径,这样在跳转之后不会找不到上述文件

	<link href="/css/main.css" rel="stylesheet" type="text/css" media="all" />
    <script src="/js/jquery-1.4.2.min.js" type="text/javascript">script>

文件的路径存放位置为:springboot项目新感悟_第1张图片

2.2 js/ajax

自己只是懂一丢丢前端的知识,但开发中用到了几个js/ajax记录一下

2.2.1 submit()

由于提交按钮不在form表单中,所以需要一个简单的js来进行提交

	<script type="text/javascript">
        function submit(){
            document.getElementById("institutionCreat").submit();
        }
    script>

2.2.2 ajax

需求是这样的:进入界面会显示所有的机构列表,选中某一机构后,会显示旗下的所有科室列表(如同选中省后显示所有的市)

<script type="text/javascript">
    var orgId = null;
    $("select[id=selectO]").change(function(){
        orgName = $(this).val();
        $.ajax({
            type:"POST",
            async:true,  //异步
            dataType:"json",
            url: "/part01/content/member-section.html",    //url地址
            data:{"orgName":orgName},
            success : function (data) {   //请求成功时的返回函数
                // var list =  JSON.stringify(data);
                for (var i = 0; i < data.length; i++) {
                    var option = document.createElement("option");
                    $(option).val(data[i]);
                    $(option).text(data[i]);
                    $('#dss').append(option);
                }
            }
        });
    });

script>

其中第一个select[id=selectO]的意思为找到对应的select,selectO是其id
第二个dss是第二个下拉列表的id
需要注意的是,这个ajax需要放在页面最下方,原因是:页面进行加载,从上到下,如果先加载到ajax,则找不到对应的select(这个还未加载)所以失效。

/**
     * 根据机构名称得到旗下的科室列表
     * @param orgName
     * @param model
     * @return
     */
    @RequestMapping("/part01/content/member-section.html")
    @ResponseBody
    public List<String> StuffRelationSectionView(@RequestParam(required=true,name = "orgName") String orgName,
                                           		 Model model) {
        Integer orgId = organizationService.getIdByOrgName(orgName);
        List<String> divNameList = sectionService.getSectionDivNameByOrgId(orgId);
        List<String> allOrgName = organizationService.getAllOrgName();
        model.addAttribute("allOrgName",allOrgName);
        model.addAttribute("divNameList",divNameList);
        return divNameList;
//        return "/part01/content/member-relation.html";
    }

用@ResponseBody标记为返回json,直接返回json数据

2.2 date格式

一般来说,采用th:text标记的date日期都是外国格式,对我们来说很奇怪
在这里插入图片描述

<td align="center" th:text="${orgInformation.standAloneDate}">td>
<td align="center" th:text="${#calendars.format(orgInformation.standAloneDate,'yyyy-MM-dd HH:mm:ss')}">td>

很明显的差距,修改方法也很简单,其实不止#calendars,还有其他的一些封装好的类,具体我也没用过。

2.3 th:if

需要注意的是,如果数据是字符串类型的,判断是否相等需要带引号。尤其注意有时需要用varchar(1)来保存一个魔法值,比如1->博士等等,此时看似是数字,其实是字符串,判断就可能有误。正确事例如下:

<td th:if="${leader.title=='1'}">初级(医(技)师)td>

2.4 input多选

2.4.1 radio

对于多选项radio,只需将每个radio的name改成需要传的值即可

<td align="left" colspan="4" >
    <input type="radio" name="exeType" id="radio5" value="2" />行政部门
    <input type="radio" name="exeType" id="radio6" value="1" />卫生监督机构
    <input type="radio" name="exeType" id="radio7" value="3" />协作单位
td>

2.4.1 select

select 将select的name属性改为需要传的值即可

<select name="orgLevel" id="select">
   
    <option value="1">未定级option>
    <option value="2">副科级以下option>
    <option value="3">副科级option>
    <option value="4">科级option>
    <option value="5">副处级option>
    <option value="6">处级option>
    <option value="7">副厅局级option>
    <option value="8">厅局级option>
select>

2.5 数据回显

数据回显的意思是,当我们对一个表进行修改时,页面要提前先展示原值,方便修改。
后端逻辑就是传回id,查询出整个表数据,填充到前端界面

2.5.1 大多数

简单的一部分就是直接使用th:value填充

2.5.2 radio

<td align="left" colspan="4" >
   <input type="radio" name="exeType" id="radio5" value="2"  th:field="*{organization.exeType}"/>行政部门
   <input type="radio" name="exeType" id="radio6" value="1"  th:field="*{organization.exeType}"/>卫生监督机构
   <input type="radio" name="exeType" id="radio7" value="3"  th:field="*{organization.exeType}"/>协作单位
td>

使用th:field

2.5.3 option

<select name="edu" id="select">
    <option value="1" th:selected="${stuff.edu=='1'}">博士option>
    <option value="2" th:selected="${stuff.edu=='2'}">硕士option>
    <option value="3" th:selected="${stuff.edu=='3'}">本科option>
    <option value="4" th:selected="${stuff.edu=='4'}">大专option>
    <option value="5" th:selected="${stuff.edu=='5'}">中专option>
    <option value="6" th:selected="${stuff.edu=='6'}">高中option>
    <option value="7" th:selected="${stuff.edu=='7'}">初中option>
    <option value="8" th:selected="${stuff.edu=='8'}">无学历option>
    <option value="9" th:selected="${stuff.edu=='9'}">不详option>
select>

2.6 隐藏的input

需求如下:我们要对一个表进行修改,需要传递id,此时需要隐藏一个input,存储隐藏的信息

<input type="hidden" th:value="${organization.id}" name="id">

3. 后端

3.1 mapper层

我用的是注解版mybatis,sql直接写在了注解上。

3.1.1 脚本

mybatis有很多有用的脚本,在xml版中,通常用<>来写,在注解版中,写法如下
代码一

	@Select("")
    List<Orgattached> getEquipment(Orgattached orgattached);

代码二

	@Select("")
    List<StuffComposition> getStuffComposition(StuffComposition stuffComposition);

代码一是简单的一个例子,代码二是一个复杂的例子(意思不是例子二是例子一的加强版)
在字符串中添加

你可能感兴趣的:(学习感悟,项目)