SpringMVC(三)
今天是学习Spring的第四天,今天终于又把Spring+SpringMVC+Mybatis(SSM)高了一遍,这次运行的代码和配置和昨天的不一样,今天运行的很成功。
主要学习的一点就是我今天使用的是自己的本地的一个MySQL数据库,所以用起来还算比较方便一点,比如自己创建的数据,这样自己对数据库也比较熟悉,不会像用网上的那些代码使用起来那么生疏,不过最主要在于目录结构还是不够很清楚,先占个位,以后再来补充起来关于目录结构的东西。
现在项目的底层的框架已经完成,跑跑简单的增删改查可以了。不明白的是如何提供对外接口,要继续学写了。
过去了几天了,对在开发过程中一些总结吧,我是按照之前一个前辈给我的建议:从底层开始开发,所以我是按照这个经验start我的第一次开发的。
1、这里我就是已经创建了MySQL数据库(数据库需要经过设计,并且和架构师开发测试一起讨论的,其中我们需要考虑到表与表之间的链接关系,就是一张表的主键可能是下一张表的字段参数,因为我们在真正实现代码的最后需要调用到好几张表)的;
2、对于数据库里的表字段是我们在开发过程中需要用到的,但是有了数据库/表字段是完全不过够的,我们需要将数据库的字段定义提取出来,以方便我们在编写代码的时候使用到,这里我们定义数据库的字段是使用“DO”这个字段来确定文件名,定义在“model”层,这里需要说明下的是关于这里数据库字段的命名规则,就是需要使用驼峰命名方法(一般建议都是使用驼峰命名方法,前辈也是这么跟我说的),这里定义的时候还需要注意的是数据库/表里有几个字段我们就需要定义几个字段(个数必须保持一致,但是名字建议驼峰命名,不建议加下划线);
3、数据库字段定义完成后我们就需要往上层挺近了一层,这一层是“dal”层,这里是定义关于数据库操作的方法,比如增(insert)删(delete)改(update)查(select),这里我们需要定义两个文件:(1)Mapper.java(当然也有人会定义成Dao,我定义的是Mapper,效果是一样的),(2)Mapper.xml,Mapper.java只要是定义一个增(insert)删(delete)改(update)查(select)方法(就是定一个接口,不需要实现),Mapper.xml是完成定义增(insert)删(delete)改(update)查(select)的方法;
4、这里我要单独说些关于Mapper.xml里的东西,因为有好多配置的问题会出现问题。刚开始的时候总是挖坑给自己跳,现在算是了解一点了,在这里需要着重说明一下,也是给自己一个提醒,我还是会用截图加上注解的方式来说明:

从这张图中可以看到我标注了五个地方,前三个是为了后面两个做准备的:
(1)
很明显是Mapper(Dao)的路径,用来映射我们定义的接口,不能错,在mybatis中,映射文件中的namespace是用于绑定Dao接口的,即面向接口编程。当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句。
(2)
这个id是唯一标示,MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。当提供的返回类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,因为Map不能很好表示领域模型,我们就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。
(3)
Mybatis的Mapper文件中的select、insert、update、delete元素中有一个parameterType属性,用于对应的mapper接口方法接受的参数类型。 可以接受的参数类型有基本类型和复杂类型。mapper接口方法一般接受一个参数,可以通过使用@Param注释将多个参数绑定到一个map做为输入参数。
(4)
比如这里的id定义
(5)关于第四点我需要多说几句:
a、Mapper映射Mapper.xml
b、Mapper中有定义@Param时,我们就以@Param后括号里的参数为准,不以@Param(“~”)后面定义的参数为准
c、如果Mapper内有定义@Param时,在Mapper.xml里就不需要定义ParameterType了
d、如果Mapper里面没有定义@Param时,以定义方法内的参数为准,而且Mapper.xml里也要有ParameterType参数
SpringMVC(三)的更多相关文章
- SpringMVC 三种异常处理方式
SpringMVC 三种异常处理方式 在 SpringMVC, SpringBoot 处理 web 请求时, 若遇到错误或者异常,返回给用户一个良好的错误信息比 Whitelabel Error Pa ...
- springmvc(三) 参数绑定、
前面两章就介绍了什么是springmvc,springmvc的框架原理,并且会简单的使用springmvc以及ssm的整合,从这一章节来看,就开始讲解springmvc的各种功能实现,慢慢消化 --W ...
- SpringMVC(三):参数绑定、输入输出转换
一.参数解析绑定 1. 自定义绑定:不绑定某些项 @InitBinder private void initBinder(WebDataBinder dataBinder) { dataBinder. ...
- SpringMVC(三) RequestMapping修饰类
SpringMVC使用@RequestMapping 注解为控制器指定可以处理哪些URL请求. 可以用于类定义以及方法定义: 类定义:提供初步的请求映射信息.相对于WEB应用的根目录. 方法处:提供进 ...
- springMvc(三)session、HandlerInterceptorAdapter
仅供参考 设置session值,根据自己的需求设置值 /** * 登入验证 * * @return */ @RequestMapping(value = "/loginCheck.htm&q ...
- SpringMVC(三) —— 参数绑定和数据回显
参数绑定的过程:就是页面向后台传递参数,后台接受的一个过程. 默认支持的参数类型:(就是你在方法上以形参的形式去定义一下的类型,就可以直接使用它) HttpServletRequest HttpSer ...
- SpringMVC(三):@RequestMapping中的URL中设定通配符,可以使用@PathVariable映射URL绑定的占位符
1)带占位符的URL是Spring3.0新增的功能,该功能在SpringMVC向REST目标挺进发展过程中具有里程碑的意义. 2)通过@PathVariable可以将URL中占位符参数绑定到控制器处理 ...
- SpringMVC(三十) 实例:SpringMVC_RESTRUL_CRUD_显示所有员工信息
Step by step to create a springMVC demo. 1. 创建一个dynamic web 工程. 2. 添加需要的jar文件,如下图: 3. 配置web.xml:配置di ...
- springMVC三种处理器映射器
1.配置处理器映射器,springmvc默认的处理器映射器BeanNameUrlHandlerMapping <bean class="org.springframework.web. ...
- SpringMVC(三) RESTful架构和文件上传下载
RESTful架构 REST全名为:Representational State Transfer.资源表现层状态转化.是目前最流行的一种互联网软件架构. 它结构清晰.符合标准.易于理解.扩展方便,所 ...
随机推荐
- 配置MySQL使用HugePages
前言:对于有Oracle运维经验的童鞋来说,如果服务器内存很大,一般都会设置HugePages,是因为如下原因:对于 Linux 操作系统,通过 Linux kswapd 进程和页表内存结构(针对系统 ...
- write_chip,read_chip
int write_chip(UINT32 addr, UINT32 data) { if(0 == fpgaRWMode) /* localbus mode */ { UINT16 datah, d ...
- poj1925Spiderman(dp)
链接 确实是破题 按复杂度估计怎么着也不能按坐标D 啊 网上的代码交上去还TLE 无语了 多次TLE之后终于看到一次WA..好高兴 以横坐标进行DP dp[j] = min(dp[j],dp[2*x ...
- poj2823
这是一道题意简单,数据较大的题(喜闻乐见): 一开始可能会想到RMQ问题,ST,线段树都是O(nlogn),应该勉强能过(没试过): 由于这道题区间是滚动连续的,所以,可以使用单调队列! 以最小值为例 ...
- bzoj1056: [HAOI2008]排名系统 && 1862: [Zjoi2006]GameZ游戏排名系统
hash 加上 平衡树(名次树). 这道题麻烦的地方就在于输入的是一个名字,所以需要hash. 这个hash用的是向后探查避免冲突,如果用类似前向星的方式避免冲突,比较难写,容易挂掉,但也速度快些. ...
- bzoj1030
AC自动机和DP. f[i][j] 表示在匹配到第i位置,处于ac自动机的j节点.决策第(i+1)个字母,计算出转移到第j2节点. f[i+1][j2] += f[i][j]; #include< ...
- LeetCode Excel Sheet Column Title (输出excel表的列名称)
题意:给一个数字n,输出excel表的列名称. 思路:其实观察可知道,是个26进制的标记而已.那就模拟一下,每次计算一位时就先左移1位,再进行计算. class Solution { public: ...
- Java [leetcode 33]Search in Rotated Sorted Array
题目描述: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 ...
- js变量作用域
for(var i =0;i<100;i++) { } alert(i);//100 if(true){ var i="91d"; } alert(i);//91d func ...
- FirstOrDefault
FirstOrDefault:取序列中满足条件的第一个元素,如果没有元素满足条件,则返回默认值(对于可以为null的对象,默认值为null,对于不能为null的对象,如int,默认值为0)