首页 > 代码库 > Spring-Mybatis整合中的一对多
Spring-Mybatis整合中的一对多
一如Hibernate中的两个对象之间的关系在MyBatis中也关于两个对象之间的关联关系的描述!好了不多说,直接进入正题。
为了测试数据简单使用表的字段较少!
student:id,name,supervisor_id
teacher:id,name
项目结构截图
项目中引入包的截图
com,iss.model.Student
public class Student { private int id; private String name; private Teacher supervisor; public Teacher getSupervisor() { return supervisor; } public void setSupervisor(Teacher supervisor) { this.supervisor = supervisor; } 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; } }
com.iss.model.Teacher
package com.iss.model; import java.util.ArrayList; import java.util.List; public class Teacher { private int id; private String name; // private Set<Student> students = new HashSet<Student>(); private List<Student> students = new ArrayList<Student>(); 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 List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } // public Set<Student> getStudents() { // return students; // } // // public void setStudents(Set<Student> students) { // this.students = students; // } }
com.iss.dao.StudentMapper
package com.iss.dao; import com.iss.model.Student; public interface StudentMapper { public Student getById(int id); public void addStudent(Student student); }
com.iss.dao.TeacherMapper
package com.iss.dao; import com.iss.model.Teacher; public interface TeacherMapper { public void addTeacher(Teacher teacher); public Teacher getById(int id); }
com,iss,dao,StudentMapper.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.iss.dao.StudentMapper"> <!--查询数据 --> <select id="getById" parameterType="int" resultMap="studentResultMap"> select s.name,t.name from student s,teacher t where s.supervisor_id=t.id and s.id=#{id} <!-- select name from student where id=#{id} --> </select> <!--学生实体映射 --> <resultMap type="Student" id="studentResultMap"> <result property="id" column="id" /> <result property="name" column="name" /> <!-- <association property="supervisor" javaType="Teacher"> <result property="id" column="id" /> <result property="name" column="name" /> </association> --> <association property="supervisor" resultMap="com.iss.dao.TeacherMapper.supervisorResultMap"></association> </resultMap> <!--插入数据 --> <insert id="addStudent" useGeneratedKeys="true" parameterType="User" keyProperty="id"> insert into student values(#{id},#{name},#{supervisor.id}) </insert> </mapper>com.iss.dao,TeacherMapper.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.iss.dao.TeacherMapper"> <!--增加老师 --> <insert id="addTeacher" useGeneratedKeys="true" parameterType="Teacher" keyProperty="id"> insert into teacher values(#{id},#{name}); </insert> <!--查询老师 --> <select id="getById" parameterType="int" resultMap="supervisorResultMap"> select t.id t_id, t.name t_name,s.name from student s,teacher t where s.supervisor_id=t.id and t.id=#{id} </select> <!-- 教师实体映射 --> <resultMap type="Teacher" id="supervisorResultMap"> <result property="id" column="t_id" /> <result property="name" column="t_name" /> <collection property="students" resultMap="com.iss.dao.StudentMapper.studentResultMap"></collection> </resultMap> </mapper>
把映射接口和映射的配置文件放在同一目录的好处是不需要在核心配置文件Mybatis中使用mappers指定映射配置文件了。
下面看一下Spring和Mybatis整合的配置文件
mybatis-config,xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 把数据源交给Spring管理 --> <!-- <mappers> <mapper resource="com/iss/dao/UserMapper.xml" /> </mappers> --> </configuration>
ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- 配置数据源 --> <bean id="jdbcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>org.gjt.mm.mysql.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8 </value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>root</value> </property> </bean> <!--配置SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="jdbcDataSource" /> <property name="typeAliasesPackage" value=http://www.mamicode.com/"com.iss.model">>
最后看com.iss.test.Test对表中数据进行测试package com.iss.test; import java.util.List; import java.util.Set; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.iss.dao.StudentMapper; import com.iss.dao.TeacherMapper; import com.iss.dao.UserMapper; import com.iss.model.Student; import com.iss.model.Teacher; import com.iss.model.User; public class Test { public static void main(String[] args) { ApplicationContext ctx = null; ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); StudentMapper studentMapper = (StudentMapper) ctx .getBean("studentMapper"); TeacherMapper teacherMapper = (TeacherMapper) ctx .getBean("teacherMapper"); Teacher teacher = teacherMapper.getById(1); List<Student> students = teacher.getStudents(); System.out.println(students.size()); for (Student stu : students) { System.out.println(stu.getSupervisor().getName()); } } }
好了!这个简单的双向一对多就完成了!
Spring-Mybatis整合中的一对多
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。