有两个类:
public class Person {
private Integer id;
private String firstName;
private String lastName;
private String email;
private Department dept;
// getter and setter methods
}
public class Department {
private Integer id;
private String name;
private Set<Person> persons;
//getter and setter methods
}
现在通过Person提供的一个ID号,来查询一条person记录,记录包括:
id
firstName
lastName
email
dept.id
dept.name
SQL MAP xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org//dtd//sql-map-2.dtd">
<sqlMap namespace="Person">
<typeAlias alias="Person" type="com.ymq.ibatis.Person"/>
<typeAlias alias="Dept" type="com.ymq.ibatis.Department"/>
<resultMap id="get-person-result" class="Person">
<result property="id" column="id"/>
<result property="firstName" column="firstName"/>
<result property="lastName" column="lastName"/>
<result property="email" column="email"/>
<result property="dept" column="dept_id" select="Person.getDept"/>
</resultMap>
<resultMap id="get-dept-result" class="Dept">
<result property="id" column="id"/>
<result property="name" column="name"/>
</resultMap>
<select id="getDept" parameterClass="int" resultMap="get-dept-result">
select * from department where id=#value#
</select>
<select id="getPerson" resultMap="get-person-result">
select * from person where id=#value#
</select>
</sqlMap>
测试代码
[code]
@SuppressWarnings("unchecked")
public static void main(String[] args) throws IOException ,SQLException{
Reader reader = Resources.getResourceAsReader("com/ymq/ibatis/SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader );
System.out.println("查询所有的用户信息");
Person person = (Person)sqlMap.queryForObject("Person.getPerson", 1);
System.out.println("id:"+person.getId());
System.out.println("name:"+person.getFirstName()+person.getLastName());
System.out.println("deptId:"+person.getDept().getId());
System.out.println("deptName:"+person.getDept().getName());
}
[/code]
报错:ibatis There is no statement named “getDept”。。。。
仔细观察知道
[code]
<resultMap id="get-person-result" class="Person">
<result property="id" column="id"/>
<result property="firstName" column="firstName"/>
<result property="lastName" column="lastName"/>
<result property="email" column="email"/>
<result property="dept" column="dept_id" select="getDept"/>
[/code]
这句:<result property="dept" column="dept_id" [color=red]select="getDept[/color]"/>
红色字体要用select="Person.getDept"代替,因为设置了命名空间。