java - Mybatis 1:N 映射用法
问题描述
如何解决这个问题呢??我想通过Mybatis映射1:N 首先有UserVo
@Data
@Alias("user")
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1304191724943818097L;
/**
*
*/
private String uname;
private String pwd;
private boolean enabled;
private String profile;
private List<Auth> auths ;
}
其次,有AuthVO
@Alias("auth")
public class Auth {
private String uname;
private String role;
public Auth(String uname, String role) {
super();
this.uname = uname;
this.role = role;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
@Override
public String toString() {
return "Auth [uname=" + uname + ", role=" + role + "]";
}
一个用户可以有多个角色。我的mybatis设置在这里。UserDetailsDao 接口 公共接口 UserDetailsDao {
public User findUserByUsername(String uname);
UserDetailsDaoImpl
@Repository("UserDetailsDao") 公共类 UserDetailDaoImpl 实现 UserDetailsDao {
private SqlSessionTemplate sqlSessionTemplate;
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSessionTemplate = sqlSessionTemplate;
}
@Override
public User findUserByUsername(String uname) {
User user = sqlSessionTemplate
.selectOne("com.legalcounsel.javaprj.repository.UserDetailsDao.findUserByUsername", uname);
return user;
}
最后,Xml 文件在这里
<?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="com.legalcounsel.javaprj.repository.UserDetailsDao">
<resultMap id="userResult" type="user">
<id column="uname" jdbcType="VARCHAR" property="uname" />
<result property="pwd" jdbcType="VARCHAR" column="pwd" />
<result property="enabled" jdbcType="TINYINT" column="enabled" />
<collection property="auths" column ="uname" javaType="ArrayList" ofType="auth">
<id property="uname" column="uname" />
<result property="role" column="role" />
</collection>
</resultMap>
<select id="findUserByUsername" parameterType="string" resultMap="userResult">
SELECT u.uname, u.pwd, u.enabled, r.uname, r.role FROM user u LEFT JOIN auth r ON
(u.uname = r.uname) WHERE u.uname=#{value};
</select>
但是,问题是只能使用一个角色。例如,如果管理员有 ROLE_USER,ROLE_ADMIN,ROLE_ADMIN 可以显示。
我认为 selctOne.(~~~) 是问题所在。所以改变了 .selectList("com.legalcounsel.javaprj.repository.UserDetailsDao.findUserByUsername", uname);
但是有cast Exception....怎么能解决这个问题????
解决方案
推荐阅读
- opencv - pytesseract 的实时检测速度非常慢,使用 python 的屏幕滞后很大
- gnuplot - 使用数组中数据的索引绘制多个图
- c++ - 如何修复 valgrind 启动时的致命错误(与 libc6-dbg 和 libc6-dbg:i386 连接)
- youtrack - 如何让客户经理在 Youtrack 中测试功能?
- javascript - 如何在通过 GraphQL 查询返回的降价中将 \n 格式化为换行符
- .net - SQL DataReader 给出“字符串或二进制数据将被截断”
- r - 如何在R中找到逆采样方法的逆
- node.js - 节点的全局变量与在反应组件 SSR 中创建的名为 global 的变量
- javascript - 列表中的 Nativescript/Angular/Javascript 错误
- javascript - 登录验证后重定向