关于 mybatis的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 mybatis的问题相关的知识,希望对你有一定的参考价值。
我写了一个 service 一个实现类 一个dao 一个实现类 一个bean 一个Test 测试类 通过 maybatis 的方式 吧数据 写入到 oracle 中 但是 在test类中调用service的实现类 (service的实现类是调用dao的insert方法) 加入数据库中的那一步的时候 就报错 提示 找不到 mybatis中 <insert id = ""></insert> 找不到这个ID 这个ID就是 dao的实现类中的一个 添加 (insert)方法 配置 地址 注解 都是对的 实在是想不通哪里的问题
我晕啊 大侠们抱歉啊 这个问题没了 又来新问题 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Improper inline parameter map format. Should be: #propName,attr1=val1,attr2=val2
mybatis 倾向SQL的操作。mybatis 官网有工具可以生成映射的Mapping文件,就可以完成一般的操作 参考技术A lz的错误信息能不能贴出来!追问
原来问题OK了 这个问题出来了 我并没有写 propName 这个参数啊(补充里面)
关于Mybatis的几个问题
今天在用mybatis开发的时候遇到两个问题,下面一一列出并给出解决方案。
问题一
最开始我设置的实体类中有个字段如isParent为boolean类型,set和get方法是eclispe自动生成的。
private boolean isParent;
public boolean isParent() {
return isParent;
}
public void setParent(boolean isParent) {
this.isParent = isParent;
}
在xml中是这么写的
<select id="getChildrenByParentId" parameterType="java.lang.String" resultType="org.sjzcgl.common.data.CommonTree">
SELECT ID,
NAME,
CASE
WHEN EXISTS (SELECT 1 FROM TREE_YJS A WHERE A.PARENT_ID = T.ID) THEN
‘1‘
ELSE
‘0‘
END isParent,
PARENT_ID parentId,
IS_METADATA_TYPE isMetadataType,
SFYX
FROM TREE_YJS T
WHERE T.SFYX = ‘1‘
<if test="_parameter != null and _parameter != ‘‘">
AND T.PARENT_ID = #{0,jdbcType=VARCHAR}
</if>
<if test="_parameter == null or _parameter == ‘‘">
AND T.PARENT_ID IS NULL
</if>
</select>
其中CASE WHEN EXISTS (SELECT 1 FROM TREE_YJS A WHERE A.PARENT_ID = T.ID) THEN ‘1‘ ELSE ‘0‘ END isParent ,对于isParent这个字段无论是返回的是字符串‘1’、‘0‘,还是数字1、0,又或者直接是true、false都不能转换为booean。
解决方案:将isParent修改为String类型,并且修改get方法。
private String isParent;
public void setParentId(String parentId) {
this.parentId = parentId;
}
public boolean getIsParent() {
if(this.isParent.equals("1"))
return true;
else
return false;
}
问题二
还是这个xml,入参是String类型,但是在<if>标签里面(红色部分)不识别。
<select id="getChildrenByParentId" parameterType="java.lang.String" resultType="org.sjzcgl.common.data.CommonTree">
SELECT ID,
NAME,
CASE
WHEN EXISTS (SELECT 1 FROM TREE_YJS A WHERE A.PARENT_ID = T.ID) THEN
‘1‘
ELSE
‘0‘
END isParent,
PARENT_ID parentId,
IS_METADATA_TYPE isMetadataType,
SFYX
FROM TREE_YJS T
WHERE T.SFYX = ‘1‘
<if test="parentId != null and parentId != ‘‘">
AND T.PARENT_ID = #{0,jdbcType=VARCHAR}
</if>
<if test="parentId == null or parentId == ‘‘">
AND T.PARENT_ID IS NULL
</if>
</select>
解决方案:将标红部分改为_parameter。
<select id="getChildrenByParentId" parameterType="java.lang.String" resultType="org.sjzcgl.common.data.CommonTree">
SELECT ID,
NAME,
CASE
WHEN EXISTS (SELECT 1 FROM TREE_YJS A WHERE A.PARENT_ID = T.ID) THEN
‘1‘
ELSE
‘0‘
END isParent,
PARENT_ID parentId,
IS_METADATA_TYPE isMetadataType,
SFYX
FROM TREE_YJS T
WHERE T.SFYX = ‘1‘
<if test="_parameter != null and _parameter != ‘‘">
AND T.PARENT_ID = #{0,jdbcType=VARCHAR}
</if>
<if test="_parameter == null or _parameter == ‘‘">
AND T.PARENT_ID IS NULL
</if>
</select>
以上是关于关于 mybatis的问题的主要内容,如果未能解决你的问题,请参考以下文章
markdown [mybatis参考]关于mybatis #mybatis的一些片段