• mybatis整合spring 之 基于接口映射的多对一关系


    转载自:http://my.oschina.net/huangcongmin12/blog/83731

    mybatis整合spring 之  基于接口映射的多对一关系。

            项目用到俩个表,即student表和school表。表结构如下:

            school表:

                      

             student表:        

      

         

    项目结构如下:


         


     1)applicationContext.xml


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    <?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


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?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


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    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


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    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


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?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


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?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


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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


    1
    2
    3
    4
    5
    6
    7
    8
    9
    package com.springbatis.service;
     
    import com.springbatis.domain.Student;
     
    public interface StudentService {
         
        public Student loadStudentWithSchool(int student_id);
         
    }


    11)SchoolService Implement


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    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


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    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   


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    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()

    输出:

    1
    2
    3
    4
    ==》schoolId: 1   schoolNumber:100001  schoolName:清华大学
    =====》studentId:1   studentNumber:1007300220  studentName:露西   sex:女
    =====》studentId:2   studentNumber:1007300222  studentName:杰克   sex:男
    =====》studentId:4   studentNumber:1007300225  studentName:露露   sex:女
  • 相关阅读:
    【转】CUDA5/CentOS6.4
    【转】centos 6.4 samba 安装配置
    【转】Install MATLAB 2013a on CentOS 6.4 x64 with mode silent
    【转】Getting xrdp to work on CentOS 6.4
    【VLFeat】使用matlab版本计算HOG
    Unofficial Windows Binaries for Python Extension Packages
    March 06th, 2018 Week 10th Tuesday
    March 05th, 2018 Week 10th Monday
    March 04th, 2018 Week 10th Sunday
    March 03rd, 2018 Week 9th Saturday
  • 原文地址:https://www.cnblogs.com/zrui-xyu/p/4727165.html
Copyright © 2020-2023  润新知