美文网首页
框架实践

框架实践

作者: 机器不能学习 | 来源:发表于2018-09-07 10:15 被阅读0次

    ServletRequest request类似于@RequestParam

    可以获取传过来的参数。(非地址栏post)

    前端控制器return 的值 是在WEB-INF/view的文件,与地址栏输入的无关

    如映射到/doem return /system 则显示的是/system

    地址栏传参数@RequestMapping("/delete/{id}")+@PathVariable String id

    @PathVariable 和 @RequestParam一样都可以获得参数。但是它需要看映射时定义参数{id}

    RedirectAttributes 重定向。其作用是在地址栏增加参数

    第一种redirectAttributes.addAttributie("param1",value1);是在地址栏显性的增加参数param1=value1.

    第二种redirectAttributes.addFlashAttributie("param1",value)是在地址栏隐式的增加参数

    setRedirectResult(redirectAttributes, true, ADD_SUCCEED);是设置此次任务的状态

    地址栏用redirect:经行重定向

    预编译语句及存储过程创建回调https://blog.csdn.net/dyllove98/article/details/7772463

    https://blog.csdn.net/xuebing1995/article/details/72235380

    assert格式断言表达式

    (1)assert [boolean 表达式]

    如果[boolean表达式]为true,则程序继续执行。

    如果为false,则程序抛出AssertionError,并终止执行。

    分页的对象转化

    查出来的对象一般都是list 那么可以用new PageImpl来把list对象变为Page对象集

    @ResponseBody

    作用:该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

    返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

    就可以直接返回一个对象,解系后会变成json返回到页面

    Param

    ${param.name} 等价于request.getParamter(“name”),主要是服务器从页面或者客户端获取信息的方法。

    如果要在多选框中经行查询,用sql的时候就不要使用预查询,并且要经行判断,如果这个值不为空才经行条件查询。

    <%Out.print()%>在jsp输出Java

    可用用oncick绑定,ajax传表单数据,name作为识别数据的key,经行数据传送

    onchange 事件会在域的内容改变时发生。

    DozerBeanMapper

    Dozer是一个JavaBean映射工具库。

    用途映射:http://www.cnblogs.com/jingmoxukong/p/5952447.html?utm_source=gold_browser_extension

    转化(对象转Map,colletion,对象复制等):

    https://blog.csdn.net/cbjcry/article/details/70155357

     

    beanInfo

    获得一个对象的属性等beanInfo = Introspector.getBeanInfo(type);

    T obj = type.newInstance(); // 创建 JavaBean 对象

    PropertyDescriptor是一个可以通过反射得到对象get,set方法的对象。

    // 给 JavaBean 对象的属性赋值这里propertyDescriptors就获得了type的属性

    PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();

    它可以通过得到的属性反射到对应的方法

    // 获取getter方法,反射获取id值

    Object str = prop.getReadMethod().invoke(p);

    // 获取setter方法,反射赋值

     prop.getWriteMethod().invoke(p, "1");

    @PostConstruct和@PreDestroy

    这两个作用于Servlet生命周期的注解,实现Bean初始化之前和销毁之前的自定义操作

    数据字典实现

    jsp页面中可以用标签来实现数据字典,标签可以自定义一个,可以用标签库中已有的标签(在里面添加方法即可)。

    <%@ taglib prefix="dict" uri="http://www.summer.org/tags/dict" %>(已有的标签)

    ${dict:display('processAreaType',processArea.processAreaType) }(调用标签方法)

    在uri的文件中会配置方法类,在类中实现方法就可以了

    数据字典结构。

    bean对象,对应着数据库中的字典对象。

    一个字典类(就是uri中配置的那个类)  用于方法调用,相当于控制器

    一个service以及其实现类,这个实现类很重要,它要做两件事:

    [if !supportLists]1. [endif]从数据库中获得所有的字典对象,装在一个List中,再将其用groupcode经行分类储存(牵涉到初始化方法@PostConstruct和map中LinkedHashMap),map中每一个groupcode可能对应了多个对象,都存在一个list中并根据groupcode再放入map。

    [if !supportLists]2. [endif]写具体的方法实现(根据groupcode找code)

    数据字典数据库结构

    Groupcode1 groupcode2 code

    (人名)(公司名)(Int)

    张三tench      1

    ....        ....       ....

    一般1返回的是一个传入的groupcode的list,2中只用把这个list中符合code相同的对象找出来就行了

    在linkedHashMap时项目中用了import com.google.common.collect.Maps;

    Maps.newLinkedHashMap();我猜这个是缓存Map吧。这样节约了内存遍历

    *如果是实在下拉列表里使用字典,需要自定义组件https://www.cnblogs.com/flying607/p/5063207.html

    Validate

    来自org.apache.commons.lang3.Validate的外接校验工具

    它可以校验是否为空,在某一区间,是否为实体等等,如果错误还自动抛出异常

    用法Validate.函数名 即可

    分页查询

    如果是jpa查询会有函数的参数可以直接是pageable返回的也是Page对象

    如果是jdbcTemplate,那么就要手动封装,Page是new PageImpl得到的。传入结果集,pageable,maxcount就可以了

    在日志输出的时候,可以打印出日志信息所在类如:Logger logger = LoggerFactory.getLogger(com.Book.class);logger.debug("日志信息");将会打印出: com.Book : 日志信息

    从jsp传对象到控制器,要上传的数据的name属性设置为该对象的内部属性,如bean中有name属性,那么设置name=”name”,再控制器的参数中写入该bean,有格式要求,如TempName(一定要用驼峰原则)写参数就是(TempName tempName)

    文件下载:从TFP端的下载。架构:首先前端传到控制器时,控制器要有一个处理类,这个类做的是接收文件名,请求远端FTP将该文件传通过流到本地,将本地文件流给用户。

    因为远程端获取是共同步骤,可以专门写一个FTP工具,工具包括了登陆FTP和长传下载等等功能。

    下载时,传来一个全路径文件名和控制器端out流,FTPclient通过文件路径找到文件,把流写到控制器的流里面去。然后控制器得到该流后,写入一个文件当中,用http文件头说明文件路径即可。

    控制器端:主要作用是的到参数并处理,获取数据库数据,数据发送给前端,设置状态,返回页面

    参数获得:如果一个方法只处理一个动作,可以用地址栏传参也可以用post传参,地址栏传参通过@PathVariable获得数据(如果没有设置该注解的value,那么数据名称应和前端传来的参数名一致),获取post传来的参数可以用@RequestParam规则和@PathVariable一样,只不过它还有一个属性(require)如果是false就是不必须的参数,默认是true如果没有该参数就会报错。还有就是不加任何注解,这时候变量名应和参数名一直且默认require为false

    如果查询来的是多个参数,可以考虑用BeanMapper.convertMap将参数封装为一个对象。如果参数少没必要使用。

    数据库查询参数:如果用于单个的选择性数据key+name

    返回的数据一般都是list的形式

     

     

    dao层:主要步骤  sql语句,mapper.class,调用函数提交sql

    Sql:如果没有动态赋值的情况下用stringBuffer(用的时候注意变量用’’单引号包住),写sql语句时注意,如果是插入对象,对表中对象挨个写,且id用UUID生成。如果是查询想保证数据唯一性用group by ...。

    mapper如果要返回list<pojo>一般用ParameterizedRowMapper(返回单个对象也可以用它,他继承了Mapper)

    提交:query用于查询操作,查询出的是集合,queryForObject..等函数返回的是单个值,update一般用预编译更新或者删除

    相关文章

      网友评论

          本文标题:框架实践

          本文链接:https://www.haomeiwen.com/subject/qhbmwftx.html