zoukankan      html  css  js  c++  java
  • mybatis的连表查询

    first:创建环境

     1 public class Account implements Serializable{
     2     private Integer id;
     3     private Integer uid;
     4     private double money;
     5     
     6     //从表包含一个主表实体
     7     private User user;
     8 
     9     public Integer getId() {
    10         return id;
    11     }
    12 
    13     public void setId(Integer id) {
    14         this.id = id;
    15     }
    16 
    17     public Integer getUid() {
    18         return uid;
    19     }
    20 
    21     @Override
    22     public String toString() {
    23         return "Account [id=" + id + ", uid=" + uid + ", money=" + money + ", user=" + user+ "]";
    24     }
    25 
    26     public void setUid(Integer uid) {
    27         this.uid = uid;
    28     }
    29 
    30     public double getMoney() {
    31         return money;
    32     }
    33 
    34     public void setMoney(double money) {
    35         this.money = money;
    36     }
    37 
    38     public User getUser() {
    39         return user;
    40     }
    41 
    42     public void setUser(User user) {
    43         this.user = user;
    44     }
    45 }
    Account
     1 public class Role {
     2     private Integer id;
     3     private String role;
     4     
     5 //多对多的映射关系
     6     private List<User> users;
     7 
     8     @Override
     9     public String toString() {
    10         return "Role [id=" + id + ", role=" + role + ", users=" + users + "]";
    11     }
    12 
    13     public Integer getId() {
    14         return id;
    15     }
    16 
    17     public void setId(Integer id) {
    18         this.id = id;
    19     }
    20 
    21     public String getRole() {
    22         return role;
    23     }
    24 
    25     public void setRole(String role) {
    26         this.role = role;
    27     }
    28 
    29     public List<User> getUsers() {
    30         return users;
    31     }
    32 
    33     public void setUsers(List<User> users) {
    34         this.users = users;
    35     }
    36 }
    Role
     1 public class User implements Serializable{
     2     private Integer id;
     3     private String name;
     4     private List<Integer> idList;
     5     //一对多的映射关系,主表实体包含从表list
     6     private List<Account> accounts;
     7     
     8     //多对多的映射关系,
     9     private List<Role> roles;
    10     
    11     public List<Role> getRoles() {
    12         return roles;
    13     }
    14     public void setRoles(List<Role> roles) {
    15         this.roles = roles;
    16     }
    17     public List<Account> getAccounts() {
    18         return accounts;
    19     }
    20     public void setAccounts(List<Account> accounts) {
    21         this.accounts = accounts;
    22     }
    23     public List<Integer> getIdList() {
    24         return idList;
    25     }
    26     public void setIdList(List<Integer> idList) {
    27         this.idList = idList;
    28     }
    29     public Integer getId() {
    30         return id;
    31     }
    32     public void setId(Integer id) {
    33         this.id = id;
    34     }
    35     public String getName() {
    36         return name;
    37     }
    38     public void setName(String name) {
    39         this.name = name;
    40     }
    41     @Override
    42     public String toString() {
    43         return "User [id=" + id + ", name=" + name + ", roles=" + roles + "]";
    44     }
    45     
    46     
    47 }
    User

    一,一对一

    特别:mybatis中将多对一,看做一对一

    <!-- 定义account和user的resultMap -->
            <resultMap type="account" id="accountUserMap">
            <id property="id" column="aid"></id>
            <result property="uid" column="user_id" ></result>
            <result property="money" column="money" ></result>
            <!--    定义封装User里的内容 ,即外键的内容 -->
            <!-- javaType="user" 这里本来应该写全类名,但是主配置中写了别名 -->
            <association property="user" column="user_id" javaType="user">
            <id property="id" column="id"></id>
            <result property="name" column="name" ></result>
            
            </association> 
            </resultMap>
    
        <!-- 一对一,或者多对一  配置查询所有  -->
            <select id="findAll" resultMap="accountUserMap">
                    select u.*,a.id as aid,a.user_id ,a.money from my_account as a,user as u where a.id=u.id ;
            </select>
            

    二,一对多

    <!-- 一对多 -->
        <resultMap type="user" id="userAccountMap">
            <id property="id" column="id"></id>
            <result property="name" column="name" ></result>
            
            <!--    定义封装accounts里的内容 ,即外键的内容 -->
            <!-- ofType="account" 这里本来应该写全类名,但是主配置中写了别名 -->
            <collection property="accounts" ofType="account">
                <id property="id" column="aid"></id>
                <result property="uid" column="user_id" ></result>
                <result property="money" column="money" ></result>
            </collection>
            
            </resultMap>
            
            
            <select id="findAllDuo" resultMap="userAccountMap">
                    select u.*,a.id as aid,a.user_id ,a.money from my_account as a,user as u where a.id=u.id ;
            </select>
            

    三,多对多

    <!-- 多对多 -->
            
            <resultMap type="user" id="userRoleMap">
            <id property="id" column="id"></id>
            <result property="name" column="name" ></result>
            
            <!--    定义封装Roles里的内容 ,即外键的内容 -->
            <!-- ofType="account" 这里本来应该写全类名,但是主配置中写了别名 -->
            <collection property="roles" ofType="role">
                <id property="id" column="rid"></id>
            
                <result property="role" column="role" ></result>
            </collection>
            
            </resultMap>
            
            
            <select id="findAllManyTOMany" resultMap="userRoleMap">
                    select u.*,r.id as rid, r.role from user as u left outer join myusertorole ur on u.id=ur.user_id left outer join 
                      my_role r on r.id=ur.role_id
                 
            </select>

     四,补充:JNDI数据源

    存储模式:

  • 相关阅读:
    c#多线程
    [2017.02.05] 阅读《Efficient C++》思维导图
    [2017.02.04] C++学习记录(1)
    [2017.01.04] 经典排序算法思想及其实现
    [2017.01.04] 2017 新年展望
    [151225] Python3 实现最大堆、堆排序,解决TopK问题
    [160111] Python学习记录
    [151116 记录] 使用Python3.5爬取豆瓣电影Top250
    151111 sqlite3数据库学习
    20141127 测试使用Word2013书写博客(代码高亮+公式支持)。
  • 原文地址:https://www.cnblogs.com/gjx1212/p/14697424.html
Copyright © 2011-2022 走看看