first:创建环境
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
一,一对一
特别: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数据源
存储模式: