如何配置Spring与MyBatis的标签使用?

2026-05-22 12:151阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1132个文字,预计阅读时间需要5分钟。

如何配置Spring与MyBatis的标签使用?

关于Spring-MyBatis,存在两个注解:`@MapperScan` 和 `@Mapper`,以及两个配置:`mybatis.type-aliases-package` 与 `mybatis.mapper-locations`。通常在配置文件中查看,用于Spring整合MyBatis,有时可能会出现配置混乱。

关于spring-mybatis,有两个标签:@MapperScan 、@Mapper和两个配置:mybatis.type-aliases-package与mybatis.mapper-locations,经常在各个配置文件中看到,用于spring结合mybatis使用,有时候可能会有点弄混了,什么情况下必须使用?简单介绍下。 1、问题描述

关于spring-mybatis,有两个标签:@MapperScan 、@Mapper和两个配置:mybatis.type-aliases-package与mybatis.mapper-locations,经常在各个配置文件中看到,用于spring结合mybatis使用,有时候可能会有点弄混了,什么情况下必须使用?简单介绍下。

2、解决方案 2.1 @MapperScan 与@Mapper

这两个标签作用其实一样,可以理解为一个是整体配置,一个是单独配置;

2.1.1 @MapperScan配置在springboot的启动类上

@SpringBootApplication @MapperScan("com.laowang.springtest.db") public class SpringtestApplication { public static void main(String[] args) { SpringApplication.run(SpringtestApplication.class, args); } }

作用是扫描指定包下面的接口类,进而生成mybatis的代理类;

多种配置,可以指定多个包:

如何配置Spring与MyBatis的标签使用?

(1)一个包:

@MapperScan("com.laowang.springtest.db")

(2)多个包:

@MapperScan({"com.laowang.springtest.db","com.laowang.springtest.db1","com.laowang.springtest.db2"})

(3)通配符:

一个*代表只能扫描任意单个包,无法递归扫描* @MapperScan("com.laowang.*.db")

两个**代表可以扫描任意个包,可以递归扫描@MapperScan("com.laowang.**.db") 2.1.2 @Mapper配置在mytatis接口类上

@MapperScan是会自动扫描包下面的接口类,类似会给每个接口类自动加上@Mapper。

@Mapper可以单独使用,不使用@MapperScan,同时使用也不会报错;

@Mapper public interface UserMapper { int deleteByExample(UserExample example); } 2.2 mybatis.type-aliases-package与mybatis.mapper-locations 2.2.1 type-aliases-package

第一个mybatis.type-aliases-package可以不用管,它的作用是指定实体类所在包,然后在xml参数中就可以不写包名;

例如:

<insert id="insert" parameterType="com.laowang.springtest.db.entity.User"> insert into user (id, name, password ) values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR} )

假如配置了type-aliases-packag:

mybatis: type-aliases-packag: com.laowang.springtest.db.entity

parameterType就可以省去包名,直接更改为:parameterType="User",意义不大;

2.2.2 mybatis.mapper-locations

这个配置还是很有作用的,用户标记或者指定mybatis对应xml的路径;

两个情况:

第一个是使用mytatis-genarator默认生成的mybatis接口类与xml再同一目录下,这个时候可以不设置这个配置,也能正常加载和使用,如下可以不使用这个配置;

第二种,一般项目中会把mybatis的xml集中管理,放到resources下去,就需要指定下路径了。

如下就需要设置该配置:

mybatis的xml路径下需要配置下:

mybatis: mapper-locations: classpath:mapper/*.xml 2.3 mybatis常见错误:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.laowang.springtest.db.mapper.UserMapper.selectByPrimaryKey at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235) ~[mybatis-3.5.9.jar:3.5.9]-软件老王

这个错误就是没有找到xml文件,造成该错误的有以下情况:

(1)springboot初始化项目,默认是没有打包xml文件到target下面的,需要在build中指定下;

<build> <resources> <resource> <directory>src/main/resources/</directory> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>

(2)mybatis生成xml没有跟接口类在同一目录下,需要配置mybatis:
mapper-locations: classpath:mapper/*.xml,否则也会报找不到执行的statement。

2.4 简单情况

通过mybatis-generator生成的接口实体类和xml默认在同一目录下,这个时候只需要在启动类上配置:

@SpringBootApplication @MapperScan("com.laowang.springtest.db") public class SpringtestApplication { public static void main(String[] args) { SpringApplication.run(SpringtestApplication.class, args); } }

@Mapper标签、mybatis.type-aliases-package、mybatis.mapper-locations都可以不用配置;


更多信息请关注公众号:「软件老王」,关注不迷路,软件老王和他的IT朋友们,分享一些他们的技术见解和生活故事。

更多信息请关注公众号:「软件老王」,关注不迷路,IT技术与相关干货分享,回复关键字获取对应干货,本文版权归作者软件老王所有,转载需注明作者、超链接,否则保留追究法律责任的权利。

本文共计1132个文字,预计阅读时间需要5分钟。

如何配置Spring与MyBatis的标签使用?

关于Spring-MyBatis,存在两个注解:`@MapperScan` 和 `@Mapper`,以及两个配置:`mybatis.type-aliases-package` 与 `mybatis.mapper-locations`。通常在配置文件中查看,用于Spring整合MyBatis,有时可能会出现配置混乱。

关于spring-mybatis,有两个标签:@MapperScan 、@Mapper和两个配置:mybatis.type-aliases-package与mybatis.mapper-locations,经常在各个配置文件中看到,用于spring结合mybatis使用,有时候可能会有点弄混了,什么情况下必须使用?简单介绍下。 1、问题描述

关于spring-mybatis,有两个标签:@MapperScan 、@Mapper和两个配置:mybatis.type-aliases-package与mybatis.mapper-locations,经常在各个配置文件中看到,用于spring结合mybatis使用,有时候可能会有点弄混了,什么情况下必须使用?简单介绍下。

2、解决方案 2.1 @MapperScan 与@Mapper

这两个标签作用其实一样,可以理解为一个是整体配置,一个是单独配置;

2.1.1 @MapperScan配置在springboot的启动类上

@SpringBootApplication @MapperScan("com.laowang.springtest.db") public class SpringtestApplication { public static void main(String[] args) { SpringApplication.run(SpringtestApplication.class, args); } }

作用是扫描指定包下面的接口类,进而生成mybatis的代理类;

多种配置,可以指定多个包:

如何配置Spring与MyBatis的标签使用?

(1)一个包:

@MapperScan("com.laowang.springtest.db")

(2)多个包:

@MapperScan({"com.laowang.springtest.db","com.laowang.springtest.db1","com.laowang.springtest.db2"})

(3)通配符:

一个*代表只能扫描任意单个包,无法递归扫描* @MapperScan("com.laowang.*.db")

两个**代表可以扫描任意个包,可以递归扫描@MapperScan("com.laowang.**.db") 2.1.2 @Mapper配置在mytatis接口类上

@MapperScan是会自动扫描包下面的接口类,类似会给每个接口类自动加上@Mapper。

@Mapper可以单独使用,不使用@MapperScan,同时使用也不会报错;

@Mapper public interface UserMapper { int deleteByExample(UserExample example); } 2.2 mybatis.type-aliases-package与mybatis.mapper-locations 2.2.1 type-aliases-package

第一个mybatis.type-aliases-package可以不用管,它的作用是指定实体类所在包,然后在xml参数中就可以不写包名;

例如:

<insert id="insert" parameterType="com.laowang.springtest.db.entity.User"> insert into user (id, name, password ) values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR} )

假如配置了type-aliases-packag:

mybatis: type-aliases-packag: com.laowang.springtest.db.entity

parameterType就可以省去包名,直接更改为:parameterType="User",意义不大;

2.2.2 mybatis.mapper-locations

这个配置还是很有作用的,用户标记或者指定mybatis对应xml的路径;

两个情况:

第一个是使用mytatis-genarator默认生成的mybatis接口类与xml再同一目录下,这个时候可以不设置这个配置,也能正常加载和使用,如下可以不使用这个配置;

第二种,一般项目中会把mybatis的xml集中管理,放到resources下去,就需要指定下路径了。

如下就需要设置该配置:

mybatis的xml路径下需要配置下:

mybatis: mapper-locations: classpath:mapper/*.xml 2.3 mybatis常见错误:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.laowang.springtest.db.mapper.UserMapper.selectByPrimaryKey at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235) ~[mybatis-3.5.9.jar:3.5.9]-软件老王

这个错误就是没有找到xml文件,造成该错误的有以下情况:

(1)springboot初始化项目,默认是没有打包xml文件到target下面的,需要在build中指定下;

<build> <resources> <resource> <directory>src/main/resources/</directory> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>

(2)mybatis生成xml没有跟接口类在同一目录下,需要配置mybatis:
mapper-locations: classpath:mapper/*.xml,否则也会报找不到执行的statement。

2.4 简单情况

通过mybatis-generator生成的接口实体类和xml默认在同一目录下,这个时候只需要在启动类上配置:

@SpringBootApplication @MapperScan("com.laowang.springtest.db") public class SpringtestApplication { public static void main(String[] args) { SpringApplication.run(SpringtestApplication.class, args); } }

@Mapper标签、mybatis.type-aliases-package、mybatis.mapper-locations都可以不用配置;


更多信息请关注公众号:「软件老王」,关注不迷路,软件老王和他的IT朋友们,分享一些他们的技术见解和生活故事。

更多信息请关注公众号:「软件老王」,关注不迷路,IT技术与相关干货分享,回复关键字获取对应干货,本文版权归作者软件老王所有,转载需注明作者、超链接,否则保留追究法律责任的权利。