一、常用操作
1. 批量操作
批量操作:批量查询、批量插入、批量修改、批量删除,批量操作的效率要比for循环高很多。
在Mybatis中批量操作最多就是批量插入和批量删除。一般采用foreach标签,但是这也与字段数量和条数有关,对于大批量的操作而言,推荐使用ExecutorType.BATCH插入方式。
参照例如:http://www.pianshen.com/article/215691520/
二、常见错误
1. 现象:MyBatis xml文件中查询的返回类型写成list或java.util.List时,执行sql时报 java.lang.UnsupportedOperationException错误。
代码:
java:List<Long> findSignId();
xml:<select id="findSignId" resultType="java.util.List"> select sign_id from group_manage </select>
错误:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.UnsupportedOperationException
解决方式:
xml:<select id="findSignId" resultType="long"> select sign_id from group_manage </select>
详解:返回类型应该是List里面的泛型,而不是List本身。
2. 现象:MyBatis mapper类传递单个参数到xml中if判空,执行sql时报org.mybatis.spring.MyBatisSystemException异常。
代码:
错误:
解决方式:
详解:MyBatis 有自己的内置对象。
3. 抽象业务代码
package com.xingyunliushui.dao; import java.util.List; public interface BaseQueryMapper { <T> List<T> selectAll(T record); <T> T selectOne(T record); <T> Integer countSelect(T record); }
调用时会报org.apache.ibatis.binding.BindingException异常,如:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.nsac.xingyunliushui.user.RoleMapper.selectAll at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:225) at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) at com.sun.proxy.$Proxy225.selectAll(Unknown Source) 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:498) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
解决办法:还是要写mapper对应的xml文件。