zoukankan      html  css  js  c++  java
  • 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:女
  • 相关阅读:
    Python之路_Day6
    正则表达式
    tensorflow 使用 5 mnist 数据集, softmax 函数
    数据分析 大数据之路 六 matplotlib 绘图工具
    tensorflow 使用 4 非线性回归
    tensorflow 使用 3 模型学习
    数据分析 大数据之路 五 pandas 报表
    tensorflow 使用 2 Felch ,Feed
    tensorflow 使用 1 常量,变量
    数据分析 大数据之路 四 numpy 2
  • 原文地址:https://www.cnblogs.com/zrui-xyu/p/4727165.html
Copyright © 2011-2022 走看看