抓取策略(对象导航查询)
fetchType(抓取类型):lazy:懒加载 eager:及时加载
一对多查询,一方查询多方时默认开启懒加载,但idea工具监测能力较强所以两条预计都回执行
但多对一查询时默认是及时查询的(只对应一条数据对性能没有太大影响)
- 及时查询
- 懒加载
一对多映射,从一方查询多方时,默认只查询一方,什么时候查询对方,什么时候能发宋多方的sql
一旦两者间出现什么问题(如会话关闭)会出现错误(注意Mybatis底层用线程池解决了这个问题)
动态SQL
<select id="getUsersif" resultType="com.zx.entity.User" parameterType="com.zx.entity.User">
select * from t_user where 1=1
<if test="username != null">
and username = #{username}
</if>
<if test="age != 0">
and age = #{age}
</if>
</select>
<select id="getUserschoose" resultType="com.zx.entity.User" parameterType="com.zx.entity.User">
select * from t_user where 1=1 choose就是一个分支选择标签,when就是每一个分支,不管有多少分支,只会执行一个。 <choose>
<when test="username!=null">
and username = #{username}
</when>
<when test="age!=0">
and age = #{age}
</when> 默认选项,所有选项不匹配则进入。
<otherwise>
and password = #{password}
</otherwise>
</choose>
</select>
<select id="getUserswhere" resultType="com.zx.entity.User" parameterType="com.zx.entity.User">
select * from t_user where 1=1
<where>他就是咱们的字段 where <where>标签会自动处理WHERE子句中的AND和OR关键字,因此在使用时应该合理安排条件语句的位置,避免出现意外结果。 Where只能去除最前面的关键字,他会自动去除第个条件的and或者or 的关键字,
<if test="username != null">
and username = #{username}
</if>
<if test="age != 0">
and age = #{age}
</if>
</where>
</select>
<select id="getUserstrim" resultType="com.zx.entity.User" parameterType="com.zx.entity.User">
select * from t_user
<trim prefix="where" prefixOverrides="and" suffix="order by">
<if test="username != null">
and username = #{username}
</if>
<if test="age != 0">
and age = #{age}
</if>
</trim>
id desc
</select>
<update id="updateUser" parameterType="com.zx.entity.User">
update t_user
<set>
<if test="username != null">
username = #{username},
</if>
<if test="age != 0">
age = #{age},
</if>
<if test="password != null">
password = #{password},
</if>
</set>
where id = #{id}
</update>
<select id="getUsersforeach" resultType="com.zx.entity.User">
select * from t_user where id in <foreach collection="array" item="id" open="(" close=")" separator=",">#{id}</foreach>
</select>
<insert id="addUser" >
<foreach collection="list" item="user" separator=";">
insert into t_user values (null,#{user.username},#{user.password},#{user.age})
</foreach>
</insert> |