前几天在写测试文件的时候,发现出现了下面的错误:
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: org.apache.ibatis.builder.BuilderException: Error evaluating expression ‘et.isPrivate != null’. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: im.my.project.mysql.Task.isPrivate
### Cause: org.apache.ibatis.builder.BuilderException: Error evaluating expression ‘et.isPrivate != null’. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: im.my.project.mysql.Task.isPrivate
本来以为数据库里的信息出错了,或者可能是读取数据出错,结果反复检查了好几遍数据库,才确保不是数据库的问题。后来,gg 了一下,看到下面的答案,感觉非常好(记得科学上网哈)
https://gitee.com/baomidou/mybatis-plus/issues/IINUI
它里面说:
数据库表中表达是与否概念的字段,使用的是 is_xxx 的方式命名。实体类中对应的字段是isXxx。
isXxx 属性 属于不规范的写法,这样会误认为 isXxx 属性 xx 的 boolean 类型,请更正命名 或者get 方法为 getIsXxx
啥意思呢,就是说,属性不要设为isXxx,否则会出错。
这里我并不想更改属性变量名称,所以用了另一种方法解决的。
我发现,在自动生成
get
和
set
方法的时候,为 isXxx 属性(这里是 isPrivate)生成的方法名是
getPrivate()
和
setPrivate()
,这就不太对了,改回
getIsPrivate()
和
setIsPrivate()
后(所有其它类的调用也需要随着更改),就解决问题了。
第一种是入参里面名字对应不上
不管你是map还是对象名字对应不上都不行
比如你在mapper里面materialName像根据来查找,但实际你入参的对象或者map里面的对象没有这个属性就会报错,报没有这样的属性异常“NoSUch
ProPerty
Exception
”
第二种是属性命名不规范,比如is_XXX,这种mybatis解析时就会报错,尽量避免这种命名。
使用mybatis的时候访问报错,报异常如下:Cause:
org
.
apache
.
ibatis
.
ognl
.NoSuch
Property
Exception
: java.util.ArrayList.length
解决
: 如果是只有一个集合作为参数,无影响。如果除了集合参数,还有其他类型的,则批量的集合参数必须放在第一个。例如:
void updateFromManage(@BatchParameter("companyBillingItem") List companyItems,
@Param("ns
这个 noValue 一定存在,但是报错。 场景就是存在并发的情况下,尤其是在服务刚刚启动的时候,就会发生这个异常。
但是很不幸,mybatis 3.4.1 之前,用的
OGNL
都是由这个问题。
3.4.1 之前的版本的
Ognl
Runtime,这里,第三个参数传 0,则永远都是 null。
public static final Object getMethodValue(
Ognl
Context context, Object target, String
property
Nam
org
.
apache
.
ibatis
.
ognl
.NoSuch
Property
Exception
:java.lang.Float.length
错误原因:sql语句中动态标签
<if test="price!=null and price.length>0">price=#{price},</if>
解决
:删除 sql语句关于Float类型的length判断=> and price.length>0
Caused by:
org
.
apache
.
ibatis
.buil
在使用myabtis进行查询时报:Caused by:
org
.
apache
.
ibatis
.
ognl
.NoSuch
Property
Exception
: com.souche.workorders.model.query.AiLogQuery.filterStart。错误。
自己检查了下实体类的属性名称和sql中的参数名称,发现没错(这里得背锅,太粗心大意了)。 百度了一番,没有找到比较靠谱的答案,只能自己上手看源码了,一层一层断点下去,最终发现
还是参数名称没写对。sql中的
新增简单的java.
ibatis
的xml功能
新版文档参考:,建议通过单测和二进制学习
建议尽快从Dapper.Linq和Dapper.Common移植到 sqlBatis代码可维护性极好,实体映射规则可定制化,移植成本非常小。
免责说明:使用前先测试
电子邮件:
QQ:1448376744
QQ群:642555086
// "LinqTypeMap" file in unit test proj