Code Monkey home page Code Monkey logo

sunchenbin / a.ctable-frame Goto Github PK

View Code? Open in Web Editor NEW
124.0 124.0 56.0 892 KB

A.CTable是一个基于Spring和Mybatis的Maven项目,actable 支持springboot,增强了Mybatis的功能,通过配置model注解的方式来创建表,修改表结构,目前仅支持Mysql ,码云上有各个发布版本的记录:https://gitee.com/sunchenbin/mybatis-enhance/releases

Home Page: https://blog.csdn.net/sun5769675/article/details/74779640

License: Apache License 2.0

Java 100.00%

a.ctable-frame's People

Contributors

bingyun123 avatar chengyangyang avatar guoyzh avatar snippet0809 avatar sunchenbin avatar yaoyucheng 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

a.ctable-frame's Issues

报错not found BaseCRUDMapper

配置后报错

`Description:

Field baseCRUDMapper in com.gitee.sunchenbin.mybatis.actable.manager.common.BaseCRUDManagerImpl required a bean of type 'com.gitee.sunchenbin.mybatis.actable.dao.common.BaseCRUDMapper' that could not be found.

The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)

Action:

Consider defining a bean of type 'com.gitee.sunchenbin.mybatis.actable.dao.common.BaseCRUDMapper' in your configuration.

`

请问该问题怎么解决?

Mybatis-Plus 建表可以,但是使用报错

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.example.demo.mapper.UserMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup="", name="", description="", authenticationType=CONTAINER, type=java.lang.Object.class, mappedName="")}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1717)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1273)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:521)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:497)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:650)
	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:318)
	... 65 more
application.properties

mybatis-plus.mapper-locations=classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml
#控制台打印
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

# actable的配置信息
actable.table.auto=update
actable.model.pack=com.example.demo.entity
actable.database.type=mysql



pom.xml

 <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
 </dependency>
<dependency>
            <groupId>com.gitee.sunchenbin.mybatis.actable</groupId>
            <artifactId>mybatis-enhance-actable</artifactId>
            <version>1.5.0.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-annotation</artifactId>
                </exclusion>
          </exclusions>
 </dependency>
@SpringBootApplication
@MapperScan("com.gitee.sunchenbin.mybatis.actable.dao.*")
@ComponentScan(basePackages = {"com.gitee.sunchenbin.mybatis.actable.manager.*"})
public class MpTableApplication {

    public static void main(String[] args) {
        SpringApplication.run(MpTableApplication.class, args);
    }

}
Mapper类
public interface UserMapper extends BaseMapper<User> {
}

public interface IUserService extends IService<User> {
}

@Service
@Transactional(rollbackFor = Exception.class)
public class IUserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

    @Resource
    private UserMapper userMapper;
}

Service层使用,报同样的错

Springboot + Mybatis-plus + 配置连接多个数据库 + mybatis-enhance-actable 自动建表 启动异常

Springboot + Mybatis-plus + 配置连接多个数据库 + mybatis-enhance-actable 自动建表 启动异常

Springboot + Mybatis-plus + 配置连接多个数据库 + mybatis-enhance-actable 自动建表

异常如下:
Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.gitee.sunchenbin.mybatis.actable.dao.system.CreateMysqlTablesMapper.findTableCountByTableName

如果不使用 mybatis-enhance-actable 自动建表 ,项目启动正常,操作多数据库正常

可以验证一下这个问题
`2021-09-28 12:04:18.210 ERROR 9068 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'startUpHandlerImpl': Invocation of init method failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.gitee.sunchenbin.mybatis.actable.dao.system.CreateMysqlTablesMapper.findTableCountByTableName
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:138) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:424) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1700) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:581) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at com.seawaterbt.ssm.SsmApplication.main(SsmApplication.java:14) [classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.0.3.RELEASE.jar:2.0.3.RELEASE]
Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.gitee.sunchenbin.mybatis.actable.dao.system.CreateMysqlTablesMapper.findTableCountByTableName
at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:225) ~[mybatis-3.4.5.jar:3.4.5]
at org.apache.ibatis.binding.MapperMethod.(MapperMethod.java:48) ~[mybatis-3.4.5.jar:3.4.5]
at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) ~[mybatis-3.4.5.jar:3.4.5]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) ~[mybatis-3.4.5.jar:3.4.5]
at com.sun.proxy.$Proxy100.findTableCountByTableName(Unknown Source) ~[na:na]
at com.gitee.sunchenbin.mybatis.actable.manager.system.SysMysqlCreateTableManagerImpl.buildTableMapConstruct(SysMysqlCreateTableManagerImpl.java:158) ~[mybatis-enhance-actable-1.1.1.RELEASE.jar:na]
at com.gitee.sunchenbin.mybatis.actable.manager.system.SysMysqlCreateTableManagerImpl.createMysqlTable(SysMysqlCreateTableManagerImpl.java:99) ~[mybatis-enhance-actable-1.1.1.RELEASE.jar:na]
at com.gitee.sunchenbin.mybatis.actable.manager.system.SysMysqlCreateTableManagerImpl$$FastClassBySpringCGLIB$$ac2449f9.invoke() ~[mybatis-enhance-actable-1.1.1.RELEASE.jar:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746) ~[spring-aop-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294) ~[spring-tx-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98) ~[spring-tx-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185) ~[spring-aop-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) ~[spring-aop-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at com.gitee.sunchenbin.mybatis.actable.manager.system.SysMysqlCreateTableManagerImpl$$EnhancerBySpringCGLIB$$faa9f1ed.createMysqlTable() ~[mybatis-enhance-actable-1.1.1.RELEASE.jar:na]
at com.gitee.sunchenbin.mybatis.actable.manager.handler.StartUpHandlerImpl.startHandler(StartUpHandlerImpl.java:57) ~[mybatis-enhance-actable-1.1.1.RELEASE.jar:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:365) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:308) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:135) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
... 23 common frames omitted
`

关于毫秒级或微秒级时间戳(timestamp)长度的问题

我的项目中需要将时间戳保留到至少毫秒级别,这需要表字段设置为 timestamp 类型,长度设为3,默认值设为 CURRENT_TIMESTAMP(3)。而 com.gitee.sunchenbin.mybatis.actable.constants.MySqlTypeConstant 这个枚举下,定义了 TIMESTAMP 的 lengthCount 是 0,这导致在表初始化和表结构变更时,无法将 timestamp 的字段赋长度。

关键代码在 com.gitee.sunchenbin.mybatis.actable.manager.system.SysMysqlCreateTableManagerImpl#getAllFields 方法的第594行左右:

param.setFileTypeLength(mySqlTypeAndLength.getLengthCount());
if (mySqlTypeAndLength.getLengthCount() == 1) {
param.setFieldLength(mySqlTypeAndLength.getLength());
} else if (mySqlTypeAndLength.getLengthCount() == 2) {
param.setFieldLength(mySqlTypeAndLength.getLength());
param.setFieldDecimalLength(mySqlTypeAndLength.getDecimalLength());
}

我的解决办法比较粗糙,是将该枚举的源代码拷贝至项目下,将 TIMESTAMP 的 lengthCount 重写为 1,并赋默认值为 3,利用 类加载的双亲委派特性 覆盖A.CTable-Frame包内的枚举。但该办法仅适用于我的项目,还期望作者能考虑一下兼容timestamp类型的长度。

@TableField注解能否忽略?

如题
老项目里都没写@TableField注解,自动生成表的时候忽略了,能否增加配置来默认为表字段呢?

springBoot Mybaits-plus 配置连接多数据库会报错 Invalid bound statement (not found): com.gitee.sunchenbin.mybatis.actable.dao.system.CreateMysqlTablesMapper.findTableCountByTableName

springBoot Mybaits-plus 配置连接多数据库会报错 Invalid bound statement (not found): com.gitee.sunchenbin.mybatis.actable.dao.system.CreateMysqlTablesMapper.findTableCountByTableName

当注释掉

com.gitee.sunchenbin.mybatis.actable
mybatis-enhance-actable
1.1.1.RELEASE

以及该依赖相关的引入的类,再启动项目,报错解除,项目启动正常
Springboot 通过 Mybaits-plus 访问多数据库正常

可以做个demo验证一下这个问题是否存在?盼复,谢谢!!

Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.gitee.sunchenbin.mybatis.actable.dao.system.CreateMysqlTablesMapper.findTableCountByTableName at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235) ~[mybatis-3.5.3.jar:3.5.3] at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.<init>(MybatisMapperMethod.java:50) ~[mybatis-plus-core-3.3.1.jar:3.3.1] at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedMapperMethod$0(MybatisMapperProxy.java:101) ~[mybatis-plus-core-3.3.1.jar:3.3.1] at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) ~[na:1.8.0_181] at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedMapperMethod(MybatisMapperProxy.java:100) ~[mybatis-plus-core-3.3.1.jar:3.3.1] at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:95) ~[mybatis-plus-core-3.3.1.jar:3.3.1] at com.sun.proxy.$Proxy109.findTableCountByTableName(Unknown Source) ~[na:na] at com.gitee.sunchenbin.mybatis.actable.manager.system.SysMysqlCreateTableManagerImpl.buildTableMapConstruct(SysMysqlCreateTableManagerImpl.java:158) ~[mybatis-enhance-actable-1.1.1.RELEASE.jar:na] at com.gitee.sunchenbin.mybatis.actable.manager.system.SysMysqlCreateTableManagerImpl.createMysqlTable(SysMysqlCreateTableManagerImpl.java:99) ~[mybatis-enhance-actable-1.1.1.RELEASE.jar:na] at com.gitee.sunchenbin.mybatis.actable.manager.system.SysMysqlCreateTableManagerImpl$$FastClassBySpringCGLIB$$ac2449f9.invoke(<generated>) ~[mybatis-enhance-actable-1.1.1.RELEASE.jar:na] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:366) ~[spring-tx-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) ~[spring-tx-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) ~[spring-aop-5.2.6.RELEASE.jar:5.2.6.RELEASE]

使用之后导致接口失效

加上这一句@ComponentScan(basePackages = {"com.gitee.sunchenbin.mybatis.actable.manager.*"})就会导致http接口失效是怎么回事儿呢

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.