这节课把我们上节课注解方式配合类文件实现用户增删改查api改成xml映射的方式

上节课我们在UserMapper中写入了sql语句 如果sql是简单的一两句 使用注解的方式没什么问题 而且比较方便 但是上节课的动态SQL构建起来却不是很方便 如果此时把代码写在xml映射文件里面就更加方便
接下来我们顺着这个思路往下学习
首先我们来看下如何把我们之前的注解改成扫描配置
因为我们上节课在spring配置文件中加入了MapperFactoryBean配置 并且把我们创建的UserMapper接口放入了mapperInterface里面
如下

这时如果我们在来一个别的接口(mapper文件) 我们还要在spring中进行关联
如果有多个接口 这样做是不现实的
因此接下来我们首先注释掉spring中这部分配置内容 改用其他方式进行关联
注释内容如下

官方告诉我们有一种扫描的方式自动会帮助我们扫描到我们所有的mapper
接下来我们看下官方文档http://www.mybatis.org/spring/zh/mappers.html(注入映射器)
可以看见官方有这样一段内容

可以使用MapperScannerConfigurer扫描到所有mappers
下面演示下
在spring配置文件中加入如下

接下来在mappers包下面创建个NewsMapper
目录如下

然后我们创建一张新闻表jt_news
内容如下

然后这节课用到我们之前创建的实体类NewsInfo
在里面定义一个私有属性newsid 使其和数据库表中字段对应

接下来来到NewsMapper
首先获取新闻列表
代码如下

由于我们在spring配置文件中加入了扫描mapper的配置 这样在mappers下面有多个文件都可以扫描到
但是官方还告诉我们要配置下sqlSessionFactoryBeanName
官方说明如下

由于我们之前配置了sqlSessionFactory

需要加入如下属性

接下来我们改下NewsController代码
代码如下

自动注入代码如下

可以看见我们的自动注入newsMapper报红了 我们过会再解决这个问题
写好代码后 我们编译发布下代码 测试下我们spring中配置文件是否起到作用(是否能自动扫描mappers包下面的所有文件)
浏览器访问localhost:8080/users

浏览器访问localhost:8080/users/3

可以发现我们之前的用户api是好用的
接下来测试新加入的新闻api
浏览器访问localhost:8080/news

也是好用的 说明我们的spring配置起到了作用 能够帮助我们扫描 自动的将我们mappers包下面的类加载进去
下面我们解决下自动注入newMapper报红的信息

这时可以在我们的NewsMapper中打入注解@Repository
如下

在看我们newsController中自动注入部分红色消失了 如下

同理也要在我们UserMapper中打入@Repository注解 否则也会报红
打入了这个注解 编辑器就会认识 便可以自动注入了
接下来看下如何将上节课学的注解的形式改成xml配置文件的形式

首先在资源文件夹下创建一个mappers文件夹 在里面创建个NewsMapper.xml文件
目录如下

根据官网可知 这个xml文件里的命名空间需要根据官方文档格式写 不能随便写
官方说明如下
将命名空间内容直接拷贝到newsmapper.xml中
代码如下

其中的namespace需要映射到我们的接口文件(里面填写对应的接口文件名也就是映射类) 里面写入sql语句 由于我们在配置文件中写入了sql语句 所以在接口中就可以把sql注解注释掉了
NewsMapper中注释如下

代表其内部的配置(就是sql语句)是映射到我们哪一个接口文件中的 而id是对应我们接口里面的方法名(映射到我们的接口里的getNews方法)
resultType如果返回的是一个集合(List)类型 官方明确告诉我们 里面要填入对应的集合实体类
配置好了之后 还需要加入下面的配置
需要告诉我们的sqlSessionFactory我们的xml文件在哪 否则不会进行映射

所以在我们的spring配置文件中加入如下
之前我们配置好了sqlSessionFactory 接下来为其加入属性

这样写编译后会放到我们的target目录下 因为我们配置的路径是classpath下的
配置好后我们重新编译运行项目
浏览器访问localhost:8080/news
结果如下

我们已经把NewsMapper中@Select注解去掉了
从结果可以看出我们配置文件生效了 正常的显示我们的新闻列表了(说明我们是以xml方式获取的)
同时我们也可以把xml方式和注解的方式混用
如果sql语句比较复杂可以放在xml配置文件中 如果sql很简单 可以直接放在接口中以注解方式实现
接下来看下二者混用方式
在NewsMapper中获取新闻详细
代码如下

采用注解的方式 获取新闻详细
然后来到NewsController中修改如下

发布编译下代码
首先浏览器访问localhost:8080/news 访问新闻列表

可以看见依然是可以访问的
接下来访问新闻详细(传入新闻id)
localhost:8080/news/4

以上就是我们采用注解和xml的方式来完成我们的api功能 更多内容到官方文档详细阅读
网友评论