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数据源

存储模式:

posted on 2021-04-24 17:04  居一雪  阅读(477)  评论(0编辑  收藏  举报

导航