栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis复习day03多表操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis复习day03多表操作

MyBatis多表操作

多表查询即是查询返回结果时它无法自动的对上号,咱就手动的给它封一个Map,手动的人为让数据映射。

以下两张表用于举例

orders表:

users表:

example:一对一查询 一个订单对应一个用户

    private int id;
    private Date ordertime;
    private double total;
    // 注意  此处没有直接使用外键   private int uid
    // 功能实现上来讲 没问题   但java讲究的是面向对象   uid此处为连接另一个表的外键
    // 表与表的关系是通过主外键达成的
    // 实体与实体的关系是通过实体的引用去达成的
    // 面向对象的思想  通过实体去引用
    // 当前订单属于哪一个用户
    private User user;


    


        

        
        
        
        
        
        
    

    
        SELECT *,o.id oid,u.id uid FROM orders o,USER u WHERe o.uid=u.id
    

此处是让order表与user表进行连表查询。第二种方法:

    

        
        
        
        


        
            
            
            
        

    

example:一对多查询 一个用户对应多个订单

   private int id;
    private String username;
    private String password;


    // 描述的是当前用于存在哪些订单
    private List orderList;



    public List getOrderList() {
        return orderList;
    }

    public void setOrderList(List orderList) {
        this.orderList = orderList;
    }
    
            
        
        
        

        

            
            
            
        
    

    
        SELECT * FROM USER u,sys_user_role ur,sys_role r WHERe u.id=ur.userId AND ur.roleId=r.id
    

知识小结

    一对一配置:(或者+association标签)一对多配置:+多对多配置:+
MyBatis注解开发 1.1MyBatis的常用注解

@Insert:实现新增 @Update:实现更新 @Delete:实现删除 @Select:实现查询

@Result:实现结果集封装 @Results:可以与@Result一起使用,封装多个结果集

@One:实现一对一结果集封装 @Many:实现一对多结果集封装

example:

public interface UserMapper {

    @Insert("insert into user values(#{id},#{username},#{password},#{birthday})")
    public void save(User user);

    @Update("update user set username=#{username},password=#{password} where id=#{id}")
    public void update(User user);

    @Delete("delete from user where id=#{id}")
    public void delete(int id);

    @Select("select * from user where id = #{id}")
    public User findById(int id);

    @Select("select * from user")
    public List findAll();

}

使用注解开发,就不需要接口的映射文件,也不需要去加载映射文件。但是仍需要在mybatis核心配置文件中去加载映射关系,例如:


    

        
    
1.2MyBatis的注解实现复杂映射开发

使用@Results @One @Many注解组合完成复杂的关系的配置

example:

一对一

一个用户对应一个订单

    @Select("select * from orders o,user u where o.uid=u.id")
    @Results({
            @Result(column="oid",property="id"),
            @Result(column="ordertime",property="ordertime"),
            @Result(column="total",property="total"),
            @Result(column="uid",property="user.id"),
            @Result(column="username",property="user.username"),
            @Result(column="password",property="user.password")
    })
    public List findAll();

第二种方式:

    @Select("select * from orders o,user u where o.uid=u.id")
    @Results({
            @Result(column="oid",property="id"),
            @Result(column="ordertime",property="ordertime"),
            @Result(column="total",property="total"),
            @Result(
                    property="user",//要封装的属性名称
                    column="uid",//根据那个字段去查询user表的数据
                    javaType = User.class, //要封装的实体类型
                    // select 属性   代表查询那个接口的方法去获得数据
                    one = @One(select = "com.lxz.mapper.UserMapper.findById")//嵌套查询  查询中又含一个查询 
            )
    })
    public List findAll();

一对多

一个用户多个订单,即上述user表里面一条数据对应order表中多条数据。

    private int id;
    private String username;
    private String password;
    private Date birthday;

    // 描述的是当前用户具有的订单
    private List orderList;
 @Select("select * from orders where uid=#{uid}")
 public List findByUid(int uid);

    @Select("select * from user")
    @Results({
            @Result(id=true,column="id",property="id"),
            @Result(column="username",property="username"),
            @Result(column="password",property="password"),
            @Result(
                    property = "orderList",
                    column = "id",
                    javaType = List.class,
                    many = @Many(select = "com.lxz.mapper.OrderMapper.findByUid")  //嵌套查询
            )
})
    public List findUserAndOrderAll();

多对多

一个用户有多个角色,一个角色可以被多个用户所用。

查询需求:查询用户的时候同时查出该用户的多种角色。

user表:

sys_user_role表:

sys_role表:

SELECT * FROM USER" 
SELECt * FROM sys_user_role ur,sys_role r WHERe ur.roleId=r.id AND ur.userId=上一句sql结果的id的值
    private int id;
    private String username;
    private String password;
    private Date birthday;

    //当前用户具备哪些角色
    private List roleList;
   @Select("SELECT * FROM sys_user_role ur,sys_role r WHERe ur.roleId=r.id AND ur.userId=#{uid}")
    public List findByUid(int uid);

    @Select("SELECT * FROM USER")
    @Results({
            @Result(id=true,column="id",property="id"),
            @Result(column = "username",property="username"),
            @Result(column = "password",property="password"),
            @Result(
                    property = "roleList",
                    column = "id",
                    javaType = List.class,
                    many = @Many(select="com.lxz.mapper.RoleMapper.findByUid")
            )
    })
    public List findUserAndRoleAll();

总结:利用三天时间复习了之前学过的MyBatis
!还是孔子那句话,温故而知新。所以兄弟们,冲冲冲!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/755155.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号