- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
主题:MyBatis:Boolean Paraeter:MyBatis 正在使用 Getter
内容:
大家好,
我一直在寻找解决我近乎简单的 MyBatis 问题的方法:
<小时/>给定代码(仅必要部分):
mybatis-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<!-- Model types. -->
<typeAlias type="com.blockhaus2000.bh2k.portal.data.model.Navigation" alias="Navigation" />
<!-- ... more types ... --->
</typeAliases>
<mappers>
<mapper resource="mapper/NavigationDAO.xml" />
<!-- ... more mappers ... -->
</mappers>
</configuration>
NavigationDAO.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.blockhaus2000.bh2k.portal.data.dao.NavigationDAO">
<resultMap type="Navigation" id="navigationResultMap">
<id property="id" column="navigationId" />
<result property="title" column="navigationTitle" />
<result property="order" column="navigationOrder" />
<result property="visible" column="navigationVisible" />
<discriminator javaType="String" column="resolve">
<case value="yes" resultMap="enhancedNavigationResultMap" />
</discriminator>
</resultMap>
<resultMap type="Navigation" id="enhancedNavigationResultMap" extends="navigationResultMap">
<collection property="navigationEntries" ofType="NavigationEntry">
<id property="navigationId" column="navigationId" />
<id property="pageId" column="pageId" />
<result property="title" column="navigationEntryTitle" />
<result property="order" column="navigationEntryOrder" />
<result property="visible" column="navigationEntryVisible" />
</collection>
</resultMap>
<!-- Methods from BaseDAO. -->
<insert id="insert" parameterType="Navigation" useGeneratedKeys="true" keyProperty="id" keyColumn="navigationId">
<!-- SQL -->
</insert>
<insert id="save" parameterType="Navigation">
<!-- SQL -->
</insert>
<delete id="delete" parameterType="Navigation">
<!-- SQL -->
</delete>
<select id="exists" parameterType="Navigation" resultType="boolean">
<!-- SQL -->
</select>
<!-- Methods from UpdateableDAO. -->
<update id="update" parameterType="Navigation">
<!-- SQL -->
</update>
<!-- Methods from NavigationDAO. -->
<select id="findVisibleNavigations" parameterType="boolean" resultMap="navigationResultMap">
SELECT
N.navigationId,
N.navigationTitle,
N.navigationOrder,
N.navigationVisible,
<if test="resolve">
NE.pageId,
NE.navigationEntryTitle,
NE.NavigationEntryOrder,
NE.navigationEntryVisible,
</if>
IF (
#{resolve} = 'true',
'yes',
'no'
) AS resolve
FROM
Navigation AS N
<if test="resolve">
INNER JOIN NavigationEntry AS NE ON N.navigationId = NE.navigationId
</if>
WHERE
N.navigationVisible = TRUE
<if test="resolve">
AND
NE.navigationEntryVisible = TRUE
AND
NE.navigationEntryTitle IS NOT NULL
</if>
</select>
<select id="findHiddenNavigations" parameterType="boolean" resultMap="navigationResultMap">
<!-- SQL -->
</select>
<select id="findNavigation" parameterType="Map" resultMap="navigationResultMap">
<!-- SQL -->
</select>
</mapper>
NavigationDAO.java:
package com.blockhaus2000.bh2k.portal.data.dao;
import java.util.SortedSet;
import com.blockhaus2000.bh2k.portal.data.model.Navigation;
public interface NavigationDAO extends BaseDAO<Navigation>, UpdateableDAO<Navigation> {
SortedSet<Navigation> findVisibleNavigations(final boolean resolve);
SortedSet<Navigation> findHiddenNavigations(final boolean resolve);
Navigation findNavigation(final int id, final boolean resolve);
}
BaseDAO.java:
package com.blockhaus2000.bh2k.portal.data.dao;
import com.blockhaus2000.bh2k.portal.data.model.BaseModel;
public interface BaseDAO<T extends BaseModel<T>> {
int insert(final T obj);
int save(final T obj);
int delete(final T obj);
boolean exists(final T obj);
}
UpdateableDAO.java:
package com.blockhaus2000.bh2k.portal.data.dao;
import com.blockhaus2000.bh2k.portal.data.model.BaseModel;
public interface UpdateableDAO<T extends BaseModel<T>> extends BaseDAO<T> {
int update(final T obj);
}
<小时/>
一切都正常启动,但是在调用时
NavigationDAO.findVisibleNavigations(true) // Or false.
抛出以下异常:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'resolve' in 'class java.lang.Boolean'
at org.mybatis.(...)
at org.apache.ibatis.(...)
at com.blockhaus2000.bh2k.portal.data.test.NavigationDAOSpec.test findVisibleNavigations(NavigationDAOSpec.groovy:224)
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'resolve' in 'class java.lang.Boolean'
at org.apache.ibatis.(...)
at org.mybatis.(...)
... 5 more
<小时/>
也就是说,解决方案可能是将“parameterType”更改为“Map”,并将“resolve”替换为“param1”。但这也行不通。另外,如果我删除
<if test="..."> ... </if>
它确实执行正确(当然,功能除外)。
<小时/>我对每一个答案都很满意。
感谢您的帮助费边
<小时/>编辑 1:
这是我的“导航”数据模型:
package com.blockhaus2000.bh2k.portal.data.model;
import java.util.SortedSet;
public class Navigation implements BaseModel<Navigation>, Comparable<Navigation> {
private static final long serialVersionUID = 4019792023891297733L;
/**
* <p>
* <b> PRIMARY KEY </b>
* <br>
* <b> AUTO_INCREMENT </b>
* </p>
*/
private int id = -1;
private String title;
private int order;
private boolean visible;
// ~ non-persistent fields ~
private transient SortedSet<NavigationEntry> navigationEntries;
// compateTo()
// toString()
// hashCode()
// equals(Object)
public int getId() {
return this.id;
}
public String getTitle() {
return this.title;
}
public int getOrder() {
return this.order;
}
public boolean isVisible() {
return this.visible;
}
public SortedSet<NavigationEntry> getNavigationEntries() {
return this.navigationEntries;
}
public Navigation setId(final int id) {
this.id = id;
return this;
}
public Navigation setTitle(final String title) {
this.title = title;
return this;
}
public Navigation setOrder(final int order) {
this.order = order;
return this;
}
public Navigation setVisible(final boolean visible) {
this.visible = visible;
return this;
}
public Navigation setNavigationEntries(final SortedSet<NavigationEntry> navigationEntries) {
this.navigationEntries = navigationEntries;
return this;
}
}
我忘了解释“resolve”的作用:它是一个简单的 boolean 值,用于标识是否加载 transient 属性。
最佳答案
在您的示例中,MyBatis 尝试对 boolean 参数调用 getResolve()
(这显然不起作用),因为 Java 方法声明中的形式参数名称并未全部使用,因此您的“xml 中的“resolve”与参数名称“resolve”不匹配。
要为您的参数指定 MyBatis 名称resolve
,请在您的 NavigationDAO.xml 中选择 parameterType="map"
:
...
<select id="findVisibleNavigations" parameterType="map" resultMap="navigationResultMap">
...
<select id="findHiddenNavigations" parameterType="map" resultMap="navigationResultMap">
并在 NavigationDAO.java 中使用 @Param("resolve")
注释您的参数,也许您必须删除 Final,但我不确定:
....
SortedSet<Navigation> findVisibleNavigations(@Param("resolve") final boolean resolve);
SortedSet<Navigation> findHiddenNavigations(@Param("resolve") final boolean resolve);
...
更新1:
根据this description你可能会留下parameterType,但我从来没有使用过它。
关于java - MyBatis: boolean 参数:MyBatis 正在使用 Getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35495314/
我有一个加号/减号按钮,希望用户不能选择超过 20 个但不知道如何让它工作。我尝试使用 min="1"max="5 属性,但它们不起作用。这是我的代码和一个 fiddle 链接。https://jsf
我正在尝试复制顶部底部图,如示例 here但它没有正确渲染(紫色系列有 +ve 和 -ve 值,绿色为负值)留下杂乱的人工制品。我也在努力创建一个玩具示例来复制这个问题,所以我希望尽管我缺乏数据,但有
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 6 年前。 社区去年审查了是
这个问题在这里已经有了答案: Adding two positive integers gives negative answer.Why? (4 个答案) 关闭 5 年前。 我遇到了一个奇怪的问题
有谁知道如何将字符串值类型 -4,5 或 5,4 转换为 double -4.5 或 5.4? 最佳答案 只需使用 Double.parseDouble(Locale, String); 糟糕,我很困
我正在尝试根据 TextBlob 分类插入一个仅包含“正”或“负”字符串的新数据框列:对于我的 df 的第一行,结果是 ( pos , 0.75, 0.2499999999999997)我想要' 正
我对 VBA 非常陌生,无法理解如何在一个循环中完成 2 个任务。我非常感谢您的帮助。 我已经能够根据第 3 列中的数据更改第 2 列中的数值,但我不明白如何将负值的字体更改为红色。 表格的大小每月都
欢迎, 我正在使用 jquery 通过 POST 发送表单。 这就是我获得值(value)的方式。 var mytext = $("#textareaid").val(); var dataStrin
double d = 0; // random decimal value with it's integral part within the range of Int32 and always p
我有这个字符串: var a='abc123#xyz123'; 我想构建 2 个正则表达式替换函数: 1) 用 '*' 替换所有确实有 future '#'的字符(不包括'#') 所以结果应该是这样的
我正在使用 DialogFragment。当用户从 Gmail 平板电脑应用程序的屏幕与下面示例图片中的编辑文本进行交互时,我希望正面和负面按钮保持在键盘上方。 在我的尝试中不起作用,这是我的 Dia
从组装艺术一书中,我复制了这句话: In the two’s complement system, the H.O. bit of a number is a sign bit. If the H.O
是否有更好更优雅的方法来实现下面的简单代码(diffYear、A 和 B 是数字): diffYear = yearA - yearB; if (diffYear == 0) { A = B
我正在设计一种语言,并尝试确定 true 应该是 0x01 还是 0xFF。显然,所有非零值都将转换为 true,但我正在尝试确定确切的内部表示。 每种选择的优点和缺点是什么? 最佳答案 没关系,只要
在我的 dialogfragment 类的 OnCreateDialog 中,我正在这样做: AlertDialog.Builder builder = new AlertDialog.Builder
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda usin
我偶然发现了一个奇怪的 NSDecimalNumber 行为:对于某些值,调用 integerValue、longValue、longLongValue 等,返回意想不到的值(value)。示例: l
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda using
我有这个正则表达式来测试用户输入是否有效: value.length === 0 || value === '-' || (!isNaN(parseFloat(value)) && /^-?\d+\.
我想用高斯混合模型拟合数据集,数据集包含大约 120k 个样本,每个样本有大约 130 个维度。当我使用 matlab 执行此操作时,我运行脚本(簇号为 1000): gm = fitgmdist(d
我是一名优秀的程序员,十分优秀!