select * from user and username = #{username} 2、当查询条件在某。mybatis|mybatis中的动态sql语句和多表查询。" />

mybatis|mybatis中的动态sql语句和多表查询

一、当查询条件不确定时,就可使用动态sql语句进行查询。
1、if、where标签的使用:

id="findByCondition" parameterType="user" resultType="user"> select * from user and username = #{username}

2、当查询条件在某个区间时还可以使用foreach标签:
id="findInIds" resultType="User" parameterType="QueryVo"> select * from user #{uid}

foreach标签中的collection属性的值是参数实体类QueryVo中的属性名,item属性的值则决定了接下来取值时的写法,即uid->#{uid}。
注:当我们使用动态sql语句时,会发现每个查询都有一段重复的sql:select * from user,这时我们可以使用sql标签将重复语句提取出来,并在select标签中使用include标签进行调用:
id="defaultSql" > select * from user id="findByCondition" parameterType="user" resultType="user"> and username = #{username}

二、多表间的关系有一对一、一对多、多对多,在mybatis中,它把多对一的情况也看做一对一。当我们需要一次查询出多个表的内容,就可以使用多表查询。
一对一或多对一查询操作:从表实体应该包含一个主表实体的对象引用,并在映射配置文件的resultMap标签中使用association标签,配置封装主表实体,映射配置文件中的代码:
id="findAllAccountUser" resultMap="accountUserMap"> select u.*,a.id as aid,a.uid,a.money from account_user a,user u where u.id = a.uid

【mybatis|mybatis中的动态sql语句和多表查询】一对多和多对多操作:主表实体应该包含从表实体的集合引用,并在映射配置文件的resultMap标签中使用collection标签,配置从表实体集合的映射,映射配置文件中的代码:
id="findAllRoleUser" resultMap="roleUserMap"> SELECT u.*,r.id as rid,r.ROLE_NAME,r.ROLE_DESC from role r left outer join user_role ur on r.id = ur.rID LEFT JOIN user u on ur.uID = u.ID

    推荐阅读