MyBatis框架基础知识(04)

举报
海拥 发表于 2021/10/07 17:16:03 2021/10/07
【摘要】 🌊 作者主页:海拥🌊 简介:🏆CSDN全栈领域优质创作者、🥇HDZ核心组成员、🥈蝉联C站周榜前十 1. 1对多的关联数据查询假设需要实现:根据id查询某个用户组的详情时,显示该组的所有用户的信息!需要执行的SQL语句大致是:select * from t_group left join t_user on t_group.id=t_user.group_id where t_gro...

🌊 作者主页:海拥
🌊 简介:🏆CSDN全栈领域优质创作者、🥇HDZ核心组成员、🥈蝉联C站周榜前十

1. 1对多的关联数据查询

假设需要实现:根据id查询某个用户组的详情时,显示该组的所有用户的信息!

需要执行的SQL语句大致是:

select * from t_group left join t_user on t_group.id=t_user.group_id where t_group.id=1;

首先,需要在项目中创建新的GroupVO类,用于封装查询结果:

public class GroupVO {
    private Integer id;
    private String name;
    private List<User> users;
}

GroupMapper接口中添加抽象方法:

GroupVO findVOById(Integer id);

GroupMapper.xml文件中配置SQL映射:

<resultMap id="GroupMap" type="cn.tedu.spring.GroupVO">
	<id column="gid" property="id" />
    <result column="name" property="name" />
    <!-- collection节点:用于配置1对多的属性,也就是List集合类型的属性 -->
    <!-- ofType属性:List集合中的元素的类型 -->
    <!-- 在collection节点的子级的各id、result节点中的property指的是ofType的类中的属性名 -->
    <collection property="users" ofType="cn.tedu.spring.User">
        <id column="id" property="id"/>
        <result column="username" property="username"/>
        <result column="password" property="password"/>
        <result column="age" property="age"/>
        <result column="phone" property="phone"/>
        <result column="email" property="email"/>
        <result column="group_id" property="groupId"/>
    </collection>
</resultMap>

<select id="findVOById" resultMap="GroupMap">
	SELECT 
    	t_group.id AS gid, name,
    	t_user.* 
    FROM 
    	t_group 
    LEFT JOIN
    	t_user 
    ON 
    	t_group.id=t_user.group_id 
    WHERE 
    	t_group.id=#{id}
</select>

【MyBatis阶段小结】

  • 【理解】MyBatis的主要作用:简化持久层开发;

  • 【掌握】使用MyBatis框架时需要添加的依赖;

  • 【认识】使用MyBatis框架时必要的配置;

  • 【掌握】抽象方法的设计原则:

    • 返回值:如果是增、删、改类型的操作,使用Integer作为返回值类型;如果是查询类型的操作,可以使用期望的类型作为返回值类型,只要能把查询结果封装进去就行;
    • 方法名称:自定义,但是不允许重载;
    • 参数列表:根据需要执行的SQL语句中的参数来设计抽象方法的参数列表,简单的说,就是SQL语句中有哪些问号,在抽象方法中就设计哪些参数,当参数较多时,还可以使用封装的类型作为参数,使得抽象方法中的1个参数就可以表示SQL语句中的若干个参数,当抽象方法的参数超过1个时,必须为每个参数都配置@Param注解。
  • 【掌握】配置SQL映射:

    • 通常,每个接口文件都有1个对应的XML文件,在配置SQL语句的XML中,必须在根节点<mapper>中配置namespace属性指定对应的接口文件;
    • 需要根据所执行的SQL语句的种类来选取<insert><delete><update><select>节点,每个节点都必须配置id属性指定对应的抽象方法的名称,<select>还必须配置resultTyperesultMap中的某1个属性。
  • 【理解】#{}${}格式的占位符的区别;

  • 【掌握】解决查询时,查询结果中的列名与封装结果的类的属性名不一致的问题:

    • 在SQL语句中指定列的别名,使得查询结果中的列名能与类的属性名匹配;
    • 配置<resultMap>节点,以指定MyBatis框架完成封装过程。
  • 【掌握】动态SQL的<foreach>节点的使用;

  • 【了解】动态SQL的<if><choose>系列节点的使用;

  • 【理解】实体类与VO类的定位与区别;

  • 【掌握】<resultMap>的配置与使用;

  • 【理解】在处理查询时,什么时候需要自定义别名:

    • 在设计SQL语句中,不使用星号(*)表示字段列表,且存在名称不匹配的问题时,例如实现1对1的关联查询时;
    • 在关联查询时,查询结果中出现了名称完全相同的列名时,必须通过自定义别名,使得查询结果中的每个列名都不同。
  • 【理解】在处理查询时,什么时候需要配置<resultMap>

    • 在SQL语句中使用了星号(*)表示字段列表,且存在名称不匹配的问题时,配置<resultMap>便于应用到多个不同的查询中;
    • 需要实现1对多的关联查询时。

🌊 行业资料:精品PPT模板几千套,简历模板一千多套
🌊 面试题库:Java核心知识点大全和面试真题资料
🌊 学习资料:2300套PHP建站源码,微信小程序入门资料,Python全集(400集)
🌊 学习交流群:点击此处进入

公众号【海拥】内回复【资源】获取以上所有资料

我已经写了很长一段时间的技术博客,这是我的一篇Spring框架基础知识(02)教程。我乐于通过文章分享技术与快乐。您可以访问我的博客主页: 华为云-海拥、我的个人博客:haiyong.site 以了解更多信息。希望你们会喜欢!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。