spring+mybatis3套路训练2 把注解方式改成xml映射方式,二者混用的姿势

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

image.png

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

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

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

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

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

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

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

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

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

由于我们之前配置了sqlSessionFactory
image.png

需要加入如下属性
image.png

接下来我们改下NewsController代码
代码如下
image.png

自动注入代码如下
image.png

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

浏览器访问localhost:8080/users/3
image.png

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的:(spring+mybatis3套路训练2 把注解方式改成xml映射方式,二者混用的姿势)