今天是学习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(三)的更多相关文章

  1. SpringMVC 三种异常处理方式

    SpringMVC 三种异常处理方式 在 SpringMVC, SpringBoot 处理 web 请求时, 若遇到错误或者异常,返回给用户一个良好的错误信息比 Whitelabel Error Pa ...

  2. springmvc(三) 参数绑定、

    前面两章就介绍了什么是springmvc,springmvc的框架原理,并且会简单的使用springmvc以及ssm的整合,从这一章节来看,就开始讲解springmvc的各种功能实现,慢慢消化 --W ...

  3. SpringMVC(三):参数绑定、输入输出转换

    一.参数解析绑定 1. 自定义绑定:不绑定某些项 @InitBinder private void initBinder(WebDataBinder dataBinder) { dataBinder. ...

  4. SpringMVC(三) RequestMapping修饰类

    SpringMVC使用@RequestMapping 注解为控制器指定可以处理哪些URL请求. 可以用于类定义以及方法定义: 类定义:提供初步的请求映射信息.相对于WEB应用的根目录. 方法处:提供进 ...

  5. springMvc(三)session、HandlerInterceptorAdapter

    仅供参考 设置session值,根据自己的需求设置值 /** * 登入验证 * * @return */ @RequestMapping(value = "/loginCheck.htm&q ...

  6. SpringMVC(三) —— 参数绑定和数据回显

    参数绑定的过程:就是页面向后台传递参数,后台接受的一个过程. 默认支持的参数类型:(就是你在方法上以形参的形式去定义一下的类型,就可以直接使用它) HttpServletRequest HttpSer ...

  7. SpringMVC(三):@RequestMapping中的URL中设定通配符,可以使用@PathVariable映射URL绑定的占位符

    1)带占位符的URL是Spring3.0新增的功能,该功能在SpringMVC向REST目标挺进发展过程中具有里程碑的意义. 2)通过@PathVariable可以将URL中占位符参数绑定到控制器处理 ...

  8. SpringMVC(三十) 实例:SpringMVC_RESTRUL_CRUD_显示所有员工信息

    Step by step to create a springMVC demo. 1. 创建一个dynamic web 工程. 2. 添加需要的jar文件,如下图: 3. 配置web.xml:配置di ...

  9. springMVC三种处理器映射器

    1.配置处理器映射器,springmvc默认的处理器映射器BeanNameUrlHandlerMapping <bean class="org.springframework.web. ...

  10. SpringMVC(三) RESTful架构和文件上传下载

    RESTful架构 REST全名为:Representational State Transfer.资源表现层状态转化.是目前最流行的一种互联网软件架构. 它结构清晰.符合标准.易于理解.扩展方便,所 ...

随机推荐

  1. C++动态链接库测试实例

    前话 上一章节我导出了一个动态链接库 要使用该链接库,我们还需要该链接库对外公开的函数,即头文件 下面开始实例 测试实例 第一步--将动态链接库的dll.lib.和头文件导入项目中 文件目录如下: 项 ...

  2. 107. Binary Tree Level Order Traversal II

    题目: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from ...

  3. 关于C的一些理解

    关于字符数组和字符指针 关于相互赋值问题一只有疑问,其实是自己搞不清指针和地址的关系.地址可以指向一块内存但是不一定存在于内存,比如字符数组名,数组名是地址,但是不实际存在于内存中,无法修改,而字符指 ...

  4. (转)linux 技巧:使用 screen 管理你的远程会话

    转自:http://www.ibm.com/developerworks/cn/linux/l-cn-screen/index.html 你是不是经常需要 SSH 或者 telent 远程登录到 Li ...

  5. poj 3259 Wormholes(最短路 Bellman)

    题目:http://poj.org/problem?id=3259 题意:一个famer有一些农场,这些农场里面有一些田地,田地里面有一些虫洞,田地和田地之间有路,虫洞有这样的性质: 时间倒流.问你这 ...

  6. 函数flst_get_last

    flst_node_t中存有12个字节的内容,前6个字节(page:4 boffset:2)表示相对自己前一个node的fil_addr_t信息,后6个字节表示相对自己后1个node的fil_addr ...

  7. bzoj3170

    以前写的,好像忘写解题报告 注意是一个跟曼哈顿距离很有用的结论 |xi-xj|+|yi-yj|=max(|xi+yi-(xj+yj)|,|xi-yi+(xj-yj)|) 因为绝对值有个性质是|a-b| ...

  8. UVa 11572 (滑动窗口) Unique Snowflakes

    滑动窗口挺有意思的,如果符合条件右端点一直向前走,不符合的话,左端点向前走. #include <bits/stdc++.h> using namespace std; set<in ...

  9. [POJ 1365] Prime Land

    Prime Land Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3211   Accepted: 1473 Descri ...

  10. apache开源项目--TIKA

    Tika是一个内容抽取的工具集合(a toolkit for text extracting).它集成了POI, Pdfbox 并且为文本抽取工作提供了一个统一的界面.其次,Tika也提供了便利的扩展 ...