Mybatis学习笔记
原文链接 http://veryyoung.me/blog/2014/12/10/learning-mybatis.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
最近一个项目用Mybatis在做Dao层。
感受了一下,没Hibernate用起来方便,比如insert、update这些都得自己手写sql...
但是可控性确实强了不少,而且入手也极快。
下面记录一些使用过程中需要注意的地方,以后Mybatis遇到的问题都往这贴。
1.简化配置 :
(1)、 每次加一个Entity写typeAliases神马的神烦,换成
<package name="com.package.entity"/>
啥的就ok咯
顺带在xml配置上mapper的basePackage
(2)、每次加完mapper.xml还要注册,又是神烦啊。如下配置就好了。
<bean id="infoSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="infoDataSource" />
<property name="configLocation" value="classpath:mybatis/mybatis-info-config.xml"/>
<property name="mapperLocations" value="classpath:mybatis/mapper/info/*.xml"/>
</bean>
2.多参数查询。
(1)、传Map或者对象。
能传对象当然好咯,不能传对象用map貌似有点不直观,在sercve里面调用的时候还得把mapper的key写对,不太爽。
(2)、用占位符,类似#{0}、#{1}.... 使用方便,但是在in查询,用传入一个枚举的list的时候貌似不work,不知道是不是mybatis的bug,有时间读读源码。
3.神烦的in查询。
还好mybatis支持类似jstl 的foreach语句。可以类似如下写
<select id="listByStatus" resultType="User" parameterType="map">
SELECT * FROM table where status in
<foreach collection="statusList" open="(" close=")" index="" item="status" separator=",">
#{status}
</foreach>
order by timeCreated limit #{start},#{end}
</select>
我觉得这里应该可以简化下,读取sql的时候遇到in,看看后面的是否为list 或者array,如果是,动态拼接字符比较好,省得用foreach这种东东。 嘿嘿!有机会改了发个pr!
4.动态sql。
mybatis 提供了if else foreach when 这些类似jstl的语法, see http://mybatis.github.io/mybatis-3/zh/dynamic-sql.html
5.对象嵌套。
加入user entity里含有userInfo insert的时候用 #{userInfo.place}这样的,可多重嵌套。 select的时候用as,如 select id as "userId" 这样的,as后面的字符要于user 属性存在对应关系。