一:resultMap与resultType的用法
1、都是用于SQL的mapper映射;
2、resultMap用于自定的手动定义属性和结果集中的列名的映射;resultType用于属性和列名能自动一一对应的映射
3、二者都只反映一一对应的关系,并不返回值。
一对多关系:
需要多的一方记住少的一方;
在少的一方定义一个集合用于封装多的一方,接口和XML和一对一关系中的写法类似,只是SQL语句不通,需要用到连表查询。即用<resultMap>标签中的<collection >标签或
<association >标签
具体代码如下:
public interface IKeyMapper {
/**
* 为某一个锁批量添加钥匙
* @return
* @throws Exception
*/
public int batchSaveKeys(@Param("keys") List<KeyBean> keys)throws Exception;
/**
* 查询钥匙的同时,将锁也查出来
* @param id
* @return
*/
public KeyBean queryKeyBeanWithLockBean(int id);
}
<mapper namespace="com.lovo.my.dao.IKeyMapper">
<resultMap id="keyWithLockMap" type="keyBean">
<result property="id" column="id" javaType="java.lang.Integer"></result>
<result property="keyName" column="key_name" javaType="java.lang.String"></result>
<association property="lock" column="fk_lock_id" select="com.lovo.my.dao.ILockMapper.getLockBeanById" javaType="LockBean"/>
</resultMap>
<insert id="batchSaveKeys" parameterType="java.util.List">
insert into t_key(key_name,fk_lock_id) values
<foreach collection="keys" item="key" separator=",">
(#{key.keyName},#{key.lock.id})
</foreach>
</insert>
<select id="findKeyBeanByLockId" resultType="KeyBean">
select id as id,key_name as keyName from t_key where fk_lock_id = #{id}
</select>
<select id="queryKeyBeanWithLockBean" resultMap="keyWithLockMap">
select * from t_key where id = #{id}
</select>
</mapper>
多对多:
需要用到中间表,把多对多关系转换成一对多关系,特别的要用到子查询。
缓存:
分为事务缓存和应用缓存,又称一级缓存和二级缓存
事务缓存存在于应用缓存之中,一个应用缓存有多个事务缓存,当一级缓存使用完才使用二级缓存。默认情况下是没有开启缓存的,除了局部的 session 缓存,可以增强变现而且处理循环
依赖也是必须的。要开启二级缓存,你需要在你的 SQL 映射文件中添加一行:
<cache/>
需要用缓存的条件:
1、数据量少
2、低并发
3、不经常修改的数据