mybatis整合spring 之 基于接口映射的多对一关系
2012-10-18 00:00
567 查看
mybatis整合spring 之 基于接口映射的多对一关系。
项目用到俩个表,即student表和school表。表结构如下:
school表:
student表:
项目结构如下:
1)applicationContext.xml
2)mybatis-configuration.xml
3)School Entity
4)Student Entity
5)SchoolMapper.xml
6)StudentMapper.xml
7)SchoolMybatisDao Interface
8)StudentMybatisDao Interface
9)SchoolService Interface
10)StudentServiec Interface
11)SchoolService Implement
12)StudentService Implement
14)test/SchoolServiceTest
15) 执行testLoadSchoolWithStudent()
输出:
项目用到俩个表,即student表和school表。表结构如下:
school表:
student表:
项目结构如下:
1)applicationContext.xml
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-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"> <!-- 加载JDBC配置文件 --> <context:property-placeholder location="classpath:jdbc.properties" /> <!-- 扫描类包,将标注Spring注解的类自动转化Bean,同时完成Bean的注入 --> <context:component-scan base-package="com.springbatis.dao" /> <context:component-scan base-package="com.springbatis.service" /> <!-- 配置数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass"> <value>${jdbc.driverClassName}</value> </property> <property name="jdbcUrl"> <value>${jdbc.url}</value> </property> <property name="user"> <value>${jdbc.username}</value> </property> <property name="password"> <value>${jdbc.password}</value> </property> <property name="minPoolSize"> <value>8</value> </property> <property name="maxPoolSize"> <value>200</value> </property> <property name="initialPoolSize"> <value>10</value> </property> <property name="maxIdleTime"> <value>60</value> </property> <property name="acquireIncrement"> <value>5</value> </property> <property name="maxStatements"> <value>10</value> </property> <property name="idleConnectionTestPeriod"> <value>60</value> </property> <property name="acquireRetryAttempts"> <value>30</value> </property> <property name="breakAfterAcquireFailure"> <value>true</value> </property> <property name="testConnectionOnCheckout"> <value>false</value> </property> </bean> <!-- 创建SqlSessionFactory,同时指定数据源 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 指定sqlMapConfig总配置文件 --> <property name="configLocation" value="classpath:mybatis-configuration.xml"/> <property name="dataSource" ref="dataSource" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.springbatis.dao" /> </bean> <!-- 事务管理 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 使用注解控制事务 --> <tx:annotation-driven /> </beans>
2)mybatis-configuration.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> <!-- 别名 --> <typeAliases> <typeAlias alias="School" type="com.springbatis.domain.School"/> <typeAlias alias="Student" type="com.springbatis.domain.Student"/> </typeAliases> <!-- ORM映射文件 --> <mappers> <mapper resource="com/springbatis/domain/SchoolMapper.xml" /> <mapper resource="com/springbatis/domain/StudentMapper.xml" /> </mappers> </configuration>
3)School Entity
package com.springbatis.domain; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @SuppressWarnings("serial") public class School implements Serializable { private int id; private String schoolNumber; private String schoolName; private List<Student> students = new ArrayList<Student>(); public School(){ } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getSchoolNumber() { return schoolNumber; } public void setSchoolNumber(String schoolNumber) { this.schoolNumber = schoolNumber; } public String getSchoolName() { return schoolName; } public void setSchoolName(String schoolName) { this.schoolName = schoolName; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } }
4)Student Entity
package com.springbatis.domain; import java.io.Serializable; @SuppressWarnings("serial") public class Student implements Serializable { private int id; private String studentNumber; private String studentName; private String sex; private School school; public Student(){ } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getStudentNumber() { return studentNumber; } public void setStudentNumber(String studentNumber) { this.studentNumber = studentNumber; } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public School getSchool() { return school; } public void setSchool(School school) { this.school = school; } }
5)SchoolMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="com.springbatis.dao.SchoolMybatisDao"> <!-- 一对多映射 --> <resultMap id="schoolResult" type="School"> <id property="id" column="school_id" /> <result property="schoolNumber" column="school_number"/> <result property="schoolName" column="school_name"/> <collection property="students" ofType="Student"> <id property="id" column="student_id"/> <result property="studentNumber" column="student_number"/> <result property="studentName" column="student_name"/> <result property="sex" column="student_sex"/> </collection> </resultMap> <select id="loadSchoolWithStudent" parameterType="int" resultMap="schoolResult"> select sch.id as school_id, sch.schoolNumber as school_number, sch.schoolName as school_name, stu.id as student_id, stu.studentNumber as student_number, stu.studentName as student_name, stu.sex as student_sex from school sch left outer join student stu on sch.id=stu.school_id where sch.id=#{school_id} </select> </mapper>
6)StudentMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="com.springbatis.dao.StudentMybatisDao"> <!-- 多对一映射 --> <resultMap id="studentResult" type="Student" > <id property="id" column="student_id"/> <result property="studentNumber" column="student_number"/> <result property="studentName" column="student_name"/> <result property="sex" column="student_sex"/> <association property="school" javaType="School"> <id property="id" column="school_id"/> <result property="schoolNumber" column="school_number"/> <result property="schoolName" column="school_name"/> </association> </resultMap> <select id="loadStudentWithSchool" parameterType="int" resultMap="studentResult"> select stu.id as student_id, stu.studentNumber as student_number, stu.studentName as student_name, stu.sex as student_sex, sch.id as school_id, sch.schoolNumber as school_number, sch.schoolName as school_name from student stu left outer join school sch on sch.id=stu.school_id where stu.id=#{student_id} </select> </mapper>
7)SchoolMybatisDao Interface
package com.springbatis.dao; import org.springframework.stereotype.Repository; import com.springbatis.domain.School; @Repository public interface SchoolMybatisDao { School loadSchoolWithStudent(int school_id); }
8)StudentMybatisDao Interface
package com.springbatis.dao; import org.springframework.stereotype.Repository; import com.springbatis.domain.Student; @Repository public interface StudentMybatisDao { Student loadStudentWithSchool(int student_id); }
9)SchoolService Interface
package com.springbatis.service; import org.springframework.stereotype.Repository; import com.springbatis.domain.School; @Repository public interface SchoolService { public School loadSchoolWithStudent(int school_id); }
10)StudentServiec Interface
package com.springbatis.service; import com.springbatis.domain.Student; public interface StudentService { public Student loadStudentWithSchool(int student_id); }
11)SchoolService Implement
package com.springbatis.service.implement; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.springbatis.dao.SchoolMybatisDao; import com.springbatis.domain.School; import com.springbatis.service.SchoolService; @Service @Transactional public class SchoolServiceImpl implements SchoolService { @Autowired private SchoolMybatisDao schoolDao; @Override public School loadSchoolWithStudent(int school_id) { return schoolDao.loadSchoolWithStudent(school_id); } }
12)StudentService Implement
package com.springbatis.service.implement; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.springbatis.dao.StudentMybatisDao; import com.springbatis.domain.Student; import com.springbatis.service.StudentService; @Service @Transactional public class StudentServiceImpl implements StudentService { @Autowired private StudentMybatisDao studentDao; @Override public Student loadStudentWithSchool(int student_id) { return studentDao.loadStudentWithSchool(student_id); } }13)test/StudentServiceTest
package com.springbatis.service; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.springbatis.domain.Student; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="/applicationContext.xml") public class StudentServiceTest { @Autowired private StudentService studentService; @Test public void testLoadStudentWithSchool(){ Student stu = studentService.loadStudentWithSchool(2); if(stu!=null){ System.out.println("=====》studentId:"+stu.getId()+" studentNumber:"+stu.getStudentNumber()+" studentName:"+stu.getStudentName()+" sex:"+stu.getSex()); System.out.println("=====》schoolId:"+stu.getSchool().getId()+" schoolNumber:"+stu.getSchool().getSchoolNumber()+" schoolName:"+stu.getSchool().getSchoolName()); } else{ System.out.println("id不存在!!"); } } }
14)test/SchoolServiceTest
package com.springbatis.service; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.springbatis.domain.School; import com.springbatis.domain.Student; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="/applicationContext.xml") public class SchoolServiceTest { @Autowired private SchoolService schoolService; @Test public void testLoadSchoolWithStudent(){ School school = schoolService.loadSchoolWithStudent(1); if(school!=null){ System.out.println("=====》schoolId:"+school.getId()+" schoolNumber:"+school.getSchoolNumber()+" schoolName:"+school.getSchoolName()); if(school.getStudents().size()>0){ for(Student stu : school.getStudents()){ System.out.println("=====》studentId:"+stu.getId()+" studentNumber:"+stu.getStudentNumber()+" studentName:"+stu.getStudentName()+" sex:"+stu.getSex()); } }else{ System.out.println("无学生!"); } } else{ System.out.println("id不存在!!"); } } }
15) 执行testLoadSchoolWithStudent()
输出:
==》schoolId: 1 schoolNumber:100001 schoolName:清华大学 =====》studentId:1 studentNumber:1007300220 studentName:露西 sex:女 =====》studentId:2 studentNumber:1007300222 studentName:杰克 sex:男 =====》studentId:4 studentNumber:1007300225 studentName:露露 sex:女
相关文章推荐
- mybatis整合spring 之 基于接口映射的多对一关系
- MyBatis Spring整合配置映射接口类与映射xml文件
- spring+sprinmvc+mybatis基本整合(二)--基于spring注解mybais非注解非Mapper接口方式
- MyBatis Spring整合配置映射接口类与映射xml文件
- 整合maven+mybatis+generator生成java自定义model实体类,dao接口和mapper映射文件
- MyBatis Spring整合配置映射接口类与映射xml文件
- MyBatis Spring整合配置映射接口类与映射xml文件
- MyBatis Spring整合配置映射接口类与映射xml文件
- SSM实战——秒杀系统之DAO层实体定义、接口设计、mybatis映射文件编写、整合Spring与Mybatis
- MyBatis Spring整合配置映射接口类与映射xml文件
- Mybatis(基于接口映射) + Spring 练习实战
- SSM简单整合(Mybatis,Spring,SpringMVC,基于注解和xml文件配置)
- 原始的Ibatis基于接口和实现类的开发方式——MyBatis的第一种开发方式
- 基于MyBatis的数据服务接口
- Maven项目中,关于Spring Boot 整合MyBatis时,Service层无法找到mapper接口的问题解决
- Spring mvc整合mybatis基于mysql数据库实现用户增删改查及其分页显示的完整入门实例【转】
- [置顶] 基于注解的mybatis整合spring开发流程?
- Mybatis接口映射,嵌套查询
- 基于SSM的秒杀业务学习[1] spring/ mybatis/springmvc整合及配置
- java中基于字节和字符的I/O操作的接口关系