<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          mybatis中基于注解方式的多表查詢

          共 4543字,需瀏覽 10分鐘

           ·

          2021-10-01 13:17

          開發(fā)前的準(zhǔn)備

          當(dāng)前文章中所用到的表以及數(shù)據(jù), 用到的mybatis配置文件可以去這篇文章中查看mybatis基于xml方式的多表查詢

          唯一要注意的是我們?cè)趍ybatis配置文件中, 不再需要加載核心配置文件, 而是要指明使用注解的包

           <mappers>
               <package name="com.raylee.mapper"/>
           </mappers>
          復(fù)制代碼

          用戶類

           public class User {
               private int id;
               private String username;
               private String password;
             
            private List<Order> orderList;
               private List<Role> roleList;
           }
          復(fù)制代碼

          訂單類

           public class Order {
               private int id;
               private Date ordertime;
               private int total;
           
               private User user;
           }
          復(fù)制代碼

          角色類

           public class Role {
               private int id;
               private String roleName;
               private String roleDesc;
           }
          復(fù)制代碼

          注解關(guān)鍵字

          @Insert 添加sql語(yǔ)句使用的注解

          @Update 更新sql語(yǔ)句使用的注解

          @Delete 刪除sql語(yǔ)句使用的注解

          @Select 查詢sql語(yǔ)句使用的注解

          @Result 當(dāng)使用查詢語(yǔ)句時(shí), 返回單條數(shù)據(jù)時(shí)的注解

          @Results 當(dāng)使用查詢語(yǔ)句時(shí), 返回多條數(shù)據(jù)時(shí)的注解, 配合@Result一起使用

          @One 在一對(duì)一的查詢結(jié)果時(shí)使用的注解, 例如: 一個(gè)訂單對(duì)應(yīng)一個(gè)用戶

          @Many 在一對(duì)多的查詢結(jié)果時(shí)使用的注解, 例如: 一個(gè)用戶可以有多個(gè)訂單

          單表查詢

          通過(guò)id查詢users表

           @Select("select * from users where id = #{id}")
           public User findById(int id);
          復(fù)制代碼

          通過(guò)用戶id查詢orders表

           @Select("select * from orders where uid = #{uid}")
           public Order findByUid(int uid);
          復(fù)制代碼

          一對(duì)一查詢

          一個(gè)訂單只屬于一個(gè)用戶, 當(dāng)我們查詢訂單數(shù)據(jù)時(shí)也需要查詢?cè)撚唵嗡鶎?duì)應(yīng)的用戶數(shù)據(jù)

          定義的接口

           public interface OrderMapper {
             @Select("select * from orders")
             @Results({
                   @Result(column = "id", property = "id"),
                   @Result(column = "ordertime", property = "ordertime"),
                   @Result(column = "total", property = "total"),
                   @Result(
                           property = "user",
                           // 根據(jù)哪個(gè)字段去查詢users表中的數(shù)據(jù)
                           column = "uid",
                           javaType = User.class,
                           one = @One(select = "com.raylee.mapper.UserMapper.findById")
                  )
            })
             public List<Order> findAll();
           }
          復(fù)制代碼

          注解分析

          首先, 通過(guò)@Select注解查詢出所有的訂單

          然后, 通過(guò)@Results進(jìn)行字段和實(shí)體類屬性的映射

          最后, 通過(guò)@One再去進(jìn)行每個(gè)訂單中用戶的數(shù)據(jù)查詢

          一對(duì)多查詢

          定義的接口

           @Select("select * from users")
           @Results({
                   @Result(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.raylee.mapper.OrderMapper.findByUid")
                  )
           })
           public List<User> findUserOrderAll();
          復(fù)制代碼

          注解分析

          首先, 通過(guò)@Select注解查詢出所有的用戶

          然后, 通過(guò)@Results進(jìn)行字段和實(shí)體類屬性的映射

          最后, 通過(guò)@Many再去orders表中查詢用戶所有的訂單數(shù)據(jù)

          多對(duì)多查詢

          定義的接口

           @Select("select * from users")
           @Results({
                   @Result(column = "id", property = "id"),
                   @Result(column = "username", property = "username"),
                   @Result(column = "password", property = "password"),
                   @Result(
                           property = "roleList",
                           javaType = List.class,
                           column = "id",
                           many = @Many(select = "com.raylee.mapper.RoleMapper.findByUid")
                  )
           })
           public List<User> findUserRoleAll();
           
           @Select("select * from user_role ur, roles r where ur.rid = r.id and ur.uid = #{uid}")
           public List<Role> findByUid(int uid);
          復(fù)制代碼

          注解分析

          首先, 通過(guò)@Select注解查詢出所有的用戶

          然后, 通過(guò)@Results進(jìn)行字段和實(shí)體類屬性的映射

          最后, 通過(guò)@Many再去roles表和user_role中間表中查詢用戶所有角色信息


          作者:云淡風(fēng)輕的博客
          鏈接:https://juejin.cn/post/7013270827290329124
          來(lái)源:稀土掘金
          著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。



          瀏覽 46
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  内射影视| 狠狠色狠狠爱 | 韩国1级毛片| 国产又爽 又黄 免费网站免费观看 | 鲁一鲁操一操 |