baomidou / mybatis-plus Goto Github PK
View Code? Open in Web Editor NEWAn powerful enhanced toolkit of MyBatis for simplify development
Home Page: https://baomidou.com
License: Apache License 2.0
An powerful enhanced toolkit of MyBatis for simplify development
Home Page: https://baomidou.com
License: Apache License 2.0
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块里面。
请苗大侠解答。
TemplateConfig setController(null) 报错
是不是无法做多表关联查询?
如何实现1对多的主从表查询?如一个班有多个学生,有好的解决方法吗?
通过生成器生成出来的 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);
}
另外,生成器怎么设置字段使用基本数据类型?
WHERE is_deleted=0 WHERE (merchant_no = ? AND is_enabled = ?)
使用下面这种情况时,会出现这个问题:
Wrapper wrapper = new EntityWrapper();
wrapper.eq("merchant_no", merchantNo);
wrapper.eq("is_enabled", EnableStatus.ENABLED.getIntValue());
selectOne(wrapper);
我想请问一下配置多数据源之后,怎么配置分页插件?如果一个数据源是Oracle,一个是Mysql。dialectType如何指定?
@TableId只支持一个表一个主键,一个有多关键字的表如何处理?
默认是gbk么?
我项目 主体是utf8 看到的注释全是乱码
另外 Table 'tsblog.BLOG' doesn't exist 报类似这样的错误的原因是什么?
我的数据表 是 blog 是映射出问题了 ?
重点是 他还给我了records 虽然没有按照分页来 不是很明白这个 错误
Dao执行 delete(Long)操作时,因为逻辑删除,delete转换未update语句处理没有问题。
update会触发乐观锁插件OptimisticLockerInterceptor处理,执行到如下代码时,parameterObject不再是实体对象,会报错
final Object versionValue = versionField.get(parameterObject);
com.baomidou.mybatisplus.mapper.Wrapper 类下的 handerLike 方法 this.formatSql(String.format("%s = {0}", new Object[]{column}; 源码正常,maven引用的jar包有问题
只增加依赖找不到这个类,需要把项目下载之后来生成么?
`
@service
public class ClassServiceImpl implements ClassService {
private ClassBookingRecordMapper classBookingRecordMapper;
@Autowired
public ClassServiceImpl(ClassBookingRecordMapper classBookingRecordMapper) {
this.classBookingRecordMapper = classBookingRecordMapper;
}
@SuppressWarnings("unchecked")
@Override
public Page<ClassLessonResponse> findLessonByPage(Integer clientSn, ClassLessonPageRequest request, Boolean isFinished) {
EntityWrapper<ClassBookingRecord> wrapper = new EntityWrapper<>();
wrapper.where("client_sn = {0}", clientSn).and("is_del = 0");
List<ClassBookingRecord> classBookingRecords = classBookingRecordMapper.selectPage(new RowBounds(0, 10), wrapper);
System.out.println(classBookingRecords.size());//19
}
}
`
建议 主键IdType再增加一个 ID_WORKER_STRING的选项,以便支持 String 类型的主键。
经常使用oracle数据库,id_word默认为long型,oracle表的主键只能设为number型。
而在进行查询的时候oracle又默认转成了科学计数法,到view层时看到的值跟实际主键值不一致。
如果oracel主建为String (varchar)型的话,便没有这个问题。
如果想要加二级缓存使用第三方的缓存方式该如何操作.比如 enchache 或 redis 都是把相应的 cahce 的实现类放到 mapper 中的 cache 标签里,但在这里该如果操作还是说不支持?
这个自增有BUG,ID不会自增,且会有一个很大的数字出来,回退到2.0.3正常了
mysql timestamp类型的字段 selectByid查询出来后,不修改timestamp字段类型的内容,,直接用updateByid 更新改实体,报错。无提示报错信息
最近使用中发现entity template中没有tostring的重写,对于POJO来说,tostring可以使调试更加方便,希望下一版本中能添加这一配置
<!-- 通用查询结果列-->
<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了....
我用的2.0.2的版本,IdType.AUTO模式下试了插入后返回的只是影响的行数,而不是主键,请问题怎样才能取到插入记录的主键?
在动态注入的时候,会强制要求继承 BaseMapper,否则不会注入。
这样自己定制基础类的时候,就会受到极大的限制。
这个判断,建议放在 sqlInjector 里面,增加 shouldInject 这样的方法,让注入类自己决定是否要注入。
顺便 extractModelClass 也是强依赖 BaseMapper 的,不过至少可以自己 Override。
表字段名有src_from会报错,貌似是把from解析错了。
建议加上@AutoConfigureAfter(DataSourceAutoConfiguration.class)注解,否则datasource还未创建有可能出现空指针异常。
请问使用EntityWrapper时候有sql注入风险吗
Page<GoodCategoryBean> list = mpGoodCategoryService.selectPage(new Page<>(page, limit), new EntityWrapper<>(new GoodCategoryBean()).lt(GoodCategoryBean.ADDDATE, LocalDateTime.now()));
SQL: SELECT id,
name,addDate,isDel FROM t_good_category WHERE isDel=0 WHERE (addDate < ?)
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
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)
希望mybatis可以不用xml配置文件来操作数据库也可以自动生成表
可以参考nutz框架
nutz框架比mybatis方便很多
TableInfoHelper 292-295行是作何考虑的?
/* 字符串类型默认 FieldStrategy.NOT_EMPTY */
if (String.class.isAssignableFrom(fieldType) && FieldStrategy.NOT_NULL.equals(validate)) {
validate = FieldStrategy.NOT_EMPTY;
}
所有的update方法都是更新非null字段,更新全部字段只能再自己写sql了么?
我看到SqlMethod里是定义了updateAllColumnById方法的,为什么BaseMapper最终没有这个方法?
我的全局设置
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 ,请问该怎么做?
在使用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的权限。
in mysql 5.5
explain is not available for update
Mybatis-Plus空字符串不查询怎么设置
如题,请问框架集成cache的扩展点在哪里
如果算定表序列主键生成策略, 比如常用的表序列,自增到50再从表里取
项目二次开发,创建了几十个app_这样开头的表,希望批量生成一下~但好像目前不支持
AutoGenerator
类和com.baomidou.mybatisplus.generator.AutoGenerator
重名,建议修改IdType
直接运行会报错Exception in thread "main" com.baomidou.mybatisplus.exceptions.MybatisPlusException: ConfigGenerator IdType is null
我使用的是log4j,如何配置打印sql输出到控制台?
page.setSearchCount(false)
page.setOrderByField("t.create_time")
同时使用时,查询sql会有2个排序语句。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.