An powerful enhanced toolkit of MyBatis for simplify development

Overview

Mybatis-Plus-Logo

Born To Simplify Development

maven code style Join the chat at https://gitter.im/baomidou/mybatis-plus

企业版 Mybatis-Mate 高级特性

What is MyBatis-Plus?

MyBatis-Plus is an powerful enhanced toolkit of MyBatis for simplify development. This toolkit provides some efficient, useful, out-of-the-box features for MyBatis, use it can effectively save your development time.

Links

Features

  • Fully compatible with MyBatis
  • Auto configuration on startup
  • Out-of-the-box interfaces for operate database
  • Powerful and flexible where condition wrapper
  • Multiple strategy to generate primary key
  • Lambda-style API
  • Almighty and highly customizable code generator
  • Automatic paging operation
  • SQL Inject defense
  • Support active record
  • Support pluggable custom interface
  • Build-in many useful extensions

Getting started

  • Add MyBatis-Plus dependency

    • Latest Version: Maven Central
    • Maven:
      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>Latest Version</version>
      </dependency>
    • Gradle
      compile group: 'com.baomidou', name: 'mybatis-plus-boot-starter', version: 'Latest Version'
  • Modify mapper file extends BaseMapper interface

    public interface UserMapper extends BaseMapper<User> {
    
    }
  • Use it

    List<User> userList = userMapper.selectList(
            new QueryWrapper<User>()
                    .lambda()
                    .ge(User::getAge, 18)
    );

    MyBatis-Plus will execute the following SQL

    SELECT * FROM user WHERE age >= 18

This showcase is just a small part of MyBatis-Plus features. If you want to learn more, please refer to the documentation.

License

MyBatis-Plus is under the Apache 2.0 license. See the Apache License 2.0 file for details.

Comments
  • 更新时自定义的TypeHandler不生效

    更新时自定义的TypeHandler不生效

    当前使用版本(必须填写清楚,否则不予处理)

    mybatis-pluse 3.0.7.1 mysql5.7

    该问题是怎么引起的?(最新版上已修复的会直接close掉)

    实体类中有一个类的字段属性为List或者Map,对应的数据库字段为JSON,插入时,List和Map有通过自定义的TypeHandler转为JSON字符串,但是更新时没有通过自定义的TypeHandler进行转换

    abstract class JsonTypeHandler<T>(val type: Class<T>): BaseTypeHandler<T>() {
    
        private val objectMapper = ObjectMapper()
    
        override fun getNullableResult(rs: ResultSet, columnName: String?): T? {
            return parse(rs.getString(columnName?: ""))
        }
    
    
        override fun getNullableResult(rs: ResultSet, columnIndex: Int): T? {
            return parse(rs.getString(columnIndex))
        }
    
        override fun getNullableResult(cs: CallableStatement, columnIndex: Int): T? {
            return parse(cs.getString(columnIndex))
        }
    
        override fun setNonNullParameter(ps: PreparedStatement, i: Int, parameter: T, jdbcType: JdbcType?) {
            ps.setString(i, objectMapper.writeValueAsString(parameter))
        }
    
        private fun parse(s: String?): T? {
            return if (StringUtils.isBlank(s)) {
                null
            } else {
                objectMapper.readValue(s, type)
            }
        }
    
    }
    
    class ListTypeHandler: JsonTypeHandler<List<*>>(List::class.java)
    
    class MapTypeHandler: JsonTypeHandler<Map<*, *>>(Map::class.java)
    

    更新时的日志(picAlbums为JSON): image 插入时的日志:

    [nio-8080-exec-2] c.h.s.h.s.p.m.P.insert                   : ==>  Preparing: INSERT INTO product_templates ( id, merchantId, categoryId, systemCode, itemType, title, subtitle, picAlbums, unitName, unitQuality, specification, price, description ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) 
    2019-01-14 09:41:28.794 DEBUG 3224 --- [nio-8080-exec-2] c.h.s.h.s.p.m.P.insert                   : ==> Parameters: 1084626501050572802(String), xxxxxx(String), 1083971735584858114(String), ca412ed1-7a5a-45f1-8dcb-8e955c355cba(String), 1(Integer), 狼途(String), 狼途V5(String), [](String), 箱(String), 500(Integer), {"颜色":["红色","绿色"],"大小":["200","400"],"尺寸":["21","30"]}(String), 25(Long), hahaha(String)
    

    重现步骤

    报错信息

    opened by jervainy 39
  • CVE-2022-25517 SQL injection!!!

    CVE-2022-25517 SQL injection!!!

    当前使用版本(必填,否则不予处理)

    3.5.1

    该问题是如何引起的?(确定最新版也有问题再提!!!)

    MyBatis plus v3.4.3 was discovered to contain a SQL injection vulnerability via the Column parameter in /core/conditions/AbstractWrapper.java.

    image

    重现步骤(如果有就写完整)

    https://github.com/HaHarden/mybatis-plus-sql-Injection

    报错信息

    opened by paderlol 32
  • sql拼接错误,wrapper.and的lambda拼接内两个in条件出错

    sql拼接错误,wrapper.and的lambda拼接内两个in条件出错

    当前使用版本(必须填写清楚,否则不予处理)

    3.0.5和3.0.6.2-SNAPSHOT

    该问题是怎么引起的?(注意!!!请使用最新版(具体版本查看CHANGELOG.md),如还有该问题再提 issue!,否则直接拒绝,毫不商量!!!)

    sql拼接错误,wrapper.and的lambda拼接内两个in条件出错

    重现步骤

    QueryWrapper wrapper = new QueryWrapper().eq(DELETE_FLAG_COLUMN, delete); List agentIds = new ArrayList<>(); agentIds.add(4); List distributorIds = new ArrayList<>();

    wrapper.and(w-> w.in("agent_id", agentIds).or().in("distributor_id", distributorIds)); IPage page = orderService.page(new Page<>(curPage, pageSize), wrapper.orderBy(true, orderRule, orderField));

    报错信息

    SELECT COUNT(1) FROM br_order WHERE deleted = ? AND order_status IN (?, ?) AND order_status = ? AND (agent_id) 结尾正常应该为 and (agent_id in (4))

    opened by Lroyia 30
  • 关于最新版本BUG(已确定存在) 使用queryWrapper查询select指定枚举属性和typeHandler的属性 它们值为NULL的问题!!!

    关于最新版本BUG(已确定存在) 使用queryWrapper查询select指定枚举属性和typeHandler的属性 它们值为NULL的问题!!!

    当前使用版本(必填,否则不予处理)

    3.3.2

    该问题是如何引起的?(确定最新版也有问题再提!!!)

    在service中使用lambdaQuery().select(XXX)出现的问题.枚举值和typeHandler类型处理的字段值都为NULL

    重现步骤(如果有就写完整)

    实体的字段: //枚举字段 private PointTypeEnum pointType; //数据库存的是varchar的一串数字, 是毫秒时间戳, 通过typeHandler将它的值转成LocalDateTime @TableField(value = "ctime", typeHandler = BigintToDateTimeTypeHandler.class, fill = FieldFill.INSERT) private LocalDateTime createTime;

    service的操作: lambdaQuery() .select(PointRecord::getUserId,PointRecord::getPointType,PointRecord::getCreateTime) .page(page);

    问题描述: service中查询如果指定select字段查询, 那么枚举类型的值为NULL, 有typeHandler的字段也为NULL 并且没有走进类型处理器里(打断点没进去), 但是去掉select, 也就是查全部字段, 枚举类型的值就有了 typeHandler的处理器也会进去

    报错信息

    数据为空 null

    opened by abc136609517 27
  • updateBatchById批量更新报空指针异常

    updateBatchById批量更新报空指针异常

    当前使用版本(必填,否则不予处理)

    3.3.2

    该问题是如何引起的?(确定最新版也有问题再提!!!)

    使用updateBatchById,集合为2197条数据,报错。

    将2197条数据遍历使用updateById,则正常。 将日志调整为debug级,使用updateBatchById查看生成的sql,将sql直接在数据库运行也正常。

    重现步骤(如果有就写完整)

    报错信息

    Cause: java.sql.BatchUpdateException: java.lang.NullPointerException

    opened by 112921482 26
  • 3.1.1mp导致dubbo使用序列化错误

    3.1.1mp导致dubbo使用序列化错误

    当前使用版本(必须填写清楚,否则不予处理)

    3.1.1

    该问题是怎么引起的?(最新版上已修复的会直接close掉)

    3.1.0时没有任何异常,3.1.1后,远程调用,如果是构建QueryWrapper,然后把QueryWrapper传输到服务端,直接会出现序列化异常

    重现步骤

    selectUser.getOne(new QueryWrapper().eq("mobileNum", user.getPhone()));

    报错信息

    消费者:

    2019-04-26 15:22:09.572 ERROR 28384 --- [0.0-8081-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method getOne in the service com.example.service.IFrontUserSelectService. Tried 3 times of the providers [192.168.14.51:20880] (1/1) from the registry 127.0.0.1:2181 on the consumer 192.168.14.51 using the dubbo version 2.0.1. Last error is: Failed to invoke remote method: getOne, provider: dubbo://192.168.14.51:20880/com.example.service.IFrontUserSelectService?anyhost=true&application=dubbo-demo-client&check=false&dubbo=2.0.1&generic=false&interface=com.example.service.IFrontUserSelectService&methods=removeById,lambdaQuery,save,removeByMap,update,getObj,saveOrUpdateBatch,remove,listByIds,getBaseMapper,removeByIds,updateBatchById,lambdaUpdate,saveOrUpdate,listMaps,saveBatch,query,count,listObjs,list,getMap,updateById,pageMaps,listByMap,getById,getOne,page&pid=28384&register.ip=192.168.14.51&remote.timestamp=1556263101557&revision=1.0.0&serialization=java&side=consumer&timestamp=1556263321965&version=1.0.0, cause: Fail to decode request due to: RpcInvocation [methodName=getOne, parameterTypes=[class com.baomidou.mybatisplus.core.conditions.Wrapper], arguments=null, attachments={path=com.example.service.IFrontUserSelectService, input=3232, dubbo=2.0.1, version=1.0.0}]] with root cause
    
    com.alibaba.dubbo.remoting.RemotingException: Fail to decode request due to: RpcInvocation [methodName=getOne, parameterTypes=[class com.baomidou.mybatisplus.core.conditions.Wrapper], arguments=null, attachments={path=com.example.service.IFrontUserSelectService, input=3232, dubbo=2.0.1, version=1.0.0}]
    	at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.returnFromResponse(DefaultFuture.java:218) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.get(DefaultFuture.java:137) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.get(DefaultFuture.java:111) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker.doInvoke(DubboInvoker.java:95) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.rpc.protocol.AbstractInvoker.invoke(AbstractInvoker.java:142) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.rpc.listener.ListenerInvokerWrapper.invoke(ListenerInvokerWrapper.java:73) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:74) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:68) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.rpc.protocol.dubbo.filter.FutureFilter.invoke(FutureFilter.java:53) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:68) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.rpc.filter.ConsumerContextFilter.invoke(ConsumerContextFilter.java:47) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:68) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:52) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:77) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:232) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:70) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:51) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.alibaba.dubbo.common.bytecode.proxy14.getOne(proxy14.java) ~[dubbo-2.5.10.jar:2.0.1]
    	at com.baomidou.springboot.controller.user.FrontUserController.login(FrontUserController.java:152) ~[classes/:na]
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_112]
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_112]
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_112]
    	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_112]
    	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) ~[spring-web-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) ~[spring-webmvc-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:849) ~[spring-webmvc-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:760) ~[spring-webmvc-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) ~[spring-webmvc-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) ~[spring-webmvc-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.5.37.jar:8.5.37]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at com.baomidou.springboot.filter.XssFilter.doFilter(XssFilter.java:57) ~[classes/:na]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) ~[spring-web-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) ~[spring-web-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) ~[spring-web-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.22.RELEASE.jar:4.3.22.RELEASE]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) ~[tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) [tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800) [tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806) [tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498) [tomcat-embed-core-8.5.37.jar:8.5.37]
    	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.37.jar:8.5.37]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_112]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_112]
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.37.jar:8.5.37]
    	at java.lang.Thread.run(Thread.java:745) [na:1.8.0_112]
    

    提供服务端:

    java.io.InvalidClassException: com.baomidou.mybatisplus.core.conditions.AbstractWrapper; local class incompatible: stream classdesc serialVersionUID = 3498576810672403439, local class serialVersionUID = 6780705936989990493
    	at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:616)
    	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1630)
    	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
    	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1630)
    	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1781)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
    	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
    	at com.alibaba.dubbo.common.serialize.support.java.JavaObjectInput.readObject(JavaObjectInput.java:67)
    	at com.alibaba.dubbo.common.serialize.support.java.JavaObjectInput.readObject(JavaObjectInput.java:73)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:106)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:68)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:128)
    	at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:120)
    	at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:81)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:44)
    	at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:133)
    	at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
    	at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
    	at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280)
    	at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200)
    	at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
    	at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
    	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)
    [WARN ]19-04-26 15:22:09 0475 com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:71) [DUBBO] Decode rpc invocation failed: null, dubbo version: 2.0.1, current host: 192.168.14.51
    java.io.EOFException
    	at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputStream.java:2794)
    	at java.io.ObjectInputStream.readByte(ObjectInputStream.java:919)
    	at com.alibaba.dubbo.common.serialize.support.java.JavaObjectInput.readObject(JavaObjectInput.java:63)
    	at com.alibaba.dubbo.common.serialize.support.java.JavaObjectInput.readObject(JavaObjectInput.java:73)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:116)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:68)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:128)
    	at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:120)
    	at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:81)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:44)
    	at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:133)
    	at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
    	at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
    	at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280)
    	at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200)
    	at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
    	at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
    	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)
    [WARN ]19-04-26 15:22:09 0475 com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:125) [DUBBO] Skip input stream 2421, dubbo version: 2.0.1, current host: 192.168.14.51
    [DEBUG]19-04-26 15:22:09 0503 com.alibaba.dubbo.remoting.transport.DecodeHandler.decode(DecodeHandler.java:58) [DUBBO] Decode decodeable message com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation, dubbo version: 2.0.1, current host: 192.168.14.51
    [WARN ]19-04-26 15:22:09 0535 com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:109) [DUBBO] Decode argument failed: com.baomidou.mybatisplus.core.conditions.AbstractWrapper; local class incompatible: stream classdesc serialVersionUID = 3498576810672403439, local class serialVersionUID = 6780705936989990493, dubbo version: 2.0.1, current host: 192.168.14.51
    java.io.InvalidClassException: com.baomidou.mybatisplus.core.conditions.AbstractWrapper; local class incompatible: stream classdesc serialVersionUID = 3498576810672403439, local class serialVersionUID = 6780705936989990493
    	at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:616)
    	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1630)
    	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
    	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1630)
    	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1781)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
    	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
    	at com.alibaba.dubbo.common.serialize.support.java.JavaObjectInput.readObject(JavaObjectInput.java:67)
    	at com.alibaba.dubbo.common.serialize.support.java.JavaObjectInput.readObject(JavaObjectInput.java:73)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:106)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:68)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:128)
    	at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:120)
    	at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:81)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:44)
    	at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:133)
    	at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
    	at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
    	at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280)
    	at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200)
    	at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
    	at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
    	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)
    [WARN ]19-04-26 15:22:09 0535 com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:71) [DUBBO] Decode rpc invocation failed: null, dubbo version: 2.0.1, current host: 192.168.14.51
    java.io.EOFException
    	at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputStream.java:2794)
    	at java.io.ObjectInputStream.readByte(ObjectInputStream.java:919)
    	at com.alibaba.dubbo.common.serialize.support.java.JavaObjectInput.readObject(JavaObjectInput.java:63)
    	at com.alibaba.dubbo.common.serialize.support.java.JavaObjectInput.readObject(JavaObjectInput.java:73)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:116)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:68)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:128)
    	at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:120)
    	at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:81)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:44)
    	at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:133)
    	at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
    	at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
    	at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280)
    	at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200)
    	at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
    	at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
    	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)
    [WARN ]19-04-26 15:22:09 0536 com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:125) [DUBBO] Skip input stream 2421, dubbo version: 2.0.1, current host: 192.168.14.51
    [DEBUG]19-04-26 15:22:09 0536 com.alibaba.dubbo.remoting.transport.DecodeHandler.decode(DecodeHandler.java:58) [DUBBO] Decode decodeable message com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation, dubbo version: 2.0.1, current host: 192.168.14.51
    [WARN ]19-04-26 15:22:09 0543 com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:109) [DUBBO] Decode argument failed: com.baomidou.mybatisplus.core.conditions.AbstractWrapper; local class incompatible: stream classdesc serialVersionUID = 3498576810672403439, local class serialVersionUID = 6780705936989990493, dubbo version: 2.0.1, current host: 192.168.14.51
    java.io.InvalidClassException: com.baomidou.mybatisplus.core.conditions.AbstractWrapper; local class incompatible: stream classdesc serialVersionUID = 3498576810672403439, local class serialVersionUID = 6780705936989990493
    	at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:616)
    	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1630)
    	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
    	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1630)
    	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1781)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
    	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
    	at com.alibaba.dubbo.common.serialize.support.java.JavaObjectInput.readObject(JavaObjectInput.java:67)
    	at com.alibaba.dubbo.common.serialize.support.java.JavaObjectInput.readObject(JavaObjectInput.java:73)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:106)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:68)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:128)
    	at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:120)
    	at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:81)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:44)
    	at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:133)
    	at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
    	at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
    	at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280)
    	at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200)
    	at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
    	at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
    	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)
    [WARN ]19-04-26 15:22:09 0544 com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:71) [DUBBO] Decode rpc invocation failed: null, dubbo version: 2.0.1, current host: 192.168.14.51
    java.io.EOFException
    	at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputStream.java:2794)
    	at java.io.ObjectInputStream.readByte(ObjectInputStream.java:919)
    	at com.alibaba.dubbo.common.serialize.support.java.JavaObjectInput.readObject(JavaObjectInput.java:63)
    	at com.alibaba.dubbo.common.serialize.support.java.JavaObjectInput.readObject(JavaObjectInput.java:73)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:116)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:68)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:128)
    	at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:120)
    	at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:81)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:44)
    	at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:133)
    	at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
    	at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
    	at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
    	at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
    	at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280)
    	at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200)
    	at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
    	at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
    	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)
    
    opened by a364176773 24
  • 3.1.1,mybatis 3.5.1中对于java.time包LocalDateTime,LocalDate,LocalTime类型的处理与mybatis 3.5.0有所不同

    3.1.1,mybatis 3.5.1中对于java.time包LocalDateTime,LocalDate,LocalTime类型的处理与mybatis 3.5.0有所不同

    当前使用版本(必须填写清楚,否则不予处理)

    3.1.1

    该问题是怎么引起的?(最新版上已修复的会直接close掉)

    mybatis-plus 3.1.1版本更新了mybatis的版本,由原先的3.5.0更新到了3.5.1,但是因为mybatis 3.5.1版本对于java.time包下LocalDateTime,LocalDate,LocalTime类型的转换交由了JDBC,若JDBC组件不支持对于LocalDateTime类型的处理则会报错。现在项目中运用的是alibaba druid数据库连接池,在druid最新版本中尚不支持对于LocalDateTime的处理,会throw SQLFeatureNotSupportedException,提请注意。

    image

    image

    重现步骤

    1.定义实体类中某一字段类型为LocalDateTime或LocalDate或LocalTime 2.查询

    报错信息

    org.springframework.dao.InvalidDataAccessApiUsageException: Error attempting to get column 'creation_time' from result set. Cause: java.sql.SQLFeatureNotSupportedException ; null; nested exception is java.sql.SQLFeatureNotSupportedException at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:96) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) 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.$Proxy72.selectOne(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:166) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:89) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:62) at com.sun.proxy.$Proxy77.selectOne(Unknown Source) at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.getOne(ServiceImpl.java:259) at com.baomidou.mybatisplus.extension.service.IService.getOne(IService.java:192) at top.uravity.iden.kernel.service.impl.SysUserServiceImpl.getSysUserByUsername(SysUserServiceImpl.java:148) at top.uravity.iden.system.controller.SysLoginController.login(SysLoginController.java:89) 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 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:112) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at top.uravity.iden.kernel.xss.XssFilter.doFilter(XssFilter.java:26) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)

    opened by SanStoneY 23
  • service.save()  Invalid bound statement (not found)

    service.save() Invalid bound statement (not found)

    当前使用版本(必须填写清楚,否则不予处理)

    mybatis-plus-boot-starter 3.0.1

    该问题是怎么引起的?(请使用最新版(具体版本查看CHANGELOG.md),如还有该问题再提 issue!)

    调用service的save方法引起的

    重现步骤

    每次必现

    报错信息

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxxx.db.mapper.TopicModelMapper.insert at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:227) at org.apache.ibatis.binding.MapperMethod.(MapperMethod.java:49) at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) at com.sun.proxy.$Proxy108.insert(Unknown Source) at com.yscall.kulaidian.db.service.impl.TopicServiceImpl.addTopic(TopicServiceImpl.java:37) at com.yscall.kulaidian.db.service.impl.TopicServiceImpl$$FastClassBySpringCGLIB$$4b778966.invoke() at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:685) at

    opened by songlongkuan 23
  • mybatis plus TableField typehandler 问题

    mybatis plus TableField typehandler 问题

    # 问题描述: 查询的时候,如果用mybatis mapper 配置返回的查询,typehandler会起作用,但是用ServiceImpl(mybatis plus 的类)的selecrtById(其实任何查询方法都可以),那么TableField 配置的TypeHandler就不起作用,看如下代码。 # 代码: JAVA代码判断 @TableField(el = "images, typeHandler=com.zyzc.xyzy.config.db.JsonTypeHandler") private List images;

    Mybatis XML代码片段

    # 原因分析 我跟踪代码的时候发现了这一点。就是在在用ServiceImpl的selectById的时候。 执行到mybatis的DefaultResultSetHandler的 typeHandlerRegistry.hasTypeHandler(propertyType, rsw.getJdbcType(columnName)) 这个方法的时候,返回的是false。这个方法里面又去比较的是 TypeHandlerRegistry的 TYPE_HANDLER_MAP 这个集合比较的。而且是用的java.util.list这个类去找的。确实没找到。。但是为什么 mybatis 那种可以。。因为时间关系,我就没往下看了。。

    # 结论 我认为我这个问题可能要么就是我配置错了(TableFiled上面),要么就是MybatisPlus的一个BUG。

    opened by xgj1988 23
  • 经过测试mybatis-plus用3.1.0的版本的可以用druid的所有版本(包括最新的1.1.17的版本),但是mybatis-plus用3.1.1和druid的测试了从1.1.13-1.1.17都报错

    经过测试mybatis-plus用3.1.0的版本的可以用druid的所有版本(包括最新的1.1.17的版本),但是mybatis-plus用3.1.1和druid的测试了从1.1.13-1.1.17都报错

    当前使用版本(必须填写清楚,否则不予处理)

    3.1.1,orcale12c,ruid的测试了从1.1.13-1.1.17

    该问题是怎么引起的?(最新版上已修复的会直接close掉)

    重现步骤

    经过测试mybatis-plus用3.1.0的版本的可以用druid的所有版本(包括最新的1.1.17的版本),但是mybatis-plus用3.1.1却不能用druid的测试了从1.1.13-1.1.17都报错

    报错信息

    org.springframework.dao.InvalidDataAccessApiUsageException: Error attempting to get column 'CREATE_TIME' from result set. Cause: java.sql.SQLFeatureNotSupportedException ; null; nested exception is java.sql.SQLFeatureNotSupportedException at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:96) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) 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.$Proxy180.selectList(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:158) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:76) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:62) at com.sun.proxy.$Proxy181.selectList(Unknown Source) at com.flyfee.admin.service.impl.SysRouteConfServiceImpl.routes(SysRouteConfServiceImpl.java:57) at com.flyfee.admin.service.impl.SysRouteConfServiceImpl$$FastClassBySpringCGLIB$$b3fd3aed.invoke() at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:684) at com.flyfee.admin.service.impl.SysRouteConfServiceImpl$$EnhancerBySpringCGLIB$$80128694.routes() at com.flyfee.admin.config.DynamicRouteInitRunner.initRoute(DynamicRouteInitRunner.java:46) at com.flyfee.admin.config.DynamicRouteInitRunner$$FastClassBySpringCGLIB$$41409389.invoke() at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115) at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266) at java.util.concurrent.FutureTask.run(FutureTask.java) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.sql.SQLFeatureNotSupportedException: null at com.alibaba.druid.pool.DruidPooledResultSet.getObject(DruidPooledResultSet.java:1771) 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 org.apache.ibatis.logging.jdbc.ResultSetLogger.invoke(ResultSetLogger.java:69) at com.sun.proxy.$Proxy282.getObject(Unknown Source) at org.apache.ibatis.type.LocalDateTimeTypeHandler.getNullableResult(LocalDateTimeTypeHandler.java:38) at org.apache.ibatis.type.LocalDateTimeTypeHandler.getNullableResult(LocalDateTimeTypeHandler.java:28) at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:81) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyAutomaticMappings(DefaultResultSetHandler.java:521) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:402) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:354) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:328) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:301) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:194) at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) 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 org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) at com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor.intercept(PerformanceInterceptor.java:172) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) at com.sun.proxy.$Proxy278.query(Unknown Source) 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 org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63) at com.sun.proxy.$Proxy278.query(Unknown Source) 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 org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63) at com.sun.proxy.$Proxy278.query(Unknown Source) at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:67) at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324) at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) 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 org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433) ... 22 common frames omitted

    opened by ylh23y 22
  • 3.4.3.1版本resultMap存在类型转换异常

    3.4.3.1版本resultMap存在类型转换异常

    当前使用版本(必填,否则不予处理)

    3.4.3.1

    该问题是如何引起的?(确定最新版也有问题再提!!!)

    这个PR 的代码修改后存在问题 https://github.com/baomidou/mybatis-plus/pull/3587 调试发现类型除了ResuleMap外还有其他类型,强制转换会抛出类型转换异常 image

    重现步骤(如果有就写完整)

    报错信息

    Caused by: java.lang.ClassCastException: class com.baomidou.mybatisplus.core.MybatisConfiguration$StrictMap$Ambiguity cannot be cast to class org.apache.ibatis.mapping.ResultMap (com.baomidou.mybatisplus.core.MybatisConfiguration$StrictMap$Ambiguity and org.apache.ibatis.mapping.ResultMap are in unnamed module of loader 'app') at com.baomidou.mybatisplus.core.MybatisConfiguration.checkGloballyForDiscriminatedNestedResultMaps(MybatisConfiguration.java:318) ~[mybatis-plus-core-3.4.3.1.jar:3.4.3.1] at com.baomidou.mybatisplus.core.MybatisConfiguration.addResultMap(MybatisConfiguration.java:222) ~[mybatis-plus-core-3.4.3.1.jar:3.4.3.1] at org.apache.ibatis.builder.MapperBuilderAssistant.addResultMap(MapperBuilderAssistant.java:209) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.builder.ResultMapResolver.resolve(ResultMapResolver.java:47) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:289) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:254) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:246) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:119) ~[mybatis-3.5.6.jar:3.5.6] at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:95) ~[mybatis-3.5.6.jar:3.5.6] at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:593) ~[mybatis-plus-extension-3.4.3.1.jar:3.4.3.1] at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.afterPropertiesSet(MybatisSqlSessionFactoryBean.java:431) ~[mybatis-plus-extension-3.4.3.1.jar:3.4.3.1] at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.getObject(MybatisSqlSessionFactoryBean.java:628) ~[mybatis-plus-extension-3.4.3.1.jar:3.4.3.1] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?] at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1334) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1501) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1399) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.6.jar:5.3.6] ... 20 more

    opened by zyzyzy523 19
  • 关于弃用和删除AbstractBaseExecutor、MybatisSimpleExecutor、MybatisBatchExecutor、MybatisReuseExecutor的问题

    关于弃用和删除AbstractBaseExecutor、MybatisSimpleExecutor、MybatisBatchExecutor、MybatisReuseExecutor的问题

    当前使用版本(必填,否则不予处理)

    3.5.2

    近期我们在使用MP的时候,发现升级MP(3.1.2到3.5.2)后,有很多内容发生了较大改变,其中AbstractBaseExecutorMybatisSimpleExecutorMybatisBatchExecutorMybatisReuseExecutor 实现了ibatis的 Executor接口,继承了BaseExecutor 抽象基类,这些类,从3.4.0开始弃用,3.4.3的时候就删除,查了一下发版记录,并没有找到为什么要弃用和删除这些类的说明。

    搜了一下issue,也没找到相关弃用和删除相关功能的issue,

    咨询一下这里是出于什么考量要弃用和删除相关的类呢?

    opened by darren-wang 5
  • 3.5.3 调用 Oracle 存储过程报解析异常

    3.5.3 调用 Oracle 存储过程报解析异常

    当前使用版本(必填,否则不予处理)

    3.5.3

    该问题是如何引起的?(确定最新版也有问题再提!!!)

    3.5.2升级3.5.3之后 调用 Oracle19c 存储过程 报错 Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "{" "{"

    重现步骤(如果有就写完整)

    去掉包裹在 call 语句外面的 {} 或者降低版本至3.5.2恢复正常

    报错信息

    Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "{" "{"

    opened by gjycn 1
  • 无法保证XML中的Sql、注解的Sql和标准CrudSql到底那个有效。

    无法保证XML中的Sql、注解的Sql和标准CrudSql到底那个有效。

    当前使用版本

    3.5.2

    该问题是如何引起的?

    无法保证XML中的Sql、注解的Sql和标准CrudSql到底那个有效。

    在com.baomidou.mybatisplus.core.MybatisMapperAnnotationBuilder#parse的注释中说 MybatisPlus 加载 SQL 顺序: 1、加载 XML中的 SQL 2、加载 SqlProvider 中的 SQL 3、XmlSql 与 SqlProvider不能包含相同的 SQL 调整后的 SQL优先级:XmlSql > sqlProvider > CurdSql

    但是,具体实现无法保证该顺序,解析代码看com.baomidou.mybatisplus.core.MybatisMapperAnnotationBuilder#parse

            String resource = type.toString();
            if (!configuration.isResourceLoaded(resource)) {
                loadXmlResource();//===>1,解析XmlSql
                ...
                for (Method method : type.getMethods()) {//===>2,解析sqlProvider
                   ....
                }
                // TODO 注入 CURD 动态 SQL , 放在在最后, because 可能会有人会用注解重写sql
                try {
                    // https://github.com/baomidou/mybatis-plus/issues/3038
                    if (GlobalConfigUtils.isSupperMapperChildren(configuration, type)) {
                        parserInjector();//===>3, 注入通用 CurdSql
                    }
                } catch (IncompleteElementException e) {
                    configuration.addIncompleteMethod(new InjectorResolver(this));
                }
            }
            parsePendingMethods();//===>4,每完成一个mapper(包括xml)的解析后,去尝试解析待定的
        }
    

    在1处解析XmlSql时,遇到问题,则把该方法放入待定列表。 org.apache.ibatis.builder.xml.XMLMapperBuilder#buildStatementFromContext

    private void buildStatementFromContext(List<XNode> list, String requiredDatabaseId) {
        for (XNode context : list) {
        ...
        try {
            statementParser.parseStatementNode();
          } catch (IncompleteElementException e) {
            configuration.addIncompleteStatement(statementParser);//放入待定列表
          }
        }
      }
    

    在注入标准Crud时,遇到问题也会加入待定列表。

    如果按照这样的逻辑,假如XML文件、注解和方法注入包括了相同id的方法,最后到底那个生效,完全不确定。

    建议改变思路,重构代码,在加入MapStatement时,如果在待定列表中有相同id存在,则为每个id建立一个待定队列,并把它放在该id后面排队,当所有的xml文件,注解都解析完了,再去解析待定列表,最后确实无法完成,就选择后面排队的。

    这样的好处是,XmlSql 、SqlProvider以及CurdSql能够得到有效保证。也就能够确定的用xml覆盖注解、注解覆盖标准CRUDSql。

    opened by roblues 1
  • 引用mybatis-plus后,graphql无法自动配置

    引用mybatis-plus后,graphql无法自动配置

    当前使用版本(必填,否则不予处理)

    当前版本:3.5.1

    该问题是如何引起的?(确定最新版也有问题再提!!!)

    pom文件引用最新版本mybatis-plus(3.5.1),项目里面用到了graphql,并且在yml文件里面重新指定了graphql 的path,spring.graphql.path属性就失效了,因为mybatis-plus的spring-boot-autoconfiguretion依赖版本为2.5.3 image image 但是2.5.3版本的没有graphql的自动配置,就导致yml文件里面的graphql path配置不生效,请求会404 需要手动指定spring-boot-autoconfiguretion的版本为2.7.5才能使graphql的path配置生效 image

    重现步骤(如果有就写完整)

    报错信息

    404

    opened by zhangjunapk 0
  • 输出自定义模板修改建议

    输出自定义模板修改建议

    当前使用版本(必填,否则不予处理)

    3.5.3

    该问题是如何引起的?(确定最新版也有问题再提!!!)

    AbstractTemplateEngine

    protected void outputCustomFile(@NotNull List<CustomFile> customFiles, @NotNull TableInfo tableInfo, @NotNull Map<String, Object> objectMap) {
          String entityName = tableInfo.getEntityName();
          String parentPath = getPathInfo(OutputFile.parent);
          customFiles.forEach(file -> {
              String filePath = StringUtils.isNotBlank(file.getFilePath()) ? file.getFilePath() : parentPath;
              if (StringUtils.isNotBlank(file.getPackageName())) {
                  filePath = filePath + File.separator + file.getPackageName();
              }
              String fileName = filePath + File.separator + entityName + file.getFileName();
              outputFile(new File(fileName), objectMap, file.getTemplatePath(), file.isFileOverride());
          });
      }
    

    1.建议在TableInfo对象里保留一个根据表名转换后的最原始字段名,tableInfo.getEntityName()该返回值已经被entity.formatFileName污染了。比如我要自定义Vo,最终生成的Vo类名会变成TableEntityVo。fileName拼接的时候使用原始的字段名加上自定义后缀。 CustomFile.Builder().fileName("Vo").build()

    2.模板路径调用getTemplateFilePath方法,会自动拼接后缀

    3.模板路径只有entity可以设置kotlin,其他service、mapper、controller没有

    重现步骤(如果有就写完整)

    希望可以自定义类名后缀

    opened by lin-code-world 0
Releases(v3.5.3.1)
  • v3.5.3.1(Jan 6, 2023)

  • v3.5.3(Dec 28, 2022)

    多租户插件:多表join表名必需起别名,否则追加的过滤条件不带前缀 InterceptorIgnore 不能过滤 selectKey 的问题 分页新增informix数据库支持 分页新增优炫数据库支持 分页新增TDengine数据库支持 分页新增亚马逊redshift数据库支持 支持spring-boot 2.7以上版本 雪花id新增反解时间戳方法Sequence#parseIdTimestamp BaseMapper.selectCount生成语句加入中AS total 修复IllegalSQLInnerInterceptor类ClassCastException异常,并优化日志 移除注解OrderBy的过时属性isDesc 移除TableInfo过时方法 加入JoinTableInfoInitHandler类参与TableInfo初始化 修复StringUtils.sqlInjectionReplaceBlank方法过滤sql不全,可能会导致sql注入的情况 增加IService.lambdaQuery(entity)支持,写法更便捷 新增数据变更记录(数据审计)插件DataChangeRecorderInnerInterceptor 新增查询条件方法 notLikeLeft 和 notLikeRight 数据权限多表解析部分处理优化 允许子类重写 orderBy 基础方法 gitee issues/I61F51 新增Db类,调整 SimpleQuery 类 新增脚本自动维护功能 新增支持手动拦截器忽略策略,例如 InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build()); 支持 PG 数据字段大写 ID 自增 fixed issues/I4T0YJ 代码生成器重构完成,合并回 MP 核心代码库 代码生成器增加是否生成service接口的开关

    Source code(tar.gz)
    Source code(zip)
  • v3.5.1(Feb 25, 2022)

    新增 impala 数据库支~~持 缓存动态获取数据库类型~~ 新增可控分配 id 方法 fixed github pull/4231 延迟枚举扫描注册 乐观锁插件支持根据wrapper填充 github pull/3664 H2KeyGenerator 语法修改 SimpleQuery 优化及Bug修改 fixed gitee issues/I4P9EN SybaseDialect 关键词替换优化

    Source code(tar.gz)
    Source code(zip)
  • v3.4.3(May 20, 2021)

    增加瀚高数据库支持 增加注解 Order By 支持默认排序 Wrapper exists notExists orderBy groupBy 支持参数绑定 Wrapper 支持 setParamAlias 其它优化 优化 KeyGenerator 支持多实现多数据源注入 增强 ServiceImpl 泛型推断,解决多继承与代理问题 新增 PageDto 用于微服务对象传输序列化 新增 Page 提供静态 of 构造方式 增加代理 MethodHandleProxies 对 lambda 调试支持 调整 ActiveRecord 日志对象初始化 调整 ActiveRecord 模式 Model 类开发 pkVal 方法外部可用 删除标记过时代码 优化枚举值获取方式 分页 count 安全处理 Sequence 方法支持重写支持 升级 Mybatis 3.5.7 修复自动配置 lazy-initialization 无属性提示 修复 mysql on duplicate key update 字段名判断为表名问题 修复 lambda 条件 npe 异常 重构 lambda 信息提取方法 获取 lambda 信息不在序列化 合并 gitee pulls/ 141 fixed github issues/3208 3016 fixed github issues/3482 数据权限处理器支持 union all 调整事务未启用打印提示信息 单元测试优化相关依赖升级

    Source code(tar.gz)
    Source code(zip)
  • v3.4.2(Jan 15, 2021)

    fix: 移除 BlockAttackInnerInterceptor 内引用的 commons 的 utils feat: PaginationInnerInterceptor 添加 optimizeJoin 属性控制是否在count时对sql的join进行优化 feat: 可通过Resources.setDefaultClassLoader设置默认类加载器. feat: InterceptorIgnore 注解新增 others 属性 feat: IService 增加 kotlin 链式调用支持(ktQuery() 和 ktUpdate()) style: jsqlparser up to 4.0 style: 移除 com.baomidou.mybatisplus.extension.injector.methods.additional 包下的过时类 style: generator 模块另开仓库 generator

    Source code(tar.gz)
    Source code(zip)
  • v3.4.1(Nov 11, 2020)

    feat: 公开 AbstractWrapper.getEntityClass fix: 新多租户插件完善子查询,支持 比较符号,in,EXISTS,NOT EXISTS feat: 新增 FakeTenantLineInnerInterceptor 对 TenantSqlParser 进行过度 feat: 分页count识别 left join (subSelect) 优化 feat: 所有 count 从 count(1) 变更为 count(*) feat: mybatis up to 3.5.6

    Source code(tar.gz)
    Source code(zip)
  • v3.4.0(Aug 25, 2020)

    fix: @TableName.autoResultMap=true 情况下, 内置的 selectBody 将不会进行 as ,使用了的需要注意!!! feat: 新增 mybatis-plus-boot-starter-test 模块 fix: MetaObjectHandler 重载错误(解决办法是参数位置对调),填充值在泛型上支持字段类型的子类 feat: mybatis up to 3.5.5, mybatis-spring up to 2.0.5 feat: jsqlparser up to 3.2 feat: 新增 MybatisParameterHandler, 废弃 MybatisDefaultParameterHandler feat: 分页插件加入 GBase,ClickHouse,oscar,OceanBase 数据库连接自动识别的支持 feat: Wrapper 新增api not(boolean condition, Consumer consumer) feat: 新增 MybatisPlusInterceptor 解决 多租户和分页 插件一级和二级缓存不正确问题 feat: 新分页插件优化 size<0 时继续拼接 orderBy feat: 新增 IdentifierGenerator 一个实现类 ImadcnIdentifierGenerator fix: chainWrapper#func 强转异常 fix(mybatis-plus-generator.main): 重构生成器数据库类型转换器,修复部分支条,提交选择器测试 fix: 修复复杂情况中动态表名替换产生的问题:正则由空白检测转为单词边界检测 refactor: 重构动态表名解析器,去除正则替换程序,改为按表名位置进行替换 refactor: 将表名解析重构为访问者模式,现在不会对原有 SQL 做改动

    Source code(tar.gz)
    Source code(zip)
  • v3.3.2(May 25, 2020)

    • 分页参数提取,单元测试用例修复
    • 达梦数据库代码生成器表过滤支持
    • 微软数据库代码生成器表过滤支持
    • 修复代码生成器属性字段规则错误
    • SelectById 支持自定义方法名
    • 修复分页插件获取数据库类型问题
    • Json转换器空值处理
    • bugfix(mybatis-plus-generator):SQL类型返回错误问题
    • 调整未知方言异常,自动识别url转换小写匹配.
    • fix: 初始化 TableInfo 中遇到多个字段有 @TableId 注解时未能抛出异常的问题
    • SuperController有Class参数的set方法
    • 增加方法StrategyConfig.setSuperServiceImplClass(java.lang.Class<?>).
    • 代码生成器命名策略调整.
    • 扩展分页缓存key值计算.
    • 去除方法推测,直接访问属性字段.
    • 修正枚举处理器类型不匹配比较.
    • 修改表前缀匹配方式
    • 修改在Mybatis全局配置文件中设置分页插件参数不生效问题
    • 修改在Mybatis全局配置文件中设置分页插件参数不生效问
    • 修复PR未指定解析器的时候引发空指针
    • 增加分页插件limit参数配置
    • 修复指定superEntityClass重复生成父类字段问题
    • 无主键的情况无需导入IdType与TableId包
    • 调整生成BaseResultMap格式
    • 支持lombok模式下选择是否进行链式set生成
    • 修复解析器for update错误
    • 过滤PG约束列(只留下主键约束)
    • 增加生成器禁用模板生成
    • fix(kotlin): 修复动态表名 BUG,最大努力替换表名
    • 修复PG约束生成重复属性字段问题
    • fix(kotlin): 将 LambdaUtils 中缓存的 key 改为 String
    • 代码生成器增加数据库关键字处理接口
    • fix github/issues/2454 支持注解可继承
    • 新增 AES 加密数据库用户名密码
    • 优化方法入参泛型,支持更多类型
    • 修复代码生成器开启移除is前缀生成实体缺少包导入
    • fixed github issues/2470
    Source code(tar.gz)
    Source code(zip)
  • v3.3.1.tmp(Jan 27, 2020)

  • v3.3.1(Jan 17, 2020)

    • 新增TableName注解属性excludeProperty支持排除字段
    • 新增ServiceImpl#entityClass属性,减少泛型提取
    • 新增phoenix支持
    • 新增支持hbase的选装件Upsert
    • 新增生成器策略配置enableSqlFilter属性来控制是否启用SQL过滤表支持
    • 新增批量执行方法,方便用户自定义批量执行操作
    • Wrapper支持clear清空
    • Wrapper子类新增func方法,主要为了支持在if else情况下使用Wrapper的不同method不会导致断链(链式调用不能一链到底)
    • BaseMapper部分入参为Wrapper的select方法支持wrapper.first来设置RDS的hint
    • KtUpdateWrapper#set支持value为null
    • 支持泛型主键支持
    • 优化分页拦截器数据类型与方言实现类配置
    • 二级缓存复用count查询缓存
    • IService部分method调整为default方法
    • 二级缓存兼容json序列化情况(主要出现默认缓存count出现long反序列化回来为int的情况)
    • 处理批量操作嵌套事物问题(二级缓存更新问题)
    • 修复启用乐观锁下updateById时自动填充不生效的问题
    • 修复自动填充接口的default方法(setFieldValByNamegetFieldValByName)某些情况下会发生异常的问题
    • 修复KtWrapper嵌套函数问题
    • 修复Freemarker生成Kotlin类的常量错误
    • 修复StringUtils#guessGetterName错误
    • 修复SerializationUtils资源未释放问题
    Source code(tar.gz)
    Source code(zip)
  • v3.3.0(Dec 6, 2019)

    BaseMapper 接口两个 page 方法优化 IService 以及 ServiceImpl 对应 page 方法优化,个别返回 collection 的方法修改为返回 list 逻辑删除字段的两个表示已删除和未删除的定义支持字符串 "null" 修复批量操作未清空缓存 批量操作异常转换为DataAccessException mybatis up 3.5.3, mybatis-spring up 2.0.3, jsqlparser up 3.1 mapper 选装件包调整, chainWrapper 包调整 新增 ChainWrappers 工具类 新增 IdentifierGenerator 接口,支持自定义Id生成 代码生成工具废弃正则表名匹配,新增likeTable与notLikeTable 分页插件支持自定义处理页数限制与溢出总页数处理 修复SqlExplainInterceptor导致的Oracle序列自增两次 分页二级缓存支持 扩展p6spy日志打印 DbConfig加入新属性propertyFormat,TableFieldInfo移除属性related 优化序列生成器,过时KeySequence的clazz属性 修复Ognl表达式关键字导致的null值判断失效 修复更新填充开关失效 优化填充逻辑 ISqlRunner支持selectPage 支持全局逻辑删除字段 BaseMapper的方法可自定义 添加【虚谷】【Oracle12c】【Kingbase】数据库支持 解决数据库字段与实体字段名称不同时出现null as xxx的情况 过时ID_WORKER_STR,自动识别主键类型 配置开启注解,TableName也强制生成

    Source code(tar.gz)
    Source code(zip)
  • v3.2.0(Aug 26, 2019)

    代码生成器添加达梦数据库支持 修复多主键查询表字段SQL的Bug 新增 updateWrapper 尝试更新,否继续执行saveOrUpdate(T)方法 代码生成器 pg 增加 numeric instant 类型支持 修复InjectionConfig不存在时无法生成代码的问题 fix: #1386(github) 逻辑删除字段为Date类型并且非删除数据日期为null 升级依赖 mybatis 版本为 3.5.2 升级依赖 jsqlparser 版本为 2.1 应 EasyScheduler 计划提交 Apache 孵化请求移除 996NPL 协议限制 调整 SQL 移除 SET 部分 Github/1460 移除 SqlMethod 枚举 UPDATE_ALL_COLUMN_BY_ID 属性,推荐使用 AlwaysUpdateSomeColumnById 套 fix: #1412(github) github:mybatis-plus-generator can't support oracle fix: github 1380 移除全局配置的 dbType 和 columnLike 移除 fieldStrategy, 使用上个版本新增的三个替代 移除 PerformanceInterceptor 相关, 建议使用 p6spy 移除 el 拆分为 jdbcType typeHandler 等具体属性 升级 gradle-5.5.1,lombok-1.18.4 当selectStatement.getSelectBody()的类型为SetOperationList 移除 GlobalConfig#sqlParserCache 属性,移除 LogicSqlInjector, OrderItem 新增2个快捷生成的method, page 新增一个入参是 List 的 addOrder method Nested 接口个别入参是 Function<Param, Param> func 的method,入参更改为 Consumer consumer,不影响规范的使用 fixed gitee/I10XWC 允许根据 TableField 信息判断自定义类型 Merge pull request #1445 from kana112233/3.0 支持过滤父类属性功能 添加批量异常捕获测试 多租户ID 值表达式,支持多个 ID 条件查询 扩展新增 json 类型处理器 jackson fastjson 两种实现

    Source code(tar.gz)
    Source code(zip)
  • v3.1.2(Jul 4, 2019)

    EnumTypeHandler 更名为 MybatisEnumTypeHandler,移除 EnumAnnotationTypeHandler 新增自动构建 resultMap 功能,去除转义符 注解增加变量控制是否自动生成resultmap 修改分页缓存Key值错误 TableField.el 属性标记过时 取消 MybatisMapWrapperFactory 的自动注册 starter 增加默认xml路径扫描 新增 MybatisPlusPropertiesCustomizer 及配置使用 ConfigurationCustomizer 内部方法入参更新为 MybatisConfiguration 原有 fieldStrategy 标记过时,新增 3 种 fieldStrategy 进行区分 获取注入方法时传递当前mapperClass 增加sqlite代码自动生成测试代码及测试用的数据库文件 JsqlParserCountOptimize 对 left join 的 sql 优化 count 更精确 fix(AbstractWrapper.java): 修复 lambda 表达式在 order、groupBy 只有条件一个时引起的类型推断错误 apply plugin: 'kotlin' refactor(order): 修复排序字段优先级问题(#IX1QO) 启动就缓存 lambdacache Merge pull request #1213 from sandynz/feature/sqlComment 支持SQL注释 去除 wrapper 的一些变量,wrapper 内部 string 传递优化 fix: #1160(github) 分页组件orderBy: 同时存在group by 和order by,且IPage 参数中存在排序属性时,拼接 Merge pull request #1253 from ShammgodYoung/patch-1 代码生成器输入表名忽略大小写 新增渲染对象 MAP 信息预处理注入 修改 dts rabbitAdmin bean 判断方式 Merge pull request #1255 from ShammgodYoung/patch-2 对serialVersionUID属性进行缩进 JsqlParserCountOptimize 加入 boolean 字段,判断是否优化 join Merge pull request #1256 from baomidou/master Master freemarker entity 模板缩进调整 增加jdbcType,typeHandler属性, 合并el属性

    Source code(tar.gz)
    Source code(zip)
  • v2.0.8(May 15, 2017)

    Wrapper添加设置对象sqlSelect

    兼容无注解情况

    乐观锁去除默认short实现,优化绑定注册器在扫描阶段绑定. 测试改为h2环境.

    优化热加载,去除mapper路径配置.

    减少刷新Mapper配置

    修复tableFiled value 为空情况,开启下划线命名

    sequence 升级提示

    开放表信息、预留子类重写

    修改Idwork测试

    支持 devtools

    fixed 259 支持 xml resultMap 公共字段生成

    fixed pulls 28 支持属性重载

    Source code(tar.gz)
    Source code(zip)
  • v2.0.1(Feb 13, 2017)

    1.解决EntityWrapper对布尔类型构造sql语句错误 2.全局配置初始化日志提示调整 3.Mybatis依赖升级至3.4.2,Mybatis-Spring依赖升级至1.3.1 4.Service中补充方法(selectObjs,selectMaps) 5.解决selectCount数据库返回null报错问题 6.支持PostgreSql代码生成 7.拓展支持外部提供转义字符以及关键字列表 8.开放数据库表无主键依然注入MP的CRUD(无主键不能使用MP的xxById方法) 9.解决EntityWrapper拼接SQL时,首次调用OR方法不起作用的问题 10.sqlServer代码生成(基于2008版本) 11.解决生成代码时未导入BigDecimal问题. 12.释放自动读取数据库时的数据库连接 13.优化全局校验机制(机制为EMPTY增加忽略Date类型) 14.优化注入,避免扫描到BaseMapper 15.优化注入,去除多余注入方法 16.SQLlikeType改名为SqlLike 17.解决热加载关联查询错误问题 18.SqlQuery改名为SqlRunner 19.优化完善代码生成器 20.修复代码生成器未导入@tableName 21.全局配置需要手动添加MP的默认注入类,更改为自动注入简化配置 22.Wrapper增加ne方法 23.修复Mybatis动态参数无法生成totalCount问题 24.代码结构优化,生成器模板优化 25.解决issus[138,140,142,148,151,152,153,156,157],具体请查看里程碑mybatis-plus 2.0.1 计划中所有issus

    Source code(tar.gz)
    Source code(zip)
  • v2.0(Feb 13, 2017)

    1.支持全局大写命名策略 2.自动分页Count语句优化 3.优化现有全局配置策略 4.优化全局验证策略 5.优化代码生成器(之前硬编码,现使用模板形式) 6.优化注入通用方法ByMap逻辑 7.添加自动选择数据库类型 8.改善SqlExplainInterceptor(自行判断MySQL版本不支持该拦截器则直接放行(版本过低小于5.6.3)) 9.修复部分特殊字符字符多次转义的问题 10.优化现有EntityWrapper添加Wrapper父类以及Condition链式查询 11.Wrapper类使LIKE方法兼容多种数据库 12.优化日志使用原生Mybatis自带的日志输出提示信息 13.修复使用缓存导致使用分页无法计算Count值 14.修复PerformanceInterceptor替换?导致打印SQL不准确问题,并添加格式化SQL选项 15.添加多种数据库支持,请查看DBType 16.添加字符串类型字段非空校验策略(字符串类型自动判断非空以及非空字符串) 17.Wrapper添加类似QBC查询(eq、gt、lt等等) 18.支持AR模式(需继承Model) 19.合并所有Selective通用方法(例如:去除之前的insert方法并把之前的insetSelective改名为insert) 20.解决sql剥离器会去除--的情况 21.支持MySQL关键词,自动转义 22.精简底层Service、Mapper继承结构 23.不喜欢在XML中写SQL的福音,新增执行SQL方式,具体请查看SqlQuery 24.优化代码结构 25.解决issus[95,96,98,100,103,104,108,114,119,121,123,124,125,126,127,128,131,133,134,135],具体请查看里程碑mybatis-plus 2.0 计划中所有issus

    Source code(tar.gz)
    Source code(zip)
  • v1.4.9(Nov 11, 2016)

    1、ServiceImpl去除@Transactional注解、去除Slf4j依赖 2、解决使用EntityWrapper查询时,参数为特殊字符时,存在sql注入问题 3、调整Mybatis驼峰配置顺序 MybatisPlus > Mybatis 4、优化分页插件并修复分页溢出设置不起作用问题 5、去除DBKeywordsProcessor,添加MySQL自动转义关键词 6、代码生成器新增支持TEXT、TIME、TIMESTAMP类型生成 7、新增批量插入方法 8、代码生成器新增Controller层代码生成 9、调整EntityWrapper类部分List入参为Collection 10、代码生成器优化支持 resultMap

    Source code(tar.gz)
    Source code(zip)
  • v1.4.8(Oct 12, 2016)

    1、insertOrUpdate增加空字符串判断 2、支持原生驼峰配置 mapUnderscoreToCamelCase 开关设置 3、支持 TableField FieldStrategy 注解全局配置 4、SelectOne、SelectCount支持EntityWrapper 5、oracle 代码生成器支持 Integer Long Dobule 类型区分 6、优化INPUT主键策略InsertOrUpdate 7、EntityWrapper IN添加Object数组支持 8、基础Mapper、Servcie通用方法PK参数类型更改至Serializable 9、selectOne结果集不唯一时,添加警告提示 10、修改logger修饰符

    Source code(tar.gz)
    Source code(zip)
  • v1.4.7(Oct 10, 2016)

    • 主键注解 I 改为 PK 方便理解,去掉 mapper 注解
    • 性能分析插件,特殊处理 $ 符内容
    • 添加自动提交事务说明,新增事务测试
    • 支持 resultMap 实体结果集映射
    • 增加#TableField(el = "")表达式,当该Field为对象时, 可使用#{对象.属性}来映射到数据表、及测试
    • 新增 typeHanler 级联查询支持
    • 新增验证字段策略枚举类
    • 代码生成器支持实体构建者模型设置
    • 代码生成器新增实体常量生成支持
    • CRUD 新增 insertOrUpdate 方法
    • 解决MessageFormat.format格式化数字类型sql错误
    • 添加EXISTS IN支持
    • 支持 mysql5.7+ json enum 类型,代码生成
    • 支持无 xml 自动 curd
    • 完善原生加载顺序
    • 完善EntityWrapper(感谢D.Yang提出的BETWEEN AND),其他
    Source code(tar.gz)
    Source code(zip)
  • v1.4.6(Oct 10, 2016)

  • v1.4.5(Oct 10, 2016)

    • 新增 XML 修改自动热加载功能
    • 添加自动处理EntityWrapper方法中的MessageFormat Params类型为字符串的参数
    • 新增表公共字段自动填充功能
    Source code(tar.gz)
    Source code(zip)
  • v1.4.3(Oct 10, 2016)

    • EntityWrapper所有条件类方法支持传入null参数,该条件不会附件到SQL语句中
    • TSQLPlus更名为TSqlPlus与整体命名保持一致。
    • 修复mysql关键字bug----将关键字映射转换加上``符号,增加xml文件生成时可自定义文件后缀名
    • 关闭资源前增加非空判断,避免错误sql引起的空指针错误,增加选择 current>pages 判断
    • TSQL 相关类实现序列化支持 dubbo
    • 增加 mybatis 自动热加载插件
    • 支持数据库 order key 等关键词转义 curd 操作
    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Oct 10, 2016)

    • 增加自定义 select 结果集,优化 page 分页
    • 未考虑 函数,去掉 field 优化
    • 新增 delete update 全表操作禁止执行拦截器
    Source code(tar.gz)
    Source code(zip)
Owner
baomidou
苞米豆
baomidou
The Distributed Application Runtime (Dapr) provides APIs that simplify microservice connectivity

Quarkus - Dapr Introduction What is Quarkus? Traditional Java stacks were engineered for monolithic applications with long startup times and large mem

Quarkiverse Hub 18 Jan 5, 2023
APIKit:Discovery, Scan and Audit APIs Toolkit All In One.

APIKit:Discovery, Scan and Audit APIs Toolkit All In One.

APISecurity Community 976 Jan 9, 2023
Hexagon is a microservices toolkit written in Kotlin

Hexagon is a microservices' toolkit (not a framework) written in Kotlin. Its purpose is to ease the building of server applications (Web applications, APIs or queue consumers) that run inside a cloud platform.

Hexagon 413 Jan 5, 2023
A proof-of-concept Android application to detect and defeat some of the Cellebrite UFED forensic toolkit extraction techniques.

LockUp An Android-based Cellebrite UFED self-defense application LockUp is an Android application that will monitor the device for signs for attempts

levlesec 300 Dec 4, 2022
A Toolkit for Modeling and Simulation of Resource Management Techniques in Internet of Things, Edge and Fog Computing Environments

The iFogSimToolkit (with its new release iFogSim2) for Modeling and Simulation of Resource Management Techniques in Internet of Things, Edge and Fog Computing Environments. In the new release Mobili Management, Microservice Management, and Dynamic Clustering mechanisms are added as new features.

The Cloud Computing and Distributed Systems (CLOUDS) Laboratory 69 Dec 17, 2022
mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。

mall学习教程 简介 mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5

macro 11.7k Jan 8, 2023
mall-swarm是一套微服务商城系统,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。文档齐全,附带全套Spring Cloud教程。

mall-swarm 友情提示 快速体验项目:在线访问地址。 全套学习教程:《mall学习教程》。 Spring Cloud全套教程:《SpringCloud学习教程》。 专属学习路线:学习不走弯路,整理了套非常不错的《mall专属学习路线》。 项目交流:想要加群交流项目的朋友,可以加入mall项目

macro 9.7k Jan 3, 2023
springboot 框架与其它组件结合如 jpa、mybatis、websocket、security、shiro、cache等

致歉 由于自己懒以及身体对issuse 解决的不及时。请大家以后提issuse 的时候写清楚 模块名 比如“springboot-SpringSecurity4” 和问题,我会抽时间抓紧解决。 springboot-SpringSecurity0 包含两部分代码: 第一是 博客 springboot

abel 5.9k Jan 5, 2023
SpringBlade 是一个由商业级项目升级优化而来的SpringCloud分布式微服务架构、SpringBoot单体式微服务架构并存的综合型项目,采用Java8 API重构了业务代码,完全遵循阿里巴巴编码规范。采用Spring Boot 2.4 、Spring Cloud 2020 、Mybatis 等核心技术,同时提供基于React和Vue的两个前端框架用于快速搭建企业级的SaaS多租户微服务平台。

SpringBlade微服务开发平台 采用前后端分离的模式,前端开源两个框架:Sword (基于 React、Ant Design)、Saber (基于 Vue、Element-UI) 后端采用SpringCloud全家桶,并同时对其基础组件做了高度的封装,单独开源出一个框架:BladeTool B

Chill 5.9k Jan 7, 2023
Guns基于SpringBoot 2,致力于做更简洁的后台管理系统,完美整合springmvc + shiro + mybatis-plus + beetl!Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架!

Guns基于Spring Boot2,致力于做更简洁的后台管理系统。包含系统管理,代码生成,多数据库适配,SSO单点登录,工作流,短信,邮件发送,OAuth2登录,任务调度,持续集成,docker部署等功。支持Spring Cloud Alibaba微服务。社区活跃,版本迭代快,加群免费技术支持。

冯硕楠 3.6k Jan 5, 2023
开源论坛、问答系统,现有功能提问、回复、通知、最新、最热、消除零回复功能。功能持续更新中…… 技术栈 Spring、Spring Boot、MyBatis、MySQL/H2、Bootstrap

码问社区 在线演示地址 www.mawen.co 功能列表 开源论坛、问答系统,现有功能提问、回复、通知、最新、最热、消除零回复功能。功能持续更新中…… 技术栈 技术 链接 Spring Boot http://projects.spring.io/spring-boot/#quick-start

小匠 2.3k Dec 30, 2022
一个小而美的低代码全栈开发平台,一键生成后端api接口+前端页面代码+在线接口文档,节省50%的前后端开发的工作量。基于springboot +mybatis+spring security+vue 技术栈

YOMA [toc] 一个小而美的低代码全栈开发平台,一键生成后端api接口+前端页面代码+在线接口文档,节省50%的前后端开发的工作量,平台代码100%开源。平台适用于企业信息化、政务、中小型互联网等项目 平台采用前后端分离架构,基于如下流行的开源框架,易上手+便于后期维护 后端:https://

Shihao Ma 149 Dec 9, 2022
参考 DDD/Clean Architecture 设计理念,整合 Spring Boot/Spring Security/Mybatis Plus/Vavr 的 Spring Realworld 应用案例

Demo · 更多项目 · 参考资料 ms-spring-ddd-examples Unified Domain-driven Layered Architecture for MicroService Apps,试图探索一套切实可行的应用架构规范,可以复制、可以理解、可以落地、可以控制复杂性的指导

王下邀月熊 19 Sep 23, 2022
Java 项目快速开发脚手架。核心技术采用 SpringBoot、MyBatis、Thymeleaf、Bootstrap。

前言 闲来无事,整一个 Java 项目快速开发脚手架。 正文 一、简介 Chewing 是一个简单的 Java 项目快速开发脚手架。既适合需要开发小型项目的小伙伴使用,也适合刚入门的新手用来学习一些常用的技术。 二、源码 Github:https://github.com/jingqueyimu/c

null 33 Sep 26, 2022
以教学为目的的电商系统。包含ToB复杂业务、互联网高并发业务、缓存应用;DDD、微服务指导。模型驱动、数据驱动。了解大型服务进化路线,编码技巧、学习Linux,性能调优。Docker/k8s助力、监控、日志收集、中间件学习。前端技术、后端实践等。主要技术:SpringBoot+JPA+Mybatis-plus+Antd+Vue3。

简介 bcMall 是一个以教学为目的的电商系统。bcMall将为你展现一个典型的系统演进过程,所使用的主流技术完全开放。 它包含ToB复杂业务、互联网高并发业务、缓存应用;DDD、微服务指导。模型驱动、数据驱动。了解大型服务进化路线,编码技巧、学习Linux,性能调优。Docker/k8s助力、监

xjjdog 411 Jan 3, 2023
🦄 开源社区系统:基于 SpringBoot + MyBatis + MySQL + Redis + Kafka + Elasticsearch + Spring Security + ... 并提供详细的开发文档和配套教程。包含帖子、评论、私信、系统通知、点赞、关注、搜索、用户设置、数据统计等模块。

Echo — 开源社区系统 项目上线到服务器之后可能会出现各种各样的 BUG,比如 Elasticsearch 服务启动失败导致搜索模块不可用,但是在本地运行是完全没问题的,所以各位小伙伴可以放心下载部署。 ?? 项目简介 Echo 是一套前后端不分离的开源社区系统,基于目前主流 Java Web

小牛肉 434 Jan 7, 2023
一个基于vue3.0+antd+less+spring boot +mybatis+mysql+maven基础权限管理平台

cc-project vue 版本 angular版本请到 https://github.com/myopenresources/cc-project 这里看 详细文档 请到 cc-project详细文档 介绍 cc-project-vue 是一个前后端分离的项目,前端使用的是vue3.0,后端使用

河马开源-hippo 21 Jun 23, 2022