MyBatis多表查询

<mapper namespace="com.idea.mapper.AccountMapper">
   <select id="findAll" resultType="Account">
      select * from Account
   </select>
</mapper>

1.单表查询

1.1首先创建对应Account实体类

public class Account implements Serializable{
   private Integer id;
   private Integer uid;
   private Double money;
   
   //省略set get方法
}

1.2在AccountMapper接口中添加对应的方法

public interface AccountMapper{
   //查询所有账户
   List<Account> findAll();
}

1.3增加映射文件

<mapper namespace="com.idea.mapper.AccountMapper">
   <select id="findAll" resultType="Account">
      select * from Account
   </select>
</mapper>

1.4测试

public void findAll(){
   List<Account> accounts = accountMapper.findAll();
   for(Account account : accounts){
      System.out.println(account);
   }
}

2.Account一对一查询

查询到Account中信息的同时,根据用户id将对应的数据显示出来.

2.1创建User类

public classs User{
   private String username;
   private String addrress;

   //省略set get
}

2.2修改Account类

public class Account implements Serializable{
   private Integer id;
   private Integer uid;
   private Double money;
   
   //省略set get方法
   
   private User user;
   
   public User getUser(){
      return user;
   }
   public void setUser(User user){
      this.user = user;
   }
}

2.3修改AccountMapper.xml

<mapper namespace="com.idea.mapper.AccountMapper">
   <!--建立对应关系-->
   <resultMap type="account" id="accountMap">
      <id column="aid" property="id">
      <result column="uid" property="uid">
      <result column="money" property="money">
      <!--他是用于从表方的引用实体属性-->
      <association property="user" javaType="user">
         <!--column指定数据库列名,property指定实体类属性-->
         <id column="id" property="id">
         <result column="username" property="username">
         <result column="address" property="address">
      </association>
   </resultMap>
   <select id="findAll" resultType="Account">
      select u.*,a.id as aid,a.uid,a.money from account a,user u where a.uid = u.id;
   </select>
</mapper>

2.4AccountMapper接口的方法

public interface AccountMapper{
   //查询所有账户
   List<Account> findAll();
}

2.5测试

public void findAll(){
   List<Account> accounts = accountMapper.findAll();
   for(Account account : accounts){
      System.out.println(account);
   }
}

3一对多查询

3.1User类加入List<Account>

public classs User{
   private String username;
   private String addrress;

   //省略set get

   private List<Account> accounts;
   
   public List<Account> getAccounts(){
      return accounts;
   }
   
   pubnlic void setAccounts(List<Account> accounts){
      this.accounts = accounts;
   }
}

3.2Mapper接口中加入查询方法


List<User> findAll()

3.3Mapper映射文件配置

<mapper namespace="com.idea.mapper.UserMapper">
   <resultMap type="user" id="userMap">
      <id column="id" property="id">
      <result column="username" property="username"/>
      <result column="address" property="address">

      <!--collection是用于建立一对多集合属性的对应关系,ofType用于指定集合元素的数据类型-->

      <collection property="accounts" ofType="Account">
         <id column="aid" property="id">
         <result column="uid" property="uid">
         <result column="money" property="money">
      </collection>
   </resultMap>
   
   <select id="findAll" resultMap="userMap">
      select u.*,a.id as aid,a.uid,a.money from user u left outer join account a on u.id=a.uid
   </select>
   
</mapper>

#collection:定义了用户关联的账户信息。表示关联查询结果集

#property:关联查询结果集存储在User对象上的哪个属性

#ofType:关联查询的结果集中的对象类型即list中的对象类型。

4实现Role到User多对多

4.1编写实体类

public class Role implements Serializable{
   private Integer roleId;
   private String roleName;
   private String roleDesc;
   
   //多对多关系映射,一个角色可以赋值多个用户
   private List<User> users;

   public List<User> getUsers(){
      return users;
   }

   public void setUsers(List<User> users){
    
      this.users = users;
   }
   
   //省略set get
}

4.2编写Role的持久层接口

public interface RoleMapper{
   List<Role> findAll();
}

4.3编写映射文件

<mapper namespace="com.idea.mapper.RoleMapper">
   <resultMap id="roleMap" type="Role">
      <id column="roleId" property="roleId">
      <result column="roleName" property="roleName">
      <result column="roleDesc" property="roleDesc">
      <collection property="users" type="User">
         <id column="id" property="id">
         <result column="username" property="username">
         <result column="address" property="address">
      </collection>
   </resultMap>
   <select id=""findAll resultType="roleMap">
      ...
   </select> 
</mapper>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值