在实际开发中,经常会遇到一个bean包含另外一个bean,那么mybatis是如何来封装它的值呢?
userMappe.xml:
<select id="getuser" parameterType="int" resultMap="getStudents">
select id,name,1 as sNo from userinfo where id=#{id}
</select>
<resultMap type="com.chenjun.Student" id="getStudents">
<result column="sNo" property="sNo" /><!--查询语句的字段中有没有这个字段,也不会报错,我上面默认给了一个常量 -->
<association property="user" javaType="user" <!-- user为student的对象属性 -->
resultMap="getUserLists">
</association>
</resultMap>
<select id="getUserList" resultMap="getUserLists">
select
<include refid="useridNames" /><!-- 引用sql id -->
from userinfo
</select>
<!-- 定义sql片断,用于重用 -->
<sql id="useridNames">id,name</sql>
dao:
public Student getuser(int id); 方法名与mapper文件的sql id一样,参数就是要传给sql的参数,返回值就是sql的返回值,它们是一一对应的接口的包名与mapper包名要一样
Student.java:
public class Student
{
private User user;
public Student()
{
super();
}
public Student(String sNo)
{
this.sNo = sNo;
}
private String sNo;
public String getSNo()
{
return sNo;
}
public void setSNo(String no)
{
sNo = no;
}
public User getUser()
{
return user;
}
public void setUser(User user)
{
this.user = user;
}
}
User.java
public class User
{
private int id;
private String name;
/**
* @author ; bawcwchen
* @Description : TODO
* @CreateDate ; Jan 30, 2015 12:12:40 AM
* @lastModified ; Jan 30, 2015 12:12:40 AM
* @version ; 1.0
* @param id
* @param name
*/
public User(int id, String name)
{
this.id = id;
this.name = name;
}
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public User()
{
}
}
测试代码:
private static void selectOneUser(SqlSession sqlSession, UserDao userDao)
{
Student student = userDao.getuser(9);
System.out.println(student.getUser().getId() + ":" + student.getUser().getName()+":"+student.getSNo());
}
结果:
9:ameraca:1