首页 > 其他 > 详细

模块一-第5部分-Mybatis复杂映射开发

时间:2020-10-18 12:19:57      阅读:30      评论:0      收藏:0      [点我收藏+]

【1】一对一查询

一、一对一查询模型

例:用户和订单之间的关系,查询一个订单所属的一个用户

二、一对一查询语句

select * from orders o,user u where o.uid=u.id;

三、创建实体类

/*
*	Order类
*/
public class Order {
    private int id;
    private String orderinfo;
    // 订单所属的用户
    private User user;
}
/*
*	User类
*/
public class User {
    private int id;
    private String name;
}

四、创建Mapper接口

public interface OrderMapper { 
	List<Order> findAll(); 
}

五、配置xml文件(OrderMapper.xml)

<mapper namespace="com.Zhou.mapper.OrderMapper">
    <!--容器封装映射-->
    <resultMap id="orderMap" type="com.Zhou.Pojo.Order">
        <result column="uid" property="user.id"></result>
        <result column="name" property="user.name"></result>
    </resultMap>
    <!--SQL语句查询-->
    <select id="findAll" resultMap="orderMap">
        select * from orders o,user u where o.uid=u.id
    </select>
</mapper>

其中还可以配置如下:

<mapper namespace="com.Zhou.mapper.OrderMapper">
    <!--容器封装映射-->
    <resultMap id="orderMap" type="com.Zhou.Pojo.Order">
        <result property="id" column="id"></result>
        <result property="orderinfo" column="orderinfo"></result>
        <association property="user" javaType="com.Zhou.Pojo.User">
            <result column="uid" property="id"></result>
            <result column="name" property="name"></result>
        </association>
    </resultMap>
    <!--SQL语句查询-->
    <select id="findAll" resultMap="orderMap">
        select * from orders o,user u where o.uid=u.id
    </select>
</mapper>

六、测试结果

/**
* 查询一个订单对应的一个用户
*/
@Test
public void findOrders(){
    OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
    List<Order> all = mapper.findAll();
    for (Order order :
         all) {
        System.out.println(order);
    }
}

【2】一对多查询

一、一对多查询模型

例:用户和订单之间的关系,查询一个用户的所有订单

二、一对多查询语句

select *,o.id oid from user u left join orders o on u.id=o.uid;

三、修改User实体

/*
*	Order类
*/
public class Order { 
	private int id; 
	private Date ordertime; 
	private double total;
	
	//代表当前订单从属于哪一个客户 
	private User user; 
}
/*
*	User类
*/
public class User { 
	private int id; 
	private String name; 
	 
    // 当前用户拥有的所有订单
    private  List<Order> orders;
}

四、创建Mapper接口

public interface UserMapper { 
	List<Order> findAll(); 
}

五、配置xml文件(UserMapper.xml)

<mapper namespace="com.Zhou.mapper.UserMapper">
    <resultMap id="userMap" type="com.Zhou.Pojo.User">
        <result column="id" property="id"></result>
        <result column="name" property="name"></result>
        <collection property="orders" ofType="com.Zhou.Pojo.Order">
            <result column="oid" property="id"></result>
            <result column="orderinfo" property="orderInfo"></result>
        </collection>
    </resultMap>
    <select id="findAll" resultMap="userMap">
        select *,o.id oid from user u left join orders o on u.id=o.uid;
    </select>
</mapper>

六、测试结果

@Test
public void findAll(){
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> all = mapper.findAll();
    for (User user :
         all) {
        System.out.println(user);
    }
    sqlSession.close();
}

【3】多对多查询

一、多对多查询模型

例:用户和角色的关系,查询用户的同时查询该用户的所有角色。

二、多对多查询语句

select u.*,r.*,r.id rid from user u left join user_role ur on u.id=ur.user_id inner join role r on ur.role_id=r.id;

三、创建Role实体、修改User实体

/*
*	User类
*/
public class User {
    private int id;
    private String name;

    private List<Order> orders;
    
    private List<Role>  roles;

}
/*
*	Role类
*/
public class Role {
    private int id;
    private String roleName;
}

四、添加UserMapper接口方法

public interface UserMapper {
    List<User> findAll();
	// 新增查询所有用户的对应的角色的接口方法
    List<User> findAllUserAndRole();
}

五、配置UserMapper.xml文件

<resultMap id="userRoleMap" type="com.Zhou.Pojo.User">
        <result column="id" property="id"></result>
        <result column="name" property="name"></result>
        <collection property="roles" ofType="com.Zhou.Pojo.Role">
            <result column="rid" property="id"></result>
            <result column="roleName" property="roleName"></result>
        </collection>
    </resultMap>
    <select id="findAllUserAndRole" resultMap="userRoleMap">
        select u.*,r.*,r.id rid 
        from user u 
        	left join user_role ur on u.id=ur.user_id 
        	inner join role r on ur.role_id=r.id;
    </select>

六、测试结果

@Test
public void findAllUserAndRole(){
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> allUserAndRole = mapper.findAllUserAndRole();
    for (User user :
         allUserAndRole) {
        System.out.println(user);
    }
    sqlSession.close();
}

【4】个人理解

通过xml文件配置进行映射开发的完整步骤:

  1. 【MySQL】根据需求创建对应的表;
  2. 【MySQL】写好对应的查询语句,并验证结果;
  3. 【IDE】根据表建立(或修改)实体类;
  4. 【IDE】创建对应的接口方法;
  5. 【IDE】配置对应的xml文件;
    1. 配置映射关系;
    2. 配置查询语句。
  6. 【IDE】创建测试方法,测试结果。

模块一-第5部分-Mybatis复杂映射开发

原文:https://www.cnblogs.com/CN-Zhou/p/13834076.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!