美文网首页我爱编程
spring+mybatis3套路训练2 把注解方式改成xml映

spring+mybatis3套路训练2 把注解方式改成xml映

作者: 在路上phper | 来源:发表于2018-04-01 22:54 被阅读53次

这节课把我们上节课注解方式配合类文件实现用户增删改查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映

    本文链接:https://www.haomeiwen.com/subject/kshacftx.html