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.68 MB

An powerful enhanced toolkit of MyBatis for simplify development

Home Page: https://baomidou.com

License: Apache License 2.0

Java 98.00% Kotlin 1.39% FreeMarker 0.61%
mybatis mybatis-plus orm orm-framework toolkit mysql postgresql mybatis-spring

mybatis-plus's People

Contributors

blueden-chen avatar caratacus avatar cat7373 avatar dependabot-preview[bot] avatar dependabot[bot] avatar dev-f-j avatar halower avatar hccake avatar hcl04 avatar houkunlin avatar huayanyu avatar huyang19881115 avatar imtzc avatar jameszbl avatar jktantan avatar lanjerry avatar miemieyaho avatar nancheung avatar nieqiurong avatar peachyy avatar qmdx avatar shuchang01 avatar sproutcat avatar sunhan521 avatar vampireachao avatar willenfoo avatar yangyang0507 avatar yuxiaobin avatar zengzhihong avatar zhtanjj avatar

Stargazers

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

Watchers

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

mybatis-plus's Issues

关于乐观锁插件的问题

  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)

关于二级缓存

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

代码生成文档有误

文档地址

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

分布式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 ,请问该怎么做?

2.0.5 idtype.auto

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

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);
}

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

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

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

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

使用逻辑删除时,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);

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

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

关于多数据源分页

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

生成错误?

<!-- 通用查询结果列-->
<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了....

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

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

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

更新 timestamp类型字段报错

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

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块里面。
请苗大侠解答。

like有问题

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

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的权限。

demo中MybatisPlusConfig配置

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

项目编码

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

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

updateAllColumnById方法

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

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

}
}
`

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.