一对多关系的配置
步骤1:数据库中的两张表对应两个实体类Command、CommandContent,其中Command类中应该存放一个集合用来存放CommandContent。
步骤2:为这两个实体类配置sql配置文件。
CommandContent.xml
Command.xml
步骤3:sql配置文件中编写关联查询,使用left join进行关联查询,当出现两张表时,通过起别名方便引用,关联条件是a作为主表时,a的id等于b的command-id。
步骤4:主表command.xml中配置,在映射关系中添加主表对应子表的集合,collection标签中的property值为集合属性名,resultMap值为command_content.xml的mapper的namespace+resultMap的id。
注意:
1、resultMap中的result标签和id标签的column属性不是数据库中表的列名,而是SELECT查询出来的结果集的名称,如果给查询出来的字段起了别名,则column要改为相应的别名。
2、列名前表的别名,加载列名前的前缀不能算作结果集的一部分的(可以通过jdbc的结果集对象调用getMetaData().getColumnName()打印输出,是没有列名前的表的别名),Mybatis也一样,如果查询返回的结果的字段名不在以上的方法中,则不会映射到实体类中。
问题:查询出来都有id字段,而表的别名又不能在映射中使用,所以这里只需要给其中一个id字段改一个别名。
步骤5:由于新添加了两个sql配置文件,所以需要在Mybatis核心配置文件中引入。
注意事项:
mybatis中xml配置文件resultMap中的column属性不是和数据库中的列名对应,而是和sql语句中的列名名称一致,若出现别名,则column就需要写别名。
在总的配置文件中引入Command.xml和CommandContent.xml文件,否则报错,自己可以尝试下,记下来这个错误信息。
Command.xml初始化结构