1
回答
mybatis 封装了简单的CRUD操作后,再使用封装后的方法时,一对一,一对多collection失效
终于搞明白,存储TCO原来是这样算的>>>   

@fog. 你好,想跟你请教个问题:

最近在给公司重新封装软件框架,用的是spring+springMVC+mybatis,将mybatis的简单CRUD封装了。

但是封装后association,collection这2个映射用法在使用封装后的查询时,不起作用,还是需要在相应的

XML文件里写<select id="sqlId">sql语句</select>,通过dao层使用sqlId才能起作用,有哪位大神知道为什么吗,有解决方法吗?

举个例子:

例如有2个表,Department(部门)、Position(岗位),一对多的关系。

Department.xml文件

<resultMap id="BaseResultMap" type="com.normstar.nts.web.model.Department" >
    <id column="id" property="id" jdbcType="VARCHAR" />
    <result column="name" property="name" jdbcType="VARCHAR" />
    <collection column="id" property="positions" select="com.normstar.nts.web.mapper.dao.PositionMapper.findByDepartmentId">
    </collection>
</resultMap>
<select id="findByAllDepartment" resultMap="BaseResultMap">
     SELECT * FROM ns_nts_department
</select>

Position.xml文件

<resultMap id="BaseResultMap" type="com.normstar.nts.web.model.Position" >
    <id column="id" property="id" jdbcType="VARCHAR" />
    <result column="name" property="name" jdbcType="VARCHAR" />
</resultMap>
<select id="findByDepartmentId" parameterType="String" resultMap="BaseResultMap">
    select * from ns_nts_position where department_id=#{id}
</select>

Controller.java文件
List<Department> departmentList =  this.service.findByAll(Department.class);
System.out.println("这里通过封装的findByAll函数获取所有部门数据如下*************");
for (Department department : departmentList) {
 System.out.println(department.getName()+" -- " +department.getPositionNames());
}
System.out.println("这里通过XML文件里的select获取所有部门数据如下*************");
List<Department> departmentList2= departmentService.findByAllDepartment();
for (Department department : departmentList2) {
 System.out.println(department.getName()+" -- " +department.getPositionNames());
}

运行后输出:

 

 

求大神解答???

举报
半路凉亭
发帖于2年前 1回/723阅
顶部