GithubHelp home page GithubHelp logo

mybatis-spring-boot's Introduction

Spring Boot 集成 MyBatis, 分页插件 PageHelper, 通用 Mapper

新书《MyBatis 从入门到精通》

MyBatis 从入门到精通

预售地址:京东当当亚马逊

CSDN博客:http://blog.csdn.net/isea533/article/details/73555400

GitHub项目:https://github.com/mybatis-book/book

项目依赖

<!--mybatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.1</version>
</dependency>
<!--mapper-->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>1.2.4</version>
</dependency>
<!--pagehelper-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.3</version>
</dependency>

Spring DevTools 配置

感谢emf1002提供的解决方案。

在使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A。

同一个类如果使用了不同的类加载器,就会产生这样的错误,所以解决方案就是让通用Mapper和实体类使用相同的类加载器即可。

DevTools 默认会对 IDE 中引入的所有项目使用 restart 类加载器,对于引入的 jar 包使用 base 类加载器,因此只要保证通用Mapper的jar包使用 restart 类加载器即可。

src/main/resources 中创建 META-INF 目录,在此目录下添加 spring-devtools.properties 配置,内容如下:

restart.include.mapper=/mapper-[\\w-\\.]+jar
restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar

使用这个配置后,就会使用 restart 类加载加载 include 进去的 jar 包。

集成 MyBatis Generator

通过 Maven 插件集成的,所以运行插件使用下面的命令:

mvn mybatis-generator:generate

Mybatis Geneator 详解:

http://blog.csdn.net/isea533/article/details/42102297

application.properties 配置

#mybatis
mybatis.type-aliases-package=tk.mybatis.springboot.model
mybatis.mapper-locations=classpath:mapper/*.xml

#mapper
#mappers 多个接口时逗号隔开
mapper.mappers=tk.mybatis.springboot.util.MyMapper
mapper.not-empty=false
mapper.identity=MYSQL

#pagehelper
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql

application.yml 配置

完整配置可以参考 src/main/resources/application-old.yml ,和 MyBatis 相关的部分配置如下:

mybatis:
    type-aliases-package: tk.mybatis.springboot.model
    mapper-locations: classpath:mapper/*.xml

mapper:
    mappers:
        - tk.mybatis.springboot.util.MyMapper
    not-empty: false
    identity: MYSQL

pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true
    params: count=countSql

注意 mapper 配置,因为参数名固定,所以接收参数使用的对象,按照 Spring Boot 配置规则,大写字母都变了带横线的小写字母。针对如 IDENTITY(对应i-d-e-n-t-i-t-y)提供了全小写的 identity 配置,如果 IDE 能自动提示,看自动提示即可。

SSM集成的基础项目

https://github.com/abel533/Mybatis-Spring

MyBatis工具 https://mybatis.io

作者信息

mybatis-spring-boot's People

Contributors

abel533 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mybatis-spring-boot's Issues

日志打印问题

你好,我使用slf4j进行日志打印。
这个是logback-spring.xml中的部分配置


${CONSOLE_LOG_PATTERN}
utf8

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <encoder>
        <pattern>${FILE_LOG_PATTERN}</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>40</maxHistory>
    </rollingPolicy>
</appender>

这个是application.yum中的配置
logging:
level: INFO

我好奇的是,在编译器中可以正常打印日志,但是将项目移到服务器上时,日志文件中没有任何一条日志记录,这个是和整合的项目有管吗。(我用纯的mybatis+spring boot时,这么配置日志文件是有记录的)

sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class

遇到了奇怪的报错:

Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
at tk.mybatis.mapper.mapperhelper.MapperHelper.setSqlSource(MapperHelper.java:247)
at tk.mybatis.mapper.mapperhelper.MapperHelper.processConfiguration(MapperHelper.java:310)
at tk.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:54)
at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
... 52 more
Caused by: java.lang.RuntimeException: java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
at tk.mybatis.mapper.mapperhelper.MapperTemplate.setSqlSource(MapperTemplate.java:246)
at tk.mybatis.mapper.mapperhelper.MapperHelper.setSqlSource(MapperHelper.java:244)
... 57 more
Caused by: java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
at tk.mybatis.mapper.mapperhelper.MapperTemplate.getEntityClass(MapperTemplate.java:278)
at tk.mybatis.mapper.provider.base.BaseUpdateProvider.updateByPrimaryKeySelective(BaseUpdateProvider.java:64)
at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at tk.mybatis.mapper.mapperhelper.MapperTemplate.setSqlSource(MapperTemplate.java:234)
... 58 more

使用该项目代码集成自定义的mybatis typeHandler时报错 IllegalStateException: No typehandler found for property XXX

问题重现步骤:

使用原项目代码作如下修改:
1、UserInfo类中增加如下成员变量:

private LocalDateTime createTime;

2、项目引入typeHandlers(https://github.com/javaplugs/mybatis-types)
1)pom.xml中添加依赖:

        <dependency>
            <groupId>com.github.javaplugs</groupId>
            <artifactId>mybatis-types</artifactId>
            <version>0.3</version>
        </dependency>

    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>

2)MyBatisConfig类中sqlSessionFactoryBean()方法增加:

bean.setTypeHandlersPackage("com.github.javaplugs.mybatis");

3、打包运行

mvn clean package -DskipTests=true
java -jar target/mybatis-spring-boot-1.0.0-SNAPSHOT.jar

即报错: IllegalStateException: No typehandler found for property createTime

补充说明

若直接将依赖的mybatis-types中的代码LocalDateTimeTypeHandler拷贝到项目本地的代码路径下,比如util包,再修改MyBatisConfig中的配置:

bean.setTypeHandlersPackage("tk.mybatis.springboot.util");

重新打包运行

mvn clean package -DskipTests=true
java -jar target/mybatis-spring-boot-1.0.0-SNAPSHOT.jar

则不再出现该错误

spirng boot example查询异常

只有example查询报错,java.lang.RuntimeException: 无法获取实体类cxxx对应的表名!问题滞留了好几天,调试的时候getEntityTable方法中的entityTableMap,的values是空,可能是什么原因导致的?

实体类代码只有一个@Id注解字段,但仍然提示实体类只能有一个@Id注解字段

以下是我的实体类:

public class UmUser  {
    private String nickName;
    private int age;
    private String sex;
    private String phone;
    private String email;

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "create_time", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date createTime = new Date();


    @Column(name = "update_time")
    @Temporal(TemporalType.TIMESTAMP)
    private Date updateTime = new Date();

    @Column(name = "create_by")
    private String createBy;
    @Column(name = "update_by")
    private String updateBy;
 ...
}

我自定义的Mapper

public interface CustomBaseMapper<T> extends IdsMapper<T> {
}

在IdsProvider中打断点后发现,所有属性都被当做了primary key. 就是下面这句

Set<EntityColumn> columnList = EntityHelper.getPKColumns(entityClass);

请问这个问题怎么解决?

本demo分页失效的解决办法

不知作者写的默认配置如何使用,我对比xml的配置,发现有些不同,
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("offsetAsPageNum", "true");
properties.setProperty("rowBoundsWithCount", "true");
properties.setProperty("pageSizeZero", "true");
properties.setProperty("reasonable", "false");
properties.setProperty("params", "pageNum=pageHelperStart;pageSize=pageHelperRows;");
properties.setProperty("supportMethodsArguments", "false");
properties.setProperty("returnPageInfo", "none");
pageHelper.setProperties(properties);

java.lang.ClassCastException: tk.mybatis.springboot.model.PayProductCategory cannot be cast to tk.mybatis.springboot.model.PayProductCategory

PayProductCategory payProductCategorySelect = new PayProductCategory();
payProductCategorySelect.setState((byte)ShopConstants.State.LIVE.ordinal());
List payProductCategoryList = payProductCategoryMapper.select(payProductCategorySelect);
for(PayProductCategory payProductCategory : payProductCategoryList){
System.out.println(payProductCategory);
}

@table(name = "pay_product_category")
public class PayProductCategory {
@id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

/**
 * 父目录.Id=0表一级目录
 */
@Column(name = "parent_id")
private Long parentId;

/**
 * 类目名
 */
private String name;

/**
 * 1 正常 0删除
 */
private Byte state;

/**
 * 同级目录排序
 */
@Column(name = "sort_order")
private Byte sortOrder;

/**
 * 1代表是父目录 0不是
 */
@Column(name = "is_parent")
private Byte isParent;

@Column(name = "sys_create_time")
private Date sysCreateTime;

@Column(name = "sys_update_time")
private Date sysUpdateTime;

}

我就做着这些操作,为什么会出现类转换异常呢

ava.lang.ClassCastException: tk.mybatis.springboot.model.PayProductCategory cannot be cast to tk.mybatis.springboot.model.PayProductCategory
at tk.mybatis.springboot.service.front.impl.PayProductServiceImpl.selectAllPayproduct(PayProductServiceImpl.java:31)

几个问题

MyBatisMapperScannerConfig里的bean可以放在MyBatisConfig里吗?我尝试了报错。
我这边两个类里都打印了几句话,打印的信息看到确实是MapperScannerConfig比MyBatisConfig早执行,关键是basePackage没法读到配置的值,这个加@AutoConfigureAfter也没用,而且加了MapperScannerConfig还比MyBatisConfig 早执行....

@Configuration
public class MapperScannerConfig {
    @Value("${datasource.basePackage:com.tg.ms.mapper}")
    private String basePackage;
    @Bean
    public MapperScannerConfigurer BPMapperScannerConfigurer() {
        System.out.println("mapper--1.----******----"+basePackage+"----*******");
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("com.tg.mapper");
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean");
        return mapperScannerConfigurer;
    }

}

前后端分离

如果前后端分离,前端肯定只传给后台一个页码,这个不知道怎么写,还有可能每页显示的记录数,前端也要传,难道要自己封装一层吗

发现生成的sql与预期的不一样

下面的代码在执行时,发现生成的sql与预期的不一样。预期是
UPDATE car_tt set name=? WHERE id = ?

        CarTtDO carTtDO=new CarTtDO();
        carTtDO.setId(1L);
        carTtDO.setName(null);
        carTtDOMapper.updateByPrimaryKey(carTtDO);
### SQL: UPDATE car_tt   WHERE  id = ?
### Cause: java.sql.SQLException: sql injection violation, syntax error: syntax error, error in :'tt   WHERE  id = ?',expect SET, actual WHERE WHERE : UPDATE car_tt   WHERE  id = ?
; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; sql injection violation, syntax error: syntax error, error in :'tt   WHERE  id = ?',expect SET, actual WHERE WHERE : UPDATE car_tt   WHERE  id = ?; nested exception is java.sql.SQLException: sql injection violation, syntax error: syntax error, error in :'tt   WHERE  id = ?',expect SET, actual WHERE WHERE : UPDATE car_tt   WHERE  id = ?
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
	at com.sun.proxy.$Proxy87.update(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:294)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
	at com.sun.proxy.$Proxy88.updateByPrimaryKeySelective(Unknown Source)
	at com.xiaoyi.app.business.car.biz.CarTtBiz.updateTt(CarTtBiz.java:103)

该项目代码添加 spring boot devtools 时,出现java.lang.ClassCastException问题

问题重现

pom.xml 中添加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>

运行 spring-boot:run
点击 修改 操作,如访问http://localhost:8181/countries/view/1,出现java.lang.ClassCastException: tk.mybatis.springboot.model.Country cannot be cast to tk.mybatis.springboot.model.Country

请教:怎么把 生成的 uuid 通过引用传递回去

研究您的代码的时候发现生成的 uuid 无法回传 想自己改一改结果实现不了

    <bind name="idDaDa_bind" value='@java.util.UUID@randomUUID().toString().replace("-", "")'/>
  
    <selectKey resultType="java.lang.String" order="AFTER" keyProperty="idDaDa">
      select #{idDaDa_bind,javaType=java.lang.String}
    </selectKey>
    
    INSERT INTO hehe5
    <trim prefix="(" suffix=")" suffixOverrides=",">id_da_da,hehe1,hehe2,hehe3,hehe4,hehe5,hehe6,</trim>
    <trim prefix="VALUES(" suffix=")" suffixOverrides=",">
      <if test="idDaDa != null">#{idDaDa,javaType=java.lang.String},</if>
      <if test="idDaDa == null">#{idDaDa_bind,javaType=java.lang.String},</if>
      <if test="hehe1 != null">#{hehe1,javaType=java.lang.String},</if>
      <if test="hehe1 == null">#{hehe1,javaType=java.lang.String},</if>
      <if test="hehe2 != null">#{hehe2,javaType=java.lang.String},</if>
      <if test="hehe2 == null">#{hehe2,javaType=java.lang.String},</if>
      <if test="hehe3 != null">#{hehe3,javaType=java.lang.String},</if>
      <if test="hehe3 == null">#{hehe3,javaType=java.lang.String},</if>
      <if test="hehe4 != null">#{hehe4,javaType=java.lang.String},</if>
      <if test="hehe4 == null">#{hehe4,javaType=java.lang.String},</if>
      <if test="hehe5 != null">#{hehe5,javaType=java.lang.String},</if>
      <if test="hehe5 == null">#{hehe5,javaType=java.lang.String},</if>
      <if test="hehe6 != null">#{hehe6,javaType=java.lang.String},</if>
      <if test="hehe6 == null">#{hehe6,javaType=java.lang.String},</if>
    </trim>

问题:事务如何使用?

看到config里面配置了事务,请问这个如何使用?在service层类上加上@transactional注解好像不起作用,打印的SQL语句提示事务不被spring管理,把@transactional注解移到mapper层,提示事务被spring管理。请问如何让事务作用在service层?

stackoverflow上看到相似问题,也没有得到解答。

多mapper注入时,该项目会报BeanCurrentlyInCreationException,Is there an unresolvable circular reference?警告

hi,abel533,我下载了本demo项目,在使用单个mapper时没有报这个警告错误,但是当把mapper增加为2个以上时,就会报该异常信息,不知具体的原因。

跟踪代码,看到会优先执行MyBatisMapperScannerConfig扫描,虽然设置了AutoConfigureAfter,MyBatisMapperScannerConfig修改definition.setBeanClass(MapperFactoryBean.class)后,spring在做dataSourceInitializerPostProcessor处理时,会抛出该异常,不知道哪里出了问题。而且会重复出现2,3边同样的WARN,百分百重现。

WARN 43180 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Bean creation exception on FactoryBean type check: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'subCountryMapper' defined in file [/tt/fsm/target/classes/com/lmtest/fsm/mapper/SubCountryMapper.class]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'sqlSessionFactory': Requested bean is currently in creation: Is there an unresolvable circular reference?

无法获取实体类,对应的表名

Caused by: java.lang.RuntimeException: 无法获取实体类cn.dceast.model.User对应的表名!
at tk.mybatis.mapper.mapperhelper.EntityHelper.getEntityTable(EntityHelper.java:65) ~[mapper-3.3.9.jar:na]
at tk.mybatis.mapper.entity.Example.(Example.java:93) ~[mapper-3.3.9.jar:na]
at tk.mybatis.mapper.entity.Example.(Example.java:78) ~[mapper-3.3.9.jar:na]
at tk.mybatis.mapper.entity.Example.(Example.java:68) ~[mapper-3.3.9.jar:na]
at cn.dceast.config.security.SecurityConfig$1.loadUserByUsername(SecurityConfig.java:63) ~[classes/:na]
at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:114) ~[spring-security-core-4.1.4.RELEASE.jar:4.1.4.RELEASE]
... 45 common frames omitted

//出错行
Example example = new Example(User.class);

//实体
@DaTa
public class User extends BaseEntity implements UserDetails {

private String username;
private String password;
private String role;

insertList抛异常

非常感谢做了这么一个强的工具!

集成到Spring Boot中非常顺利,绝大部分功能都正常,目前遇到一个问题,当批量插入的时候,调insertList方法,会抛出异常:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.SpecialProvider.dynamicSQL). Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.SpecialProvider
Caused by: java.lang.InstantiationException: tk.mybatis.mapper.provider.SpecialProvider
at java.lang.Class.newInstance(Class.java:427) ~[na:1.8.0_92]
at org.apache.ibatis.builder.annotation.ProviderSqlSource.createSqlSource(ProviderSqlSource.java:85) ~[mybatis-3.4.0.jar:3.4.0]
... 82 common frames omitted
Caused by: java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.SpecialProvider.()
at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_92]
at java.lang.Class.newInstance(Class.java:412) ~[na:1.8.0_92]
... 83 common frames omitted

集成配置如下:
Pom文件

tk.mybatis
mapper-spring-boot-starter
1.1.0



com.github.pagehelper
pagehelper-spring-boot-starter
1.1.0

醒置文件:
mapper:
mappers:
- com.ld.utils.LordarMapper
not-empty: false
identity: MYSQL

类定义:
public interface LordarMapper extends Mapper, MySqlMapper {

}

多数据源分页不可用

项目用的springboot

 <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.1.0</version>
        </dependency>

只有主数据库可以使用到分页插件,其他数据源不进行分页。

@AutoConfigureAfter(MyBatisConfig.class)无作用

AutoConfigureAfter的意思是应该在MyBatisConfig后运行,实际debug时没有效果,示例项目中没有效果.在自己的项目中,还会报错

Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'sqlSessionFactory': Requested bean is currently in creation: Is there an unresolvable circular reference?

配置多数据源时,mapper调用方法报NoSuchMethodException

我利用tk.mybatis进行多数据源配置时,一个Mapper可以正常调用动态SQL,而另外一个就一直报NoSuchMethodException。我进行了部分源码跟踪:如BaseInsertProvider,只有一个数据库的mapper被获取,而另外一个数据源的Mapper却没有显示。不知道这个是什么问题

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

我按你的方法及框架版本搭架环境,运行时总是显示错误:
Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): org.dtjys.mapper.UserMapper.getById
at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:196)
at org.apache.ibatis.binding.MapperMethod.(MapperMethod.java:44)
at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
at com.sun.proxy.$Proxy36.getById(Unknown Source)
at org.dtjys.service.impl.UserService.show(UserService.java:17)
at org.dtjys.Application.main(Application.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
是什么原因?
使用mybatis-spring-boot-starter方式也出现了同样的问题

在@Configuration中使用Mapper会出现无法初始化的问题

异常信息如下:

Caused by: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.base.BaseSelectProvider.dynamicSQL).  Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseSelectProvider
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77) ~[mybatis-spring-1.3.1.jar:1.3.1]
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446) ~[mybatis-spring-1.3.1.jar:1.3.1]
	at com.sun.proxy.$Proxy81.selectList(Unknown Source) ~[?:?]
	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230) ~[mybatis-spring-1.3.1.jar:1.3.1]
	at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59) ~[mybatis-3.4.4.jar:3.4.4]
	at com.sun.proxy.$Proxy82.selectAll(Unknown Source) ~[?:?]
	at com.xxx.xxx.core.base.impl.BaseServiceImpl.findAll(BaseServiceImpl.java:86) ~[classes/:?]
	at com.xxx.xxx.shiro.ShiroConfiguration.shiroFilterFactoryBean(ShiroConfiguration.java:81) ~[classes/:?]
	at com.xxx.xxx.shiro.ShiroConfiguration$$EnhancerBySpringCGLIB$$8b03f734.CGLIB$shiroFilterFactoryBean$1(<generated>) ~[classes/:?]
	at com.xxx.xxx.shiro.ShiroConfiguration$$EnhancerBySpringCGLIB$$8b03f734$$FastClassBySpringCGLIB$$6e96921a.invoke(<generated>) ~[classes/:?]
	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) ~[spring-context-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at com.xxx.xxx.shiro.ShiroConfiguration$$EnhancerBySpringCGLIB$$8b03f734.shiroFilterFactoryBean(<generated>) ~[classes/:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_111]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_111]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_111]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_111]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:923) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:804) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:558) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:432) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:395) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:220) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1260) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	... 24 more
Caused by: org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.base.BaseSelectProvider.dynamicSQL).  Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseSelectProvider
	at org.apache.ibatis.builder.annotation.ProviderSqlSource.createSqlSource(ProviderSqlSource.java:103) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.builder.annotation.ProviderSqlSource.getBoundSql(ProviderSqlSource.java:73) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:292) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:81) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) ~[mybatis-3.4.4.jar:3.4.4]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_111]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_111]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_111]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_111]
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433) ~[mybatis-spring-1.3.1.jar:1.3.1]
	at com.sun.proxy.$Proxy81.selectList(Unknown Source) ~[?:?]
	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230) ~[mybatis-spring-1.3.1.jar:1.3.1]
	at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59) ~[mybatis-3.4.4.jar:3.4.4]
	at com.sun.proxy.$Proxy82.selectAll(Unknown Source) ~[?:?]
	at com.xxx.xxx.core.base.impl.BaseServiceImpl.findAll(BaseServiceImpl.java:86) ~[classes/:?]
	at com.xxx.xxx.shiro.ShiroConfiguration.shiroFilterFactoryBean(ShiroConfiguration.java:81) ~[classes/:?]
	at com.xxx.xxx.shiro.ShiroConfiguration$$EnhancerBySpringCGLIB$$8b03f734.CGLIB$shiroFilterFactoryBean$1(<generated>) ~[classes/:?]
	at com.xxx.xxx.shiro.ShiroConfiguration$$EnhancerBySpringCGLIB$$8b03f734$$FastClassBySpringCGLIB$$6e96921a.invoke(<generated>) ~[classes/:?]
	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) ~[spring-context-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at com.xxx.xxx.shiro.ShiroConfiguration$$EnhancerBySpringCGLIB$$8b03f734.shiroFilterFactoryBean(<generated>) ~[classes/:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_111]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_111]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_111]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_111]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:923) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:804) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:558) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:432) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:395) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:220) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1260) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	... 24 more
Caused by: java.lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseSelectProvider
	at java.lang.Class.newInstance(Class.java:427) ~[?:1.8.0_111]
	at org.apache.ibatis.builder.annotation.ProviderSqlSource.createSqlSource(ProviderSqlSource.java:85) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.builder.annotation.ProviderSqlSource.getBoundSql(ProviderSqlSource.java:73) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:292) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:81) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) ~[mybatis-3.4.4.jar:3.4.4]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_111]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_111]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_111]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_111]
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433) ~[mybatis-spring-1.3.1.jar:1.3.1]
	at com.sun.proxy.$Proxy81.selectList(Unknown Source) ~[?:?]
	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230) ~[mybatis-spring-1.3.1.jar:1.3.1]
	at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59) ~[mybatis-3.4.4.jar:3.4.4]
	at com.sun.proxy.$Proxy82.selectAll(Unknown Source) ~[?:?]
	at com.xxx.xxx.core.base.impl.BaseServiceImpl.findAll(BaseServiceImpl.java:86) ~[classes/:?]
	at com.xxx.xxx.shiro.ShiroConfiguration.shiroFilterFactoryBean(ShiroConfiguration.java:81) ~[classes/:?]
	at com.xxx.xxx.shiro.ShiroConfiguration$$EnhancerBySpringCGLIB$$8b03f734.CGLIB$shiroFilterFactoryBean$1(<generated>) ~[classes/:?]
	at com.xxx.xxx.shiro.ShiroConfiguration$$EnhancerBySpringCGLIB$$8b03f734$$FastClassBySpringCGLIB$$6e96921a.invoke(<generated>) ~[classes/:?]
	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) ~[spring-context-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at com.xxx.xxx.shiro.ShiroConfiguration$$EnhancerBySpringCGLIB$$8b03f734.shiroFilterFactoryBean(<generated>) ~[classes/:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_111]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_111]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_111]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_111]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:923) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:804) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:558) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:432) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:395) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:220) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1260) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	... 24 more
Caused by: java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider.<init>()
	at java.lang.Class.getConstructor0(Class.java:3082) ~[?:1.8.0_111]
	at java.lang.Class.newInstance(Class.java:412) ~[?:1.8.0_111]
	at org.apache.ibatis.builder.annotation.ProviderSqlSource.createSqlSource(ProviderSqlSource.java:85) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.builder.annotation.ProviderSqlSource.getBoundSql(ProviderSqlSource.java:73) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:292) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:81) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) ~[mybatis-3.4.4.jar:3.4.4]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_111]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_111]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_111]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_111]
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433) ~[mybatis-spring-1.3.1.jar:1.3.1]
	at com.sun.proxy.$Proxy81.selectList(Unknown Source) ~[?:?]
	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230) ~[mybatis-spring-1.3.1.jar:1.3.1]
	at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75) ~[mybatis-3.4.4.jar:3.4.4]
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59) ~[mybatis-3.4.4.jar:3.4.4]
	at com.sun.proxy.$Proxy82.selectAll(Unknown Source) ~[?:?]
	at com.xxx.xxx.core.base.impl.BaseServiceImpl.findAll(BaseServiceImpl.java:86) ~[classes/:?]
	at com.xxx.xxx.shiro.ShiroConfiguration.shiroFilterFactoryBean(ShiroConfiguration.java:81) ~[classes/:?]
	at com.xxx.xxx.shiro.ShiroConfiguration$$EnhancerBySpringCGLIB$$8b03f734.CGLIB$shiroFilterFactoryBean$1(<generated>) ~[classes/:?]
	at com.xxx.xxx.shiro.ShiroConfiguration$$EnhancerBySpringCGLIB$$8b03f734$$FastClassBySpringCGLIB$$6e96921a.invoke(<generated>) ~[classes/:?]
	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) ~[spring-context-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at com.xxx.xxx.shiro.ShiroConfiguration$$EnhancerBySpringCGLIB$$8b03f734.shiroFilterFactoryBean(<generated>) ~[classes/:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_111]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_111]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_111]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_111]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:923) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:804) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:558) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:432) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:395) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:220) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1260) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
	... 24 more

不在@configuration使用,而在项目启动完成后通过Service调用一切正常。
请问这个是有什么原因引起的?

如何重建一个通用方法

我安照步骤创建了 mapper接口和Provider 但是报错,说是Provider这个类不能实例化,能否提供一个例子

spring cloud中如何使用?

spring cloud中依赖的spring boot是1.3.5.RELEASE版本的,按照现在的配置运行就会报错。
比如主类Application.java中加上注解@MapperScan(xxxxx)就会报这个错
java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation.MapperScan.factoryBean()
,如果不加@MapperScan注解,而是在mapper接口上面加上@Mapper注解的话,又扫描不到。

请问该如何解决?

大神帮忙看下-----只差把这个示例代码 全部copy过去了。

错误:Caused by: java.lang.InstantiationException: tk.mybatis.mapper.provider.SpecialProvider
at java.lang.Class.newInstance(Class.java:427)
at org.apache.ibatis.builder.annotation.ProviderSqlSource.createSqlSource(ProviderSqlSource.java:85)
... 136 common frames omitted
Caused by: java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.SpecialProvider.()
at java.lang.Class.getConstructor0(Class.java:3082)

相关代码已上传到github:https://github.com/helloworldtang/SpringBootCookbook
rest接口:/tx/post
所在class:
com.tangcheng.rest.TxController

提示版本不存在

Error:Cause: inconsistent module metadata found. Descriptor: tk.mybatis:mapper-spring-boot-starter:1.0.0 Errors: bad version: expected='1.1.0' found='1.0.0'
补充一下,我用的是gradle

使用h2内存模式,中文乱码

我采用您的例子,将数据库撤换成h2后,中文乱码。结果:
[ { "id": 1, "page": 1, "rows": 10, "name": "鐭冲搴�", "state": "娌冲寳" }, { "id": 2, "page": 1, "rows": 10, "name": "閭兏", "state": "娌冲寳" } ]

使用mysql正常,我修改的地方有:
MyBatisMapperScannerConfig:
properties.setProperty("IDENTITY", "h2");

配置文件:
url: "jdbc:h2:mem:test" username: "sa" password: "" driver-class-name: org.h2.Driver schema: database/import.sql

其中sql为:
DROP TABLE IF EXISTS city; CREATE TABLE city( ID INT PRIMARY KEY, NAME VARCHAR(20), state VARCHAR(20) ); DROP TABLE IF EXISTScountry; CREATE TABLEcountry( Idint(11) NOT NULL AUTO_INCREMENT COMMENT '主键', countrynamevarchar(255) DEFAULT NULL COMMENT '名称', countrycodevarchar(255) DEFAULT NULL COMMENT '代码', PRIMARY KEY (Id`)
);

INSERT INTO city VALUES ('1', '石家庄', '河北');
INSERT INTO city VALUES ('2', '邯郸', '河北');`

在项目运行过程中,我采用idea的控制台查询中文正常。

不知道为什么java查询出的却是乱码,debug发现在mapper.selectAll的时候出来就是乱码了。

mapper.xml里面既然没有任何实现,为什么还要这个呢

Mapper需要配置mybatis的mapper路径,如果不配置或配置了但是对应路径下没有xml文件则报错,能不能实现可以不配置或则配置了不去限制这个必须有xml文件,因为通用的mapper已经实现了无xml即可对单表的crud操作了

No operations allowed after statement closed.

这种报错在直接使用java.sql.Statement比较好处理。
但在spring boot 使用starter后需要怎么处理呢?

### Error updating database.  Cause: java.sql.SQLException: No operations allowed after statement closed.
### SQL: INSERT INTO car_tt  ( id,insertTime,tid) VALUES( ?,?,?)
### Cause: java.sql.SQLException: No operations allowed after statement closed.
; SQL []; No operations allowed after statement closed.; nested exception is java.sql.SQLException: No operations allowed after statement closed.
org.springframework.dao.TransientDataAccessResourceException: 
### Error updating database.  Cause: java.sql.SQLException: No operations allowed after statement closed.
### SQL: INSERT INTO car_tt  ( id,insertTime,tid) VALUES( ?,?,?)
### Cause: java.sql.SQLException: No operations allowed after statement closed.
; SQL []; No operations allowed after statement closed.; nested exception is java.sql.SQLException: No operations allowed after statement closed.
        at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:108)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
        at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
        at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
        at com.sun.proxy.$Proxy79.insert(Unknown Source)
        at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:278)
        at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:57)
        at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
        at com.sun.proxy.$Proxy85.insert(Unknown Source)

how can i integration spring boot mybatis with pagehelper

when i use pagehelper and annotation Sqlprovider

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'providerTakesParameterObject' in 'class org.apache.ibatis.builder.annotation.ProviderSqlSource'

i find field providerTakesParameterObject in class PageProviderSqlSource ,but not in use

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.