基于注解的示例
如果实在看xml配置文件不顺眼,则可以考虑使用注解的开发方式,不过注解的开发方式,会将SQL语句写到代码文件中,后续的维护性和扩展性不是很好(如果想修改SQL语句,就得改代码,得重新打包部署,而如果用xml方式,则只需要修改xml,用新的xml取替换旧的xml即可)
使用注解的开发方式,也还是得有一个全局配置的xml文件,不过mapper.xml就可以省掉了
当使用注解开发时,若需要传入多个参数,可以结合@Param
注解,示例如下
@Param
标签会被mybatis处理并封装成一个Map对象,比如上面的示例中,实际传入的参数是一个Map对象,@Param
标签帮忙向Map中设置了值
一般我们会将一张表的SQL操作封装在一个mapper.xml中,可能有许多张表需要操作,那么我们是不是要在<mappers>
标签下写多个<mapper>
标签呢?其实不用,还有第三种加载mapper的方法,使用<package>
标签
这样就会自动加载com.yogurt.mapper包下的所有mapper,这种方式需要将mapper接口文件和mapper.xml文件都放在com.yogurt.mapper包下,且接口文件和xml文件的文件名要一致。注意,在IDEA的maven开发环境下,maven中还需配置<resources>标签,否则maven打包不会将java源码目录下的xml文件打包进去
<mapper resource="" />
加载普通的xml文件,传入xml的相对路径(相对于类路径)
<mapper class="" />
使用mapper接口的全限定名来加载,若mapper接口采用注解方式,则不需要xml;若mapper接口没有采用注解方式,则mapper接口和xml文件的名称要相同,且在同一个目录
<package name="" />
扫描指定包下的所有mapper,若mapper接口采用注解方式,则不需要xml;若mapper接口没有采用注解方式,则mapper接口和xml文件的名称要相同,且在同一目录
注意:用后两种方式加载mapper接口和mapper.xml映射文件时,可能会报错
其实是因为,对于src/main/java
源码目录下的文件,maven打包时只会将该目录下的java文件打包,而其他类型的文件都不会被打包进去
目录下的XML文件打包进去,此时再运行单元测试,就能正常得到结果了