最近分别学了Spring MVC和Mybatis,我将这两个揉合到一个项目里来,做一下简单的小结吧。
- 前期准备(Maven的安装、配置)
- 用Maven创建项目
- Spring MVC的配置文件(web.xml, spring mvc, log4j等的配置文件)
- Mybatis前期准备(下载Jar包及设置配置文件)
1. 前期准备
1.1 安装Maven
1.1.1. 下载并解压Maven:访问http://maven.apache.org/download.cgi ,下载apache-maven-3.3.1-bin.zip
1.1.2. 配置环境变量
- M2_HOME=Maven_Install_Dir
- 在Path里添加 %M2_HOME%\bin;
1.2 配置Maven
将M2_HOME/conf/settings.xml文件拷贝至%HOME%\.m2\settings.xml
注:因为放在这里每次升级maven版本都不需要更改我们的配置
1.3 Maven的配置文件 - settings.xml
在settings.xml中需更改的项目:
- 本地仓库路径(localRepository),可选项,如果不更改,则默认会安装在${user.home}/.m2/repository
- 镜像(mirror)
镜像这个词,在计算机世界通常是指中心,核心东西的一个副本。
maven的核心就称之为一个mirror. 我们使用了官方推荐的,使用英国的一个镜像,这样我们每次对maven的访问,都将去这个库(非中心仓库)进行下载我们所需要的软件包。这样就降低了中心仓库的负载。因为中心仓库为了避免大量的访问,造成服务器的运行问题,有时会拒绝我们的访问的。
在settings.xml文件中
2. 用Maven创建一个项目
2.1 Eclipse集成Maven
http://www.eclipse.org/downloads/packages/release/Kepler/SR2
- 下载eclipse v4.3 即kepler, 自带m2e , 并配置eclipse
- Eclipse -> Window -> Reference -> Maven ->
· Installations -> Add ->之前安装的Maven路径
· User Settings -> 确保settings.xml文件的路径正确
2.2 在命令行的方式,创建一个项目
在命令行中,进入d:\workspace\imooc\目录下,执行以下指令
mvn archetype:generate -DgroupId=imooc-arthur -DartifactId=spring-mvc-study -DarchetypeArtifactId=maven-archetype-webapp
- 通过mvn调用了maven的运行环境
- archetype:generate 调用了某种插件,并且将插件上的某种目标运用
- groupId是我们的坐标上的一个元素
- artifactId也是我们的坐标上的一个元素,最终artifactId的值会成为我们所创建的目录结构的根目录的名称,也就是我们最终会创建一个名字叫spring-mvc-study的目录来作为我们项目的根目录
- archetypeArtifactId 指明了我们创建目录类型的一个类型,在这里指明了是webapp类型
2.3 在Eclipse中导入该项目
打开Eclipse,在Navigater标签,右键->Import->Maven->Existing Maven Projects. 在Maven Projects Page, 指向D:\workspace\imooc\spring-mvc-study\之后,点击Finish.
2.4 打开Eclipse,在Navigater标签,右键->Import->Maven->Existing Maven Projects. 在Maven Projects Page, 指向D:\workspace\imooc\spring-mvc-study\之后,点击Finish.
2.5 更改pom.xml文件
2.5.1 指出并管理dependency3. Spring MVC的配置文件
3.1 web.xml
l context-param 标签:指定Spring应用上下文配置文件的路径
l listener 标签:spring的声明,我们加入ContextLoaderListener以及它所需要的配置文件的路径(已在context-param中指定)
l init-param 标签:dispathcer servlet对应的上下文配置文件的路径
l servlet 和servlet-mapping 标签:由于我们使用Spring MVC, 我们需要一个servlet. 即在web.xml中,配置一个servlet及相应的servlet mapping
· 让spring的application context激活了对标签支持的一些生命周期的管理,所以它可以识别我们用标签配置的bean的声明。
· 让spring激活了基于annotation的DI,Controller也需要一些服务来调用业务逻辑,这里它需要使用依赖注入的方式来获取这些service,这个配置就完成了这项功能
· DispatcherServlet上下文,只管理@Controller类型的bean,忽略其他类型的bean,如@Service
· @Service会交给Spring上下文来处理,依然要理解层次和上下文
· 这个扩展了我们的驱动注解,可以进一步将请求参数绑定到控制器参数
- ViewResolver
· 配置ViewResolver, 用来告诉DispatcherServlet将要哪个ViewResolver为你获取View
· 可以用多个ViewResolver,它们之间可以使用order属性进行排序
· InternalResourceViewResolver放在最后。因为它必定会返回一个对象,这个对象有可能不是我们所需要的
· 对于JstlView, 它只需要配置前缀、后缀,我们就可以将这些东西拼接成我们的jsp文件
- HandlerMapping, 无需配置,Spring MVC可以默认启动。在默认配置中,它会启动一个DefaultAnnotationHandlerMapping的 类,这个类就可以为我们去解析我们基于一些注解的annotation mapping. 这就是我们所期望的,所以我们不需要对HandlerMapping做任何配置
- 获得静态资源
- 使它来启动基于annotation的DI管理,同时我们需要告诉它,我们不需要管理Controller了,所以下面使用了exclude-filter
- 小的,它有多个,我们可以理解为是我们的根。这个就是ContextLoaderListener所加载的上下文,它为我们提供所有应用,我们公共所使用的一些组件,一些服务,比如service层,dao层等。这些服务应当是被整个应用所共享的,它不应当局限在某一个DispatcherServlet上下文之中
- 大的,显然是与特定DispatcherServlet相关的上下文。比如这里我们的DispatcherServlet,与它相关的Controller, ViewResolver, HandlerMapping等等。可以有多个DispatcherServlet, 公共的通用的上下文,就是为了在多个DispatcherServlet情况下所共有。
3.5 log4j的配置
在Eclipse中,将写好的log4j.properties文件放置在,spring-mvc-study1/src/main/resources/目录下4. Mybatis
4.1 Mybatis相关JAR包的设置
4.1.1 下载 https://github.com/mybatis/mybatis-3/releases
- mybatis-3.3.0.zip ---mybatis*.jar
- mybatis-3-mybatis-3.3.0.zip ---source code
4.1.2 在项目中设置
- mybatis-3.3.0.jar包,配置在 WEB-INF/lib/目录下
- 项目右键 -> 属性 ->Java Build Path -> Libraries -> Add External JARs... -> 添加
· mybatis-3.3.0.jar
· mysql-connector-java-5.1.18-bin.jar
这样设置之后,写代码时可 import org.apache.ibatis.session.SqlSession 等4.1.3 配置文件
mybatis-3-mybatis-3.3.0\src\test\java\org\apache\ibatis\submitted\complex_property\Configuration.xml
mybatis-3-mybatis-3.3.0\src\test\java\org\apache\ibatis\submitted\complex_property\User.xml
Mybatis大部分的工作其实是在配置文件里边做
- Configuration.xml , 核心配置文件
1. 有相关连接数据库的信息,如驱动,数据库地址端口号,用户名,密码等。
2. 导入sql配置的文件
3. 在DBAccess.java中读取该配置文件
- User.xml , 官方的sql配置演示。在该项目中更名为Course.xml
Configuration.xml
mapper namesapce="Course"
resultMap type="com.imooc.mvcdemo.model.Course" id=CourseResult
- 这里的type指数据库里的字段对应的是java代码中的哪个类的属性
- 这里的id要保证在resultMap中是唯一的
id column="courseId" jdbcType="INTEGER" property="id"
- <<span style="color:red">id 该行中的column值是数据库中的主键时才使用id来标识
- column是指查询时的数据库列名
- jdbcType对应于数据库中id的数据类型,数据库中的int在这里对应INTEGER
- property是指java代码中对应的该类的属性名
result column="title" jdbcType="VARCHAR" property="title"
- result 该行中的column值在数据库中为非主键时使用result来标识
......
select id="queryCourse" resultMap="CourseResult"
- 这里的id要保证在该Course.xml文件中唯一