最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis 三表外關(guān)聯(lián)查詢的實(shí)現(xiàn)(用戶、角色、權(quán)限)

 更新時(shí)間:2020年08月06日 10:04:37   作者:CSDN-Lemon  
這篇文章主要介紹了MyBatis 三表外關(guān)聯(lián)查詢的實(shí)現(xiàn)(用戶、角色、權(quán)限),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、數(shù)據(jù)庫(kù)結(jié)構(gòu)

二、查詢所有數(shù)據(jù)記錄(SQL語(yǔ)句)


SQL語(yǔ)句:

SELECT u.*, r.*, a.* FROM
(
  (
    ( user u INNER JOIN user_role ur ON ur.user_id = u.user_id )
    INNER JOIN role r ON r.role_id = ur.role_id
  )
  INNER JOIN role_authority ra ON ra.role_id = r.role_id
)
INNER JOIN authority a ON ra.authority_id = a.authority_id

三、詳細(xì)代碼(第一中方式)

1、實(shí)體類entity

package cn.lemon.demo.entity;

import lombok.Data;

import java.io.Serializable;

@Data
public class AuthorityEntity implements Serializable {
  private Integer authorityId;
  private String authorityName;
  private String authorityDescription;
}
package cn.lemon.demo.entity;

import lombok.Data;

import java.io.Serializable;

@Data
public class RoleEntity implements Serializable {
  private Integer roleId;
  private String roleName;
  private String roleDescription;
}
package cn.lemon.demo.entity;

import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

@Data
public class UserEntity implements Serializable {
  private Integer userId;
  private String userName;
  private String userSex;
  private Date userBirthday;
  private String userAddress;

  private List<RoleEntity> roleEntityList;
  private List<AuthorityEntity> authorityEntityList;
}

2、數(shù)據(jù)訪問(wèn)層dao、Mapper

package cn.lemon.demo.dao;

import cn.lemon.demo.entity.UserEntity;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface IUserDao {
  /**
   * 查詢所有關(guān)聯(lián)的數(shù)據(jù)
   *
   * @return
   */
  List<UserEntity> selectAllUserRoleAuthority();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.lemon.demo.dao.IUserDao">
  <select id="selectAllUserRoleAuthority" resultMap="userMap">
    SELECT u.*, r.*, a.* FROM
    (
      (
        ( user u INNER JOIN user_role ur ON ur.user_id = u.user_id )
        INNER JOIN role r ON r.role_id = ur.role_id
      )
      INNER JOIN role_authority ra ON ra.role_id = r.role_id
    )
    INNER JOIN authority a ON ra.authority_id = a.authority_id
  </select>
  
  <resultMap id="userMap" type="cn.lemon.demo.entity.UserEntity">
    <id property="userId" column="user_id"/>
    <result property="userName" column="user_name"/>
    <result property="userSex" column="user_sex"/>
    <result property="userBirthday" column="user_birthday"/>
    <result property="userAddress" column="user_address"/>
    <collection property="roleEntityList" ofType="cn.lemon.demo.entity.RoleEntity" resultMap="roleMap"/>
    <collection property="authorityEntityList" ofType="cn.lemon.demo.entity.AuthorityEntity" resultMap="authorityMap"/>
  </resultMap>
  <resultMap id="roleMap" type="cn.lemon.demo.entity.RoleEntity">
    <id property="roleId" column="role_id"/>
    <result property="roleName" column="role_name"/>
    <result property="roleDescription" column="role_description"/>
  </resultMap>
  <resultMap id="authorityMap" type="cn.lemon.demo.entity.AuthorityEntity">
    <id property="authorityId" column="authority_id"/>
    <result property="authorityName" column="authority_name"/>
    <result property="authorityDescription" column="authority_description"/>
  </resultMap>
</mapper>

3、業(yè)務(wù)層service

package cn.lemon.demo.service;

import cn.lemon.demo.entity.UserEntity;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public interface IUserService {
  List<UserEntity> selectAllUserRoleAuthority();
}
package cn.lemon.demo.service.impl;

import cn.lemon.demo.dao.IUserDao;
import cn.lemon.demo.entity.UserEntity;
import cn.lemon.demo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements IUserService {
  @Autowired
  private IUserDao userDao;

  @Override
  public List<UserEntity> selectAllUserRoleAuthority() {
    return userDao.selectAllUserRoleAuthority();
  }
}

4、測(cè)試類

package cn.lemon.demo.service.impl;

import cn.lemon.demo.entity.UserEntity;
import cn.lemon.demo.service.IUserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@SpringBootTest
@RunWith(SpringRunner.class)
public class UserServiceImplTest {
  @Autowired
  private IUserService userService;

  @Test
  public void selectAllUserRoleAuthority() {
    List<UserEntity> userEntities = userService.selectAllUserRoleAuthority();
    for (UserEntity userEntity : userEntities) {
      System.out.println(
          "用戶姓名:" + userEntity.getUserName() +
          "用戶地址:" + userEntity.getUserAddress() +
          "權(quán)限列表:" + userEntity.getAuthorityEntityList() +
          "角色列表:" + userEntity.getRoleEntityList());
      System.out.println("--------------------------------------");
    }
  }
}

四、詳細(xì)代碼(第二中方式)

1、實(shí)體類entity (實(shí)體類可以省略不寫)

package cn.lemon.demo.entity;

import lombok.Data;

import java.io.Serializable;
import java.util.Date;

@Data
public class UserEntity implements Serializable {
  private Long userId;
  private String userName;
  private String userSex;
  private Date userBirthday;
  private String userAddress;
}
package cn.lemon.demo.entity;

import lombok.Data;

import java.io.Serializable;

@Data
public class RoleEntity implements Serializable {
  private Long roleId;
  private String roleName;
  private String roleDescription;
}
package cn.lemon.demo.entity;

import lombok.Data;

import java.io.Serializable;

@Data
public class AuthorityEntity implements Serializable {
  private Long authorityId;
  private String authorityName;
  private String authorityDescription;
}

2、數(shù)據(jù)訪問(wèn)層dao、Mapper

package cn.lemon.demo.dao;

import java.util.List;
import java.util.Map;

public interface IUserDao {
  List<Map> selectAllUserRoleAuthority();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.lemon.demo.dao.IUserDao">
  <!--查詢 用戶信息,角色信息,權(quán)限信息-->
  <select id="selectAllUserRoleAuthority" resultType="java.util.Map">
    SELECT
    u.user_id userId,
    u.user_name userName,
    u.user_sex userSex,
    u.user_birthday userBirthday,
    u.user_address userAddress,
    r.role_name roleName,
    r.role_description roleDescription,
    a.authority_name authorityName,
    a.authority_description authorityDescription
    FROM
      (
        (
          ( USER u INNER JOIN user_role ur ON u.user_id = ur.user_id )
          INNER JOIN role r ON r.role_id = ur.role_id
        )
        INNER JOIN role_authority ra ON ra.role_id = r.role_id
      )
    INNER JOIN authority a ON a.authority_id = ra.authority_id
  </select>
</mapper>

3、業(yè)務(wù)層service (接口及實(shí)現(xiàn)類)

package cn.lemon.demo.service;

import java.util.List;
import java.util.Map;

public interface IUserService {
  List<Map> selectAllUserRoleAuthority();
}
package cn.lemon.demo.service.impl;

import cn.lemon.demo.dao.IUserDao;
import cn.lemon.demo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

@Service
public class UserServiceImpl implements IUserService {
  @Autowired
  private IUserDao userDao;

  @Override
  public List<Map> selectAllUserRoleAuthority() {
    return userDao.selectAllUserRoleAuthority();
  }
}

4、控制層controller

package cn.lemon.demo.controller;

import cn.lemon.demo.service.IUserService;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;
import java.util.Map;

@Controller
@RequestMapping(value = "/")
public class SystemController {
  @Autowired
  private IUserService userService;
  /**
   * 跳轉(zhuǎn)頁(yè)面
   *
   * @return
   */
  @RequestMapping(value = "index")
  public String index() {
    return "index";
  }

  /**
   * 查詢所有關(guān)聯(lián)的數(shù)據(jù) 用戶信息,角色信息,權(quán)限信息
   * @return
   */
  @RequestMapping(value = "selectAll",method = RequestMethod.POST)
  @ResponseBody
  public String selectAll(){
    List<Map> mapList = userService.selectAllUserRoleAuthority();
    JSONObject json = new JSONObject();
    json.put("mapList",mapList);
    System.out.println(json.toJSONString());
    return json.toJSONString();
  }
}

5、前端頁(yè)面 index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>首頁(yè)</title>
  <script type="text/javascript" th:src="@{/static/js/jquery-1.11.3.min.js}"></script>
</head>
<body>
<div id="head">
  <table width="100%" align="center" border="2px" cellspacing="2px">
    <thead>
    <tr>
      <th>用戶編號(hào)</th>
      <th>用戶姓名</th>
      <th>用戶性別</th>
      <th>用戶生日</th>
      <th>用戶地址</th>
      <th>角色名稱</th>
      <th>角色描述</th>
      <th>權(quán)限名稱</th>
      <th>權(quán)限描述</th>
    </tr>
    </thead>
    <tbody id="tbody">

    </tbody>
  </table>
</div>
<script type="text/javascript">
  $(function () {
    $.ajax({
      type: "post",
      url: '/selectAll',
      contentType: "application/json;charset=utf-8",
      dataType: 'json',
      //async: false,/*表示請(qǐng)求為同步方式*/
      success: function (data) {
        //在<tbody>中追加數(shù)據(jù)
        for (var i = 0; i < data.mapList.length; i++) {
          $("#tbody").append("<tr><td>" + data.mapList[i].userId + "</td>" +
            "<td>" + data.mapList[i].userName + "</td>" +
            "<td>" + data.mapList[i].userSex + "</td>" +
            "<td>" + data.mapList[i].userBirthday + "</td>" +
            "<td>" + data.mapList[i].userAddress + "</td>" +
            "<td>" + data.mapList[i].roleName + "</td>" +
            "<td>" + data.mapList[i].roleDescription + "</td>" +
            "<td>" + data.mapList[i].authorityName + "</td>" +
            "<td>" + data.mapList[i].authorityDescription + "</td>" +
            "</tr>");
        }
      },
      error: function () {
        window.alert("查詢失敗");
      }
    });
  });
</script>
</body>
</html>

運(yùn)行 localhost:8080 顯示:

到此這篇關(guān)于MyBatis 三表外關(guān)聯(lián)查詢的實(shí)現(xiàn)(用戶、角色、權(quán)限)的文章就介紹到這了,更多相關(guān)MyBatis 外關(guān)聯(lián)查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Iterator刪除List中的多個(gè)元素操作

    使用Iterator刪除List中的多個(gè)元素操作

    這篇文章主要介紹了使用Iterator刪除List中的多個(gè)元素操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • MyBatis寫入Json字段以及Json字段轉(zhuǎn)對(duì)象示例詳解

    MyBatis寫入Json字段以及Json字段轉(zhuǎn)對(duì)象示例詳解

    這篇文章主要給大家介紹了關(guān)于MyBatis寫入Json字段以及Json字段轉(zhuǎn)對(duì)象的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 學(xué)習(xí)Java模擬實(shí)現(xiàn)百度文檔在線瀏覽

    學(xué)習(xí)Java模擬實(shí)現(xiàn)百度文檔在線瀏覽

    這片文章介紹了如何使用Java模擬實(shí)現(xiàn)百度文檔在線瀏覽,文章思路清晰,需要的朋友可以參考下
    2015-07-07
  • Java面試最容易被刷的重難點(diǎn)之鎖的使用策略

    Java面試最容易被刷的重難點(diǎn)之鎖的使用策略

    鎖像synchronized同步塊一樣,是一種線程同步機(jī)制,但比Java中的synchronized同步塊更復(fù)雜。因?yàn)殒i(以及其它更高級(jí)的線程同步機(jī)制)是由synchronized同步塊的方式實(shí)現(xiàn)的,所以我們還不能完全擺脫synchronized關(guān)鍵字
    2021-10-10
  • SpringBoot集成Quartz實(shí)現(xiàn)持久化定時(shí)接口調(diào)用任務(wù)

    SpringBoot集成Quartz實(shí)現(xiàn)持久化定時(shí)接口調(diào)用任務(wù)

    Quartz是功能強(qiáng)大的開(kāi)源作業(yè)調(diào)度庫(kù),幾乎可以集成到任何?Java?應(yīng)用程序中,從最小的獨(dú)立應(yīng)用程序到最大的電子商務(wù)系統(tǒng),本文將通過(guò)代碼示例給大家介紹SpringBoot集成Quartz實(shí)現(xiàn)持久化定時(shí)接口調(diào)用任務(wù),需要的朋友可以參考下
    2023-07-07
  • java使用spring實(shí)現(xiàn)讀寫分離的示例代碼

    java使用spring實(shí)現(xiàn)讀寫分離的示例代碼

    本篇文章主要介紹了java使用spring實(shí)現(xiàn)讀寫分離的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Log4j按級(jí)別輸出日志到不同文件的實(shí)現(xiàn)方法

    Log4j按級(jí)別輸出日志到不同文件的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇Log4j按級(jí)別輸出日志到不同文件的實(shí)現(xiàn)方法。
    2016-11-11
  • java獲取服務(wù)器基本信息的方法

    java獲取服務(wù)器基本信息的方法

    這篇文章主要介紹了java獲取服務(wù)器基本信息的方法,涉及java獲取系統(tǒng)CPU、內(nèi)存及操作系統(tǒng)等相關(guān)信息的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • SpringBoot詳解MySQL如何實(shí)現(xiàn)讀寫分離

    SpringBoot詳解MySQL如何實(shí)現(xiàn)讀寫分離

    當(dāng)響應(yīng)的瓶頸在數(shù)據(jù)庫(kù)的時(shí)候,就要考慮數(shù)據(jù)庫(kù)的讀寫分離,當(dāng)然還可以分庫(kù)分表,那是單表數(shù)據(jù)量特別大,當(dāng)單表數(shù)據(jù)量不是特別大,但是請(qǐng)求量比較大的時(shí)候,就要考慮讀寫分離了.具體的話,還是要看自己的業(yè)務(wù)...如果還是很慢,那就要分庫(kù)分表了...我們這篇就簡(jiǎn)單講一下讀寫分離
    2022-09-09
  • 項(xiàng)目打包成jar后包無(wú)法讀取src/main/resources下文件的解決

    項(xiàng)目打包成jar后包無(wú)法讀取src/main/resources下文件的解決

    本文主要介紹了項(xiàng)目打包成jar后包無(wú)法讀取src/main/resources下文件的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評(píng)論

新蔡县| 沾益县| 新野县| 云梦县| 康马县| 长白| 拜城县| 桐庐县| 余庆县| 扎囊县| 南郑县| 镇巴县| 攀枝花市| 油尖旺区| 灵石县| 锡林浩特市| 基隆市| 金川县| 资兴市| 江口县| 德清县| 颍上县| 鲜城| 凤冈县| 泰州市| 千阳县| 南平市| 孟村| 惠安县| 九寨沟县| 吉林市| 崇左市| 琼海市| 临泽县| 余姚市| 射洪县| 丰台区| 湘乡市| 双城市| 恩平市| 天水市|