题目:使用Mybatis,使用XML+接口方式查询表中数据(多对多)
一、思路:
思路(实体类+实体类映射文件+接口+mybatis主配置文件+测试类):
我们的目标是要通过一条sql语句,把三张表里面的数据查询出来。
三张表分别:User,Groups,UserGroups。
第一:改造我们的实体类
1、给User类加个集合属性,该集合的数据类型为Groups类类型
2、给Groups类加个集合属性,该集合的数据类型为User类类型
3、再写UserGroups类
注意:实体类的数据类型和个数要对应数据库中的数据类型和个数学。
第二:写Groups的实体类映射文件和User的实体类映射文件
1、特别注意:以前我们写的select元素的返回值类型是单个实体类类型,而现在改成了自定义返回值类型,用resultMap表示。resultType改成resultMap。
2、然后再自定义resultMap的内容。
定义resultMap里面的内容是重点,务必掌握
第三:自定义接口(接口的方法名必须跟Groups的实体类映射文件select标签的id名一致)
第四:主配置文件里面的别名配置是根据自己的实体类来配置的(可使用:package name=“包名” 代表扫描指定包下的所有实体类文件 )
第五:编写测试类,把查询的结果打印输出显示
二、实际操作
第一步:创建一个数据库,名字为mybatis_test02;在该数据库中创建三张数据表,名字分别为user,groups,usergroups;
Create database mybatis_test02;(创建数据库)
第二步:在我们的java工程的bean包下面新建三个实体类分别为User,Groups,UserGroups,该类的属性和创建表的字段一致。并给他们get、set方法。(给User类加个集合属性,该集合的数据类型为Groups类类型,给Groups类加个集合属性,该集合的数据类型为User类类型)
第三步:配置groupsMapper.xml文件和userGroupsMapper.xml文件。
1、注意:以前我们写的select元素的返回值类型是单个实体类类型,而现在改成了自定义返回值类型,用resultMap表示。resultType改成resultMap。
2、然后再自定义resultMap的内容。
3、因为是多对多所以要配置两个实体映射文件
注意:编写Mapper文件时,为防止sql语句错误可以先在数据库里进行测试
第四步:自定义接口
第五:配置config.xml主配置文件(主配置文件里面有三项实体类的别名配置和两项实体类映射文件配置)
第六:编写测试类
结果:
总结:
1.SqlSession 的实例不是线程安全的,因此是不能被共享的。
2.SqlSession每次使用完成后需要正确关闭,这个关闭操作是必须的。
3.SqlSession可以直接调用方法的id进行数据库操作。
4.config.xml主配置文件中别名和映射都可用package(代表扫描指定包下的所有)。
5.接口中:接口方法名必须跟Groups的实体类映射文件select标签的id名一致
6.groupsMapper.xml实体映射文件中的select属性的路径是UserGroups实体类映射文件的命名空间加select标签的id名