mybatis使用小记

精选30+云产品,助力企业轻松上云!>>> hot3.png

1,当传递单个参数的时候,eg:

parameterType="java.lang.Long"

这时候在sql语句里面引用变量方式:

      <if test="_parameter != null">
          and c.content_id = #{_parameter}
      </if>

2, 获取刚刚插入的自增主键:

    <insert id="insertNewsCommentExt" parameterType="Comment" useGeneratedKeys="true" keyProperty="id">
        <!-- <selectKey resultType="java.util.Long" keyProperty="id">
            SELECT LAST_INSERT_ID() as id
        </selectKey> -->
        insert into jc_comment_ext(ip, text) values(#{ip}, #{comment})
    </insert>

    /**
     * 插入评论
     * @param comment
     */
    public void insertNewsComment(Comment comment){
        Long result = commonDao.insertNewsCommentExt(comment);
        commonDao.insertNewsComment(comment);
    }

说明:此时id自动赋值到comment对象中去,insert语句返回sql执行结果.

3、返回Map

/*static Map<Integer, String> keyMap = null;
static{
   keyMap = new HashMap<Integer, String>();
   keyMap.put(0, "totalSystem");
   keyMap.put(1, "totalInnerSite");
}
@Override
public Map<String, Integer> countOfUnReadMsg(MsgWebLog msgWebLog) {
   Map<String, Integer> r = new HashMap<String, Integer>();
   Map<String, Object> condition = new HashMap<String, Object>();
   condition.put("userId", msgWebLog.getUserId());
   List<Map<String, Object>> result = msgWebLogDao.countOfUnReadMsg(condition);
   for (int i = 0 ; i<result.size(); i++){
      Map<String, Object> map = result.get(i);
      if(map.containsKey("msgType")){
         r.put(keyMap.get(map.get("msgType")), (Integer)map.get("count"));
      }
   }
   return r;
}*/

4、mybatis中文官方文档中(http://mybatis.org/mybatis-3/zh/sqlmap-xml.html):

尽管所有这些强大的选项很多时候你只简单指定属性名,其他的事情 MyBatis 会自己去推断,最多你需要为可能为空的列名指定 jdbcType

其中,或将需要给可能为空的字段指定jdbcType,尤其是一些特殊类型,如:Date类型(其他处理如在数据源追加:

&amp;zeroDateTimeBehavior=convertToNull


5、常见错误

①、resultMap编译报错,同时运行出现以下异常:

Caused by: org.xml.sax.SAXParseException; lineNumber: 31; columnNumber: 17; 元素类型为 "resultMap" 的内容必须匹配 "(constructor?,id*,result*,association*,collection*,discriminator?)"。
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325)
	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:1994)
	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:879)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2973)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
	at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)
	at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:254)
	... 58 more

结论:resultMap内部元素的先后顺序一定要严格!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值