三、后台java

学习笔记一:基础了解

页面请求方式

.get方法:

URL的路径格式:http://XXXXX?name=xxx;

后台写法:

@RequestMapping("XXXXX")

public void getData(String name){}

.post方法:

URL的路径格式:http://XXXXX/xxx;

后台写法:

@RequestMapping(value = "/update",method = RequestMethod.POST,produces = "application/json;charset=UTF-8")

@ResponseBodypublic MessageBox updateRole(@Valid Role role, BindingResult result){    

return MessageBox.getSuccessMsg("修改角色成功");

}

说明:把传的值封装在对象里。一般用此方法都用于表单的验证

@Valid是匹配Role对象里的验证,from表单传的数据是否规范。

post请求的时候参数直接用(),放在路径里

$.post(URL.deleteBy(yearMonth,employNos,ids),function(data){    $.msgbox({msg:data.text,icon:data.type});    if(data.type == 'success'){ }});

.第三种方法

URL的路径格式:http://XXXXX/xxx/abc/ddd

后台写法:

@RequestMapping(value = {"/delete/{yearMonth}/{employNos}/{ids}"}, method = RequestMethod.POST, produces = "application/json;charset=UTF-8")

@ResponseBodypublic MessageBox deletePayroll(@PathVariable String yearMonth,@PathVariable String employNos,@PathVariable String ids) { 

return MessageBox.getErrorMsg("删除数据失败");

}

说明:

当参数为路径的时候,这时候要用的参数就要写上:@PathVariable作为注释。

前台传送的参数写法:

deleteBy:function(yearMonth,employNos,ids){    return '/hr/civilianPayroll/delete/'+yearMonth+'/'+employNos+'/'+ids;},

注:当出现value={“”,””}下面多路径配置情况,说明此方法被不同请求共用,共用的路径不同。

@RequestMapping(value={"","/","/index"},method = RequestMethod.GET)

public String index(Model model) {    return "index";}

java注解说明

⒈Controller注解

4.1类注解

@Controller(由Spring识别Handler实例)放在Controller的类前面:


图一  访问路径

@RequestMapping(value=, method=, params=)设置访问的路径,如上图所示,具体配发见上笔记

4.2方法注释

@RequestMapping(value=, method=, params=)@PathVariable,配合占位符{parameter}

示例截图如下


图二  访问路径二

@RequestParam(value=, required=, defaultValue=)

在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),

另外一种是用注解@RequestParam 直接获取。

如下图直接传参数

图三  传参数

或者指定参数名字,是否参数必传。Required为true为必传,flase则可传可不传


图四 参数设置

@CookieValue(value=, required=, defaultValue=) 获取前台传的cookie值。

 @RequestHeader(value=, required=, defaultValue=)

@CookieValue的使用方式类似,在控制器的方法参数中使用注解把请求路径指定的参数提取出来作为实参注入形参中

4.2封装入参

获取值方法

HttpServletRequest,WebRequest, ServletRequest的InputStream / Reader

输出值方法

HttpServeltResponse,ServletResponse的OutputStream / Writer

 4.3请求信息和对象的转换

// 使用  @RequestBody   

@ResponseBody;使用HttpEntity / ResponseEntity 

 @ ResponseBody  

@RequestMapping  返回值通常解析为跳转路径,加上@ResponseBody后返回结果不会被解析为跳转路径,而是返回值直接写入HTTP response body里面,加上@ ResponseBody后,会直接返回json数据。 

 @RequestBody首先  @RequestBody需要接的参数是一个string化的json,这里直接使用JSON.stringify(json)这个方法来转化

图五 类传值

HttpMessageConverter@Valid是使用hibernate validation的时候使用

图六 参数

这里使用时在Role这个类里配置相关信息,进行验证。通过@NotBlank(message = "")设置就可以对传入值的类型进行验证

图七 类注释

//空检查

@Null       验证对象是否为null

@NotNull    验证对象是否不为null, 无法查检长度为0的字符串

@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.

@NotEmpty 检查约束元素是否为NULL或者是EMPTY.

// Booelan检查

@AssertTrue     验证 Boolean 对象是否为 true

@AssertFalse    验证 Boolean 对象是否为 false

//长度检查

@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内

@Length(min=, max=) Validates that the annotated string is between min and max included.

//日期检查

@Past       验证 Date 和 Calendar 对象是否在当前时间之前

@Future     验证 Date 和 Calendar 对象是否在当前时间之后

@Pattern    验证 String 对象是否符合正则表达式的规则

//数值检查,建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null

@Min            验证 Number 和 String 对象是否大等于指定的值

@Max            验证 Number 和 String 对象是否小等于指定的值

@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度

@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度

@Digits     验证 Number 和 String 的构成是否合法

@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。@Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum.

@Range(min=10000,max=50000,message="range.bean.wage")

private BigDecimal wage;

@Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)

@CreditCardNumber信用卡验证

@Email  验证是否是邮件地址,如果为null,不进行验证,算通过验证。

@ScriptAssert(lang= ,script=, alias=)

@URL(protocol=,host=, port=,regexp=, flags=)

@Validated 是只用spring  Validator 校验机制使用

@Override 的作用如果想重写父类的方法,在方法前面加@Override 系统可以帮你检查方法的正确性,

Dao层实现里面写的:

@Repository 

它用于将数据访问层(DAO层 ) 的类标识为 Spring Bean。

为了让Spring能够扫描类路径中的类并识别出 @Repository 注解,需要在 XML 配置文件中启用Bean 的自动扫描功能,这可以通过<context:component-scan/>实现。

图八 

@Autowired接口注入

@Autowired顾名思义,就是自动装配,其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property。@Qualifier()注解:实现类就是有多个使用,括号里面的应当是Car接口实现类的类名,

@Resource:

文件类型处理:

属性文件:一行表示一个属性,属性就是键值对,键和值用等号(=)或冒号(:)分隔,一般用于配置程序的一些参数。db.host=192.168.10.100

在java中有一个专门的类java.util.Properties里面的Properties类,可以直接引用。

使用类Properties处理属性文件的好处是:可以自动处理空格,我们看到分隔符=前后的空格会被自动忽略

可以自动忽略空行

可以添加注释,以字符#或!开头的行会被视为注释,进行忽略

但是在处理中文name=老马是不能这么写,只能写成Unicode的格式name=\u8001\u9A6c

CSV文件/ Excel/HTML/ 压缩文件

学习笔记一:增删该查

Java熟悉:

如果要用自己写的查询语句,需要在对应的xml文件里面写查询语句

图九 配置查询语句

在dao层不能直接引用,通过调用父级的方法,给对应的xml的id。进行查询

图十 mapper方法

增删该查功能:

直接用basedao里封装好的增删该查功能,子类继承父类,直接调用方法。

在mybatis-config.xml文件里配置用户信息

图十一 类设置
图十二 xml设置

表中

查询功能:

前台使用easyui的数据绑定数据网格datagrid的queryparams属性

图十三 传参数

进行查询数据传回后台。

图十四 数据加载

如果不传送值那么Map的put方法里只传xml文件里条件参数不存在的字段名,或者直接传个空值。

图十五 参数的用法

添加和修改功能:

1.通过opt参数设置0还是1判断是增加还是修改功能。0为添加,1为修改。页面是通过form表单的submit提交事件进行数据传回后台controller对应的方法。

图十六 增加和修改设置

删除功能:

消息提示框(easyui自带)

图十七   tab提示框

判断是否已经选择一条数据。再通过post请求返回controller

图十八 post请求

此上URL.XXX是访问对应controller的路径。

注:xml文件里 in的用法

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

foreach元素的属性主要有item,index,collection,open,separator,close。

item表示集合中每一个元素进行迭代时的别名,

index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,

open表示该语句以什么开始,

separator表示在每次进行迭代之间以什么符号作为分隔符,

close表示以什么结束,

在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:

如果传入的是单参数且参数类型是一个List的时候,collection属性值为list

public List dynamicForeachTest(List ids);

如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

public List dynamicForeach2Test(int[] ids);

如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key

public  List dynamicForeach3Test(Map params);

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,682评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,277评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,083评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,763评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,785评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,624评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,358评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,261评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,722评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,900评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,030评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,737评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,360评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,941评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,057评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,237评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,976评论 2 355

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,659评论 18 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,409评论 1 92
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,980评论 6 13
  • 一、测试目的:为什么做? 1、了解用户输入行为 通过测试观察用户操作,通过访谈挖掘用户动机,掌握用户的需求和行为 ...
    cyqian阅读 883评论 0 0
  • 我们经常听说有人一个经验用了十年,对于这个人来说,这十年并没有增加,他能力而只是一个简单的重复。那为什么他会这样的...
    天之巅海无涯阅读 191评论 0 0