SSM调用oracle存储过程实现权限菜单
来源:互联网 发布:中国软件 综合排名 编辑:程序博客网 时间:2024/06/05 10:09
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());
}
<子菜单 需要模型 例如(mainmenus(id: ; 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);
}
- SSM调用oracle存储过程实现权限菜单
- 调用oracle存储过程权限不足问题
- SSM-Mybatis调用Oracle存储过程返回结果集(游标)
- OCI 调用Oracle 存储过程实现
- JDBC实现调用ORACLE存储过程
- oracle存储过程调用 execute immediate创建表时没权限解决方法
- ssm框架调用mysql存储过程
- oracle调用存储过程
- Oracle调用存储过程
- oracle调用存储过程
- oracle 存储过程调用
- oracle存储过程权限问题
- Oracle存储过程执行权限 .
- Oracle存储过程权限问题
- Oracle 存储过程权限问题
- ORACLE 存储过程权限问题
- oracle 存储过程执行权限
- 存储过程调用 实现
- raw格式数据转BMP格式(OpenCV)
- 如何使用Dockerfile构建镜像
- okhttp3去掉https证书的client
- slidingMenu (侧拉)
- Rightmost Digit 【hdu-1061】【快速幂】
- SSM调用oracle存储过程实现权限菜单
- JS-判断浏览器中英文
- Windows环境下视频分帧
- 我的第一篇CSDN博客文章
- android清理app缓存,计算缓存大小 工具类
- Engllish story 16
- java中length,length(),size()区别
- PDF转图片
- android 数据解析错误