首页 > 解决方案 > 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....怎么能解决这个问题????

标签: javacollectionsmybatis

解决方案


推荐阅读