关联查询一对一查询案例:查询所有订单信息,关联查询订单用户信息。注意:由于一个订单信息只能是一个人下的订单,所以从查询订单信息开始,关联查询用户信息是一对一的查询。如果根据用户信息查询用户下的订单信息,就是一对多的查询,因为一个用户可以下多个订单。方法一:使用resultType定义订单信息po类,包含订单信息和用户信息:sql语句:SELECTorders.*,user.username,userss.addressFROMorders,userWHEREorders.user_id=user.id定义po类po类应包括上述SQL查询中的所有字段,如下所示:publicclassOrdersCustomextendsOrders{privateStringusername;//用户名privateStringaddress;//用户地址获取/设置。...OrdersCustom类继承Orders类后,OrdersCustom类包含了Orders类的所有字段,只需要定义用户的信息字段即可。Mapper.xmlSELECTorders.*,user.username,user.addressFROMorders,userWHEREorders.user_id=user.id映射器接口:publicListfindOrdersList()throwsException;Test:PublicvoidtestfindOrdersList()throwsException{//获取sessionSqlSessionsession=sqlSessionFactory.openSession();//受限mapper接口实例UserMapperuserMapper=session.getMapper(UserMapper.class);//查询订单信息Listlist=userMapper.findOrdersList();System.out.println(list);//关闭sessionsession.close();}总结:定义一个特殊的po类作为outputType,它定义了sql查询结果集的所有字段。这种方法比较简单,在企业中应用比较广泛。方法二:使用resultMap定义一个特殊的resultMap,用于映射一对一的查询结果。sql语句:SELECTorders.*,user.username,user.addressFROMorders,userWHEREorders.user_id=user.id定义了po类,在Orders类中添加了User属性。user属性用于存储关联查询的用户信息,因为订单与查询用户是一对一的关系,所以这里使用单个User对象存储关联查询的用户信息。publicclassOrders{privateIntegerid;privateIntegeruserId;privateStringnumber;privateDatecreatetime;privateStringnote;privateUseruser;publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicIntegergetUserId(){returnuserId;}publicvoidsetUserId(IntegeruserId){this.userId=userId;}publicStringgetNumber(){returnnumber;}publicvoidsetNumber(Stringnumber){this.number=number;}publicDategetCreatetime(){returncreatetime;}publicvoidsetCreatetime(Datecreatetime){this.createtime=createtime;}publicStringgetNote(){returnnote;}publicvoidsetNote(Stringnote){this.note=note;}publicUsergetUser(){returnuser;}publicvoidsetUser(Useruser){this.user=user;}@OverridepublicStringtoString(){return"Orders{"+"id="+id+",userId="+userId+,number='"+number+'\''+",createtime="+createtime+",note='"+note+'\''+",user="+user+'}';}}映射器。xmlSELECTo.id,o.user_id,o.number,o.createtime,o.note,u.username,u.addressFROMordersoJOIN`user`uONu.id=o.user_id其中resultMap指定orderUserResultMapassociation:表示对关联查询进行单条记录property:表示关联的结果query存储在com.pp中.mybatis.po的user属性中的javaType。Orders:表示关联查询的结果类型:查询结果的user_id列对应到关联对象的id属性,这里是表示user_id是关联查询对象的唯一标识。:查询结果的username列对应关联对象的username属性。映射器接口:publicListfindOrdersListResultMap()throwsException;Test:PublicvoidtestfindOrdersListResultMap()throwsException{//获取sessionSqlSessionsession=sqlSessionFactory.openSession();//受限mapper接口实例UserMapperuserMapper=session.getMapper(UserMapper.class);//查询订单信息Listlist=userMapper.findOrdersList2();System.out.println(list);//关闭sessionsession.close();}总结:利用association完成关联查询,将关联查询信息映射到pojo对象中。一对多查询案例:查询所有用户信息和与用户关联的订单信息。用户信息和订单信息是一对多的关系。使用resultMap实际如下:SQL语句:SELECTu.*,o.idoid,o.number,o.createtime,o.noteFROM`user`uLEFTJOINordersoONu.id=o.user_id确定义po类在User类中加入Listorders属性publicclassUser{privateintid;privateStringusername;privateStringsex;privateDatebirthday;privateStringaddress;privateListordersList;@OverridepublicStringtoString(){return"User{"+"id="+id+",username='"+username+'\''+",sex='"+sex+'\''+",birthday="+birthday+",address='"+address+'\''+",ordersList="+ordersList+'}';}publicListgetOrdersList(){returnordersList;}publicvoidsetOrdersList(ListordersList){this.ordersList=ordersList;}publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=用户名;}publicStringgetSex(){returnsex;}publicvoidsetSex(Stringsex){this.sex=sex;}publicDategetBirthday(){returnbirthday;}publicvoidsetBirthday(Datebirthday){this.birthday=birthday;}publicStringgetAddress(){returnaddress;}publicvoidsetAddress(Stringaddress){this.address=address;}}Mapper.xmlSELECTu.*,o.idoid,o.number,o.createtime,o.noteFROM`user`uLEFTJOINordersoONu.id=o.user_id集合部分定义了与用户关联的订单信息,表示关联查询的结果集property="orders":关联查询的结果集哪个属性存储在User对象上。ofType="orders":指定关联查询的结果集中的对象类型,即List中的对象类型。可以在此处使用别名或完全限定名称。和的含义与一对一查询相同。映射器接口:ListgetUserOrderList();测试@TestpublicvoidgetUserOrderList(){SqlSessionsession=sqlSessionFactory.openSession();UserMapperuserMapper=session.getMapper(UserMapper.class);Listresult=userMapper.getUserOrderList();for(Useruser:result){System.out.println(用户);}session.close();}