SSM调用oracle存储过程实现权限菜单

xiaoxiao2021-02-28  81

Oracle数据库存储过程

/*获取主菜单存储过程定义*/       

create or replace procedure getMainMenu(

       userAccount t_user.user_account%TYPE,

       userPassword t_user.user_password%TYPE,

       right_cursor out sys_refcursor

)

is

begin

  open right_cursor for select * from t_right where right_id in (select right_id from t_role_right where 

       role_id in (select role_id from t_user_role where user_id in 

       (select user_Id from t_user where user_account=userAccount and user_password=userPassword))) and parent_id = 'root';

  end;

 

/*获取子菜单存储过程定义*/    

create or replace procedure getChildMenuByParentId(

       userAccount t_user.user_account%TYPE,

       userPassword t_user.user_password%TYPE,

       parentId t_right.parent_id%TYPE,

       right_cursor out sys_refcursor

)

is

begin

  open right_cursor for select * from t_right where right_id in (select right_id from t_role_right where 

       role_id in (select role_id from t_user_role where user_id in 

       (select user_Id from t_user where user_account=userAccount and user_password=userPassword))) and parent_id = parentId;

  end;

  

Mapper.xml

<!--  获取主菜单 方法 parameterType 传入参数类型 statementType="CALLABLE" 固定写法注明调用oracle 存储过程 

Call getMainMenu 返回游标名

#{user.userAccount},

#{user.userPassword}为传入实际参数

#{map.right_cursor}为接收oracle游标返回的数据

jdbcType=CURSOR,mode=OUT,javaType=java.sql.ResultSet, 固定写法

resultMap=com.ssyt.lms.mapper.RightInfoMapper.BaseResultMap 返回值类型必须全路径

BaseResultMap  mapper.xml中的 -->

 

<resultMap id="BaseResultMap" type="com.ssyt.lms.po.RightInfo" >

    <id column="RIGHT_ID" property="rightId" jdbcType="VARCHAR" />

    <result column="PARENT_ID" property="parentId" jdbcType="VARCHAR" />

    <result column="RIGHT_NAME" property="rightName" jdbcType="VARCHAR" />

    <result column="RIGHT_URL" property="rightUrl" jdbcType="VARCHAR" />

  </resultMap>

 

<select id="getMainMenus" parameterType="map" statementType="CALLABLE">

   {call getMainMenu(

   #{user.userAccount},

   #{user.userPassword},

   #{map.right_cursor,jdbcType=CURSOR,mode=OUT,javaType=java.sql.ResultSet, resultMap=com.ssyt.lms.mapper.RightInfoMapper.BaseResultMap})}

  </select>

  

  <select id="getChildMenusByParentId" parameterType="map" statementType="CALLABLE">

   {call getChildMenuByParentId(

   #{user.userAccount},

   #{user.userPassword},

   #{parentId},

   #{map.right_cursor,jdbcType=CURSOR,mode=OUT,javaType=java.sql.ResultSet, resultMap=com.ssyt.lms.mapper.RightInfoMapper.BaseResultMap})}

  </select>

 

Mapper.java

<!-- @Param("user") 将后面的userInfo 对象转化为 map< ‘user’,userInfo> 

为了方便xml里面取到具体的值

 -->

 List<RightInfo> getMainMenus(@Param("user") UserInfo userInfo,@Param("map") Map<String,Object> map);

List<RightInfo> getChildMenusByParentId(@Param("user") UserInfo userInfo,@Param("map") Map<String,Object> map,@Param("parentId") String parentId);

 

Service.java

<接口方法>

/// 定义获取用户的主菜单

List<RightInfo> getMainMenus(UserInfo user);

/// 定义菜单返回的json字符串的业务方法

String getMenuJson(UserInfo user);

<实现类方法>

<主菜单>

@Override

public List<RightInfo> getMainMenus(UserInfo user) {

Map<String, Object> map = new HashMap<String, Object>();

map.put(CommonConstant.GET_MAIN_MENU_CURSOR.getKey(),new ArrayList<RightInfo>());

rightMapper.getMainMenus(user, map );

return (List<RightInfo>) map.get(CommonConstant.GET_MAIN_MENU_CURSOR.getKey());

}

<子菜单  需要模型 例如(mainmenusid: ; menu list<childmenu> ))

                        Childmenu( text, items : list< item>)

                        Item( id: ; text: ; href)>

/** * 查询用户子菜单(处理菜单模型) */ public String listChildMenu(UserInfo user, String baseUrl) { // 定义存储主菜单集合对象 List<MainMenu> mainList = new ArrayList<MainMenu>(); // 获取获取当前用户的主菜单 List<RightInfo> rightList = listMenu(user); if (rightList != null && rightList.size() > 0) { // 循环遍历取出当前用户所持有的菜单项 for (RightInfo right : rightList) { // 获取某一个菜单项的id和名字 String rightId = right.getRightId(); String rightName = right.getRightName(); // 创建一个主菜单MainMenu对象 MainMenu mainMenu = new MainMenu(); mainMenu.setId(rightId); // 定义存储子菜单的集合 List<ChildMenu> childList = new ArrayList<ChildMenu>(); mainMenu.setMenu(childList); // 新建map集合接收oracle存储过程返回值 Map<String, Object> map = new HashMap<String, Object>(); map.put(CommonConstant.GET_MAIN_MENU_CURSOR.getKey(), new ArrayList<RightInfo>()); rightInfoMapper.selectChildMenu(user, map, rightId); // 获取到存储过程返回值(菜单项所属的子菜单) @SuppressWarnings("unchecked") List<RightInfo> childRightList = (List<RightInfo>) map .get(CommonConstant.GET_MAIN_MENU_CURSOR.getKey()); if (childRightList != null && childRightList.size() > 0) { // 创建ChildMenu对象 ChildMenu childMenu = new ChildMenu(); // 子菜单所属菜单项也就是菜单项的名字 childMenu.setText(rightName); // 创建存储子菜单项集合 List<Item> itemList = new ArrayList<Item>(); childMenu.setItems(itemList); // 存储到childList对象中 childList.add(childMenu); for (RightInfo child : childRightList) { String childId = child.getRightId(); String childName = child.getRightName(); String childHref = child.getRightUrl(); // 创建一个Item对象(单个子菜单“权限”) Item item = new Item(); item.setHref(baseUrl + "/" + childHref); item.setId(childId); item.setText(childName); // 添加子菜单集合中 itemList.add(item); } } // 将单个主菜单项放入菜单项集合中去 mainList.add(mainMenu); } } // 将该集合转换为json对象的字符串 return JSON.toJSONString(mainList); }

 

/** * 查询用户子菜单(处理菜单模型) */ public String listChildMenu(UserInfo user, String baseUrl) { // 定义存储主菜单集合对象 List<MainMenu> mainList = new ArrayList<MainMenu>(); // 获取获取当前用户的主菜单 List<RightInfo> rightList = listMenu(user); if (rightList != null && rightList.size() > 0) { // 循环遍历取出当前用户所持有的菜单项 for (RightInfo right : rightList) { // 获取某一个菜单项的id和名字 String rightId = right.getRightId(); String rightName = right.getRightName(); // 创建一个主菜单MainMenu对象 MainMenu mainMenu = new MainMenu(); mainMenu.setId(rightId); // 定义存储子菜单的集合 List<ChildMenu> childList = new ArrayList<ChildMenu>(); mainMenu.setMenu(childList); // 新建map集合接收oracle存储过程返回值 Map<String, Object> map = new HashMap<String, Object>(); map.put(CommonConstant.GET_MAIN_MENU_CURSOR.getKey(), new ArrayList<RightInfo>()); rightInfoMapper.selectChildMenu(user, map, rightId); // 获取到存储过程返回值(菜单项所属的子菜单) @SuppressWarnings("unchecked") List<RightInfo> childRightList = (List<RightInfo>) map .get(CommonConstant.GET_MAIN_MENU_CURSOR.getKey()); if (childRightList != null && childRightList.size() > 0) { // 创建ChildMenu对象 ChildMenu childMenu = new ChildMenu(); // 子菜单所属菜单项也就是菜单项的名字 childMenu.setText(rightName); // 创建存储子菜单项集合 List<Item> itemList = new ArrayList<Item>(); childMenu.setItems(itemList); // 存储到childList对象中 childList.add(childMenu); for (RightInfo child : childRightList) { String childId = child.getRightId(); String childName = child.getRightName(); String childHref = child.getRightUrl(); // 创建一个Item对象(单个子菜单“权限”) Item item = new Item(); item.setHref(baseUrl + "/" + childHref); item.setId(childId); item.setText(childName); // 添加子菜单集合中 itemList.add(item); } } // 将单个主菜单项放入菜单项集合中去 mainList.add(mainMenu); } } // 将该集合转换为json对象的字符串 return JSON.toJSONString(mainList); }

转载请注明原文地址: https://www.6miu.com/read-80475.html

最新回复(0)