Giter Site home page Giter Site logo

baomidou / mybatis-plus Goto Github PK

View Code? Open in Web Editor NEW
15.8K 71.0 4.2K 22.82 MB

An powerful enhanced toolkit of MyBatis for simplify development

Home Page: https://baomidou.com

License: Apache License 2.0

Java 98.02% Kotlin 1.37% FreeMarker 0.60%
mybatis mybatis-plus orm orm-framework toolkit mysql postgresql mybatis-spring

mybatis-plus's Issues

IMetaObjectHandler 公共字段填充只有在tableInfo.getIdType().getKey() >= 2才可用

MybatisDefaultParameterHandler.java
protected static Object populateKeys(TableInfo tableInfo, MappedStatement ms, Object parameterObject) {
if (null != tableInfo && StringUtils.isNotEmpty(tableInfo.getKeyProperty()) && null != tableInfo.getIdType()
&& tableInfo.getIdType().getKey() >= 2) {
}
这里的判断只是给主键设置用的吧,公共字段的填充如CreateDate, 不应该放在这个if块里面。
请苗大侠解答。

ReflectionKit - Boolean 字段支持问题

通过生成器生成出来的 boolean 字段默认使用 java.lang.Boolean,ReflectionKit 方法里只使用了 boolean 基本类型做判断,会导致 NoSuchMethod Exception。

boolean.class = boolean
Boolean.class = class java.lang.Boolean
public static String getMethodCapitalize(Field field, final String str) {
	Class<?> fieldType = field.getType();
	// fix #176
	return StringUtils.concatCapitalize(boolean.class.equals(fieldType) ? "is" : "get", str);
}

另外,生成器怎么设置字段使用基本数据类型?

使用逻辑删除时,SQL拼出两个WHERE,导致查询报错

WHERE is_deleted=0 WHERE (merchant_no = ? AND is_enabled = ?)

使用下面这种情况时,会出现这个问题:

Wrapper wrapper = new EntityWrapper();

wrapper.eq("merchant_no", merchantNo);
wrapper.eq("is_enabled", EnableStatus.ENABLED.getIntValue());

selectOne(wrapper);

关于多数据源分页

我想请问一下配置多数据源之后,怎么配置分页插件?如果一个数据源是Oracle,一个是Mysql。dialectType如何指定?

项目编码

默认是gbk么?
我项目 主体是utf8 看到的注释全是乱码

另外 Table 'tsblog.BLOG' doesn't exist 报类似这样的错误的原因是什么?
我的数据表 是 blog 是映射出问题了 ?
重点是 他还给我了records 虽然没有按照分页来 不是很明白这个 错误

同时开启逻辑删除和乐观锁插件,执行逻辑删除报错

Dao执行 delete(Long)操作时,因为逻辑删除,delete转换未update语句处理没有问题。
update会触发乐观锁插件OptimisticLockerInterceptor处理,执行到如下代码时,parameterObject不再是实体对象,会报错
final Object versionValue = versionField.get(parameterObject);

like有问题

com.baomidou.mybatisplus.mapper.Wrapper 类下的 handerLike 方法 this.formatSql(String.format("%s = {0}", new Object[]{column}; 源码正常,maven引用的jar包有问题

selectPage 方法返回数据超过了PageSize?是我用错了吗?

`
@service
public class ClassServiceImpl implements ClassService {

private ClassBookingRecordMapper classBookingRecordMapper;

@Autowired
public ClassServiceImpl(ClassBookingRecordMapper classBookingRecordMapper) {
    this.classBookingRecordMapper = classBookingRecordMapper;
}

@SuppressWarnings("unchecked")
@Override
public Page<ClassLessonResponse> findLessonByPage(Integer clientSn, ClassLessonPageRequest request, Boolean isFinished) {
    EntityWrapper<ClassBookingRecord> wrapper = new EntityWrapper<>();
    wrapper.where("client_sn = {0}", clientSn).and("is_del = 0");
    List<ClassBookingRecord> classBookingRecords = classBookingRecordMapper.selectPage(new RowBounds(0, 10), wrapper);
    System.out.println(classBookingRecords.size());//19

}
}
`

建议 主键IdType再增加一个 ID_WORKER_STRING的选项,以便支持 String 类型的主键

建议 主键IdType再增加一个 ID_WORKER_STRING的选项,以便支持 String 类型的主键。
经常使用oracle数据库,id_word默认为long型,oracle表的主键只能设为number型。
而在进行查询的时候oracle又默认转成了科学计数法,到view层时看到的值跟实际主键值不一致。

如果oracel主建为String (varchar)型的话,便没有这个问题。

关于二级缓存

如果想要加二级缓存使用第三方的缓存方式该如何操作.比如 enchache 或 redis 都是把相应的 cahce 的实现类放到 mapper 中的 cache 标签里,但在这里该如果操作还是说不支持?

2.0.5 idtype.auto

这个自增有BUG,ID不会自增,且会有一个很大的数字出来,回退到2.0.3正常了

更新 timestamp类型字段报错

mysql timestamp类型的字段 selectByid查询出来后,不修改timestamp字段类型的内容,,直接用updateByid 更新改实体,报错。无提示报错信息

生成错误?

<!-- 通用查询结果列-->
<sql id="Base_Column_List">
	user_id AS userId, user_name AS userName, user_password AS userPassword, create_time AS createTime, update_time AS updateTime, `status`
</sql>

生成出来的就这????
另外 为什么不能指定 WINDOWS上的 生成文件位置啊 我指定 D:\JAVA 结果 controller跑到D了....

注入逻辑缺乏灵活性,是否可以增加接口让用户定制?

在动态注入的时候,会强制要求继承 BaseMapper,否则不会注入。
这样自己定制基础类的时候,就会受到极大的限制。
这个判断,建议放在 sqlInjector 里面,增加 shouldInject 这样的方法,让注入类自己决定是否要注入。

顺便 extractModelClass 也是强依赖 BaseMapper 的,不过至少可以自己 Override。

demo中MybatisPlusConfig配置

建议加上@AutoConfigureAfter(DataSourceAutoConfiguration.class)注解,否则datasource还未创建有可能出现空指针异常。

关于乐观锁插件的问题

  1. 如果@Version注解是在父类上,是不管用的
  2. 如果原来的update语句里已经有 version=? 不会重置version的值(用插件默认生成的代码就有,因为要求有@Version注解,所以update的时候会有 version = )
  3. version版本号增加的时候,逻辑有问题, 0 变成 01 1变成11,(变成字符串相加了)

74 dubbox 2.4.8 集成 mybatis-plus异常:NoSuchBeanDefinitionException: No qualifying bean of type [com.baomidou.mybatisplus.mapper.BaseMapper] found for dependency

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleCategoryServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected com.baomidou.mybatisplus.mapper.BaseMapper com.baomidou.framework.service.impl.ServiceImpl.baseMapper; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.baomidou.mybatisplus.mapper.BaseMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5077)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5591)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1836)
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:497)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:618)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:565)
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:497)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:828)
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:497)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$254(TCPTransport.java:683)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$1/1598280470.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected com.baomidou.mybatisplus.mapper.BaseMapper com.baomidou.framework.service.impl.ServiceImpl.baseMapper; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.baomidou.mybatisplus.mapper.BaseMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)

updateAllColumnById方法

所有的update方法都是更新非null字段,更新全部字段只能再自己写sql了么?
我看到SqlMethod里是定义了updateAllColumnById方法的,为什么BaseMapper最终没有这个方法?

分布式id怎么使用啊

我的全局设置

mybatis-plus:
#  mapper-locations: classpath:/mapper/*Mapper.xml
  typeAliasesPackage: com.xiaoantimes.taichi.entity
  global-config:
    id-type: 2
    field-strategy: 2
    auto-set-db-type: true
    db-column-underline: true
    refresh-mapper: true
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false

实体设置:

@TableName("sys_user")
public class SysUser extends Model<SysUser> {

    private static final long serialVersionUID = 1L;

    /**
     * 用户编号
     */
	@TableId(value="id", type= IdType.ID_WORKER)
	private long id;
    /**

插入的时候,没有生产id ,请问该怎么做?

Issue about code generator for Oralce

在使用oracle数据库的时候遇到一个问题,提示:表 [XXX] 在数据库中不存在!!!
但是表是存在的,只是不在对应用户的schema下,但是该用户可以访问到该表。
代码如下:
dsc.setDriverName("oracle.jdbc.driver.OracleDriver");
dsc.setUsername("aaaa");
dsc.setPassword("aaaa");
dsc.setUrl("jdbc:oracle:thin:@10.11.22.33:1521:xe");
String sql = "select * from alarm";
PreparedStatement pre = dsc.getConn().prepareStatement(sql);// 实例化预编译语句
ResultSet rs = pre.executeQuery();
System.out.println("test: " + rs.getFetchSize());

rs可以获取结果,但是提示alarm表找不到。 aaaa这个schema下面没有alarm表,但是给予了它访问其他schema的权限。

代码生成文档有误

文档地址

  1. AutoGenerator类和com.baomidou.mybatisplus.generator.AutoGenerator重名,建议修改
  2. 默认没有设置IdType直接运行会报错
Exception in thread "main" com.baomidou.mybatisplus.exceptions.MybatisPlusException: ConfigGenerator IdType is null

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.