前情回顾
在第一章里,我们完成了一个基于 Spring + Spring MVC 的 Web 应用程序。但在我们现实中,一个具有一定业务能力的 Web 系统往往都需要进行数据的持久化。接下来,我们会在第一章的基础上,整合 ORM 框架 — Mybatis 。
ORM: Object Relational Mapping 对象关系映射
添加 Mybatis 依赖
|
|
创建数据库配置文件
在资源文件夹 resoueces 下创建 datasource.properties:
|
|
配置数据源
在 spring 配置文件 ssm-context.xml 里配置数据源,首先需要导入数据库配置文件 datasource.properties :
|
|
配置数据源,在 ssm-context.xml 添加如下内容:
|
|
注意:dataSouce 的创建必须在 解析资源文件之后,因为初始化数据源的各种信息是通过资源文件读取出来的。
配置 SqlSessionFactory
在 ssm-context.xml 添加如下内容:
|
|
注:mapperLocations 为 Mapper Xml 文件所在路径,这里为 resources/mybatis/mapper 文件夹为例。typeAliasesPackage 为 Model 类所在路径。
配置 AOP 事务管理
在 ssm-context.xml 添加如下内容:
|
|
注:pointcut 里的 expression 需更改为相应的包名,它的作用就是配置 aop 时拦截哪些类与方法
如果提示 apo 、 tx 标签找不到,需要在根节点的属性里导入标签的命名空间
|
|
到此为止,框架整合的部分结束,接下来便是如何使用的部分了。
编写业务代码
对 Mybatis 来说,编写业务时需要几部分:
- Mapper 接口
- Mapper XML
- Model
其中 Mapper 接口与 Mepper XML 是相对应的,对于每个表都需要以上三部分。回头看看 Mybatis 的配置中,sqlSessionFactory 与 mapperScannerConfigurer 配置了几个关键属性:
- sqlSessionFactory 的 mapperLocations 属性,这个属性配置 Mapper XML 的路径。
- sqlSessionFactory 的 typeAliasesPackage 属性,这个属性配置 Model 的路径。
- mapperScannerConfigurer 的 basePackage 属性,这个属性配置了 Mapper 接口的路径。
基于以上配置,我们先在 ml.jjandxa.mapper.model 下编写 Model:
|
|
接着我们需要在 ml.jjandxa.mapper.mapper 包下编写 Mapper 接口 :
|
|
最后,便是需要在 resources/mybatis/mapper 下编写 Mapper XML 文件:
|
|
注:以上三步,Mapper 接口、Model 的编写都较为简单。重点在于 Mapper XML 的编写。
- Mapper XML 根节点的 namespace 即是 Mapper 接口的全限定包名,这就是为什么说 Mapper 接口与 Mapper XML 是相对应的。
- Mapper XML 中的 select 、 update 、 insert 、 delete 节点对应 Mapper 接口中的一个方法。
至此,可以发现 Mapper XML 中的 namespace 加上节点id 等于 Mapper 接口中的方法 ml.jjandxa.mapper.mapper.UserMapper.selectAll()
注2:Mapper 接口需要加上 @Repository 注解
最后我们需要编写 Service 层的代码:
|
|
注:同样,注意要加上 @Service 注解
最后一部分,在 Controller 中注入 UserService,这里选择在第一章中最后测试用的 HelloSpring 来测试:
|
|
注: 记得往表里添加数据!!
来测试一下吧,启动服务。观察控制台输出,若没有异常,便说明整合并无出现明显错误。访问 http://localhost:8080/hellossm/hello
成功查询出数据!大成功!!!
附录
结语
SSM 整合教程到这里就结束了。这些东西很简单,但我想作为新手们入门的一个敲门砖很合适。我们不仅需要知道如何整合框架,也需要明白这些框架如何使用。后续可能会出 Spring MVC 入门使用教程,Mybatis 入门使用教程。当然,最后还是会告诉大家。以上这么繁杂的配置过程,其实都可以用 Spring Boot 来快速解决。但在那之前,希望新手们能够多花时间学习、实践、总结。