Mybatis 和hibernate不同,关系中中不支持双向,这里我用一的一端来维护关系,以班级和学生为例
实体类:创建实体类Stu和Class
Stu类:
private Integer id;
private String name;
private Integer cid;
private Classes classes;(生成对应的Set,Get方法)
Class类:
private Integer id;
private String name;(生成Set,Get方法)
Dao层:创建接口StuDAO,ClassDAO
public interface ClassDAO {
public Classes findById(Integer id);
}
public interface StuDAO {
public List<Stu> findByAll();
}
Mapper层:创建StuMapper.xml和ClassMapper.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.demo.dao.ClassDAO">
<resultMap type="Classes" id="classesMap">
<result column="id" property="id"/>
<result column="name" property="name"/>
</resultMap>
<select id="findById" parameterType="Integer" resultMap="classesMap">
select * from t_class where id=#{id}
</select>
</mapper>
<?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.demo.dao.StuDAO">
<select id="findByAll" resultMap="findStu">
select ts.id,ts.name,ts.cid,tc.name from t_stu ts,t_class tc where ts.cid=tc.id
</select>
<resultMap type="Stu" id="findStu">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="cid" property="cid"/>
<association property="class" column="cid" select="com.demo.dao.ClassMapper.findById"></association>
</resultMap>
</mapper>
测试:
public class Test_one2many {
private SqlSession sqlSession=null;
private StuMapper stuMapper=null;
private ClassesMapper classMapper=null;
@Before
public void getSqlSession(){
sqlSession=SqlSessionFactoryUtil.getInstance().openSession();
stuMapper=sqlSession.getMapper(StuMapper.class);
}
@After
public void closeSession(){
sqlSession.close();
}
@Test
public void findAll() {
List<Stu> list=stuMapper.findByAll();
for(int i=0;i<list.size();i++){
Stu p=list.get(i);
System.out.println(p);
}
}