zoukankan      html  css  js  c++  java
  • (四)MyBatis关系映射

    第一节:一对一关系实现

    需要实现一对一的关系,首先我们有两张表,t-addree和t_student。

    1 CREATE TABLE `t_address` (
    2   `id` int(11) NOT NULL AUTO_INCREMENT,
    3   `sheng` varchar(20) DEFAULT NULL,
    4   `shi` varchar(20) DEFAULT NULL,
    5   `qu` varchar(20) DEFAULT NULL,
    6   PRIMARY KEY (`id`)
    7 ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    1 insert  into `t_address`(`id`,`sheng`,`shi`,`qu`) values (1,'江苏省','苏州市','姑苏区'),(2,'江苏省','南京市','鼓楼区');
    1 CREATE TABLE `t_student` (
    2   `id` int(11) NOT NULL AUTO_INCREMENT,
    3   `name` varchar(20) DEFAULT NULL,
    4   `age` int(11) DEFAULT NULL,
    5   `addressId` int(11) DEFAULT NULL,
    6   PRIMARY KEY (`id`)
    7 ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
    1 insert  into `t_student`(`id`,`name`,`age`,`addressId`) values (1,'张三',10,1),(2,'李四',11,2),(3,'李四',11,2),(4,'李四',11,2),(5,'李四',11,2),(6,'李四',11,2),(7,'李四',11,2);

    然后写model层

    Address.java

     1 package com.javaxk.model;
     2 
     3 public class Address {
     4 
     5     private Integer id;
     6     private String sheng;
     7     private String shi;
     8     private String qu;
     9     
    10     public Integer getId() {
    11         return id;
    12     }
    13     public void setId(Integer id) {
    14         this.id = id;
    15     }
    16     public String getSheng() {
    17         return sheng;
    18     }
    19     public void setSheng(String sheng) {
    20         this.sheng = sheng;
    21     }
    22     public String getShi() {
    23         return shi;
    24     }
    25     public void setShi(String shi) {
    26         this.shi = shi;
    27     }
    28     public String getQu() {
    29         return qu;
    30     }
    31     public void setQu(String qu) {
    32         this.qu = qu;
    33     }
    34     @Override
    35     public String toString() {
    36         return "Address [id=" + id + ", sheng=" + sheng + ", shi=" + shi
    37                 + ", qu=" + qu + "]";
    38     }
    39     
    40     
    41 }

    Student.java

     1 package com.javaxk.model;
     2 
     3 public class Student {
     4 
     5     private Integer id;
     6     private String name;
     7     private Integer age;
     8     private Address address;
     9     
    10     public Student() {
    11         super();
    12         // TODO Auto-generated constructor stub
    13     }
    14     
    15     public Student(Integer id, String name, Integer age) {
    16         super();
    17         this.id = id;
    18         this.name = name;
    19         this.age = age;
    20     }
    21 
    22     public Student(String name, Integer age) {
    23         super();
    24         this.name = name;
    25         this.age = age;
    26     }
    27 
    28     public Integer getId() {
    29         return id;
    30     }
    31     public void setId(Integer id) {
    32         this.id = id;
    33     }
    34     public String getName() {
    35         return name;
    36     }
    37     public void setName(String name) {
    38         this.name = name;
    39     }
    40     public Integer getAge() {
    41         return age;
    42     }
    43     public void setAge(Integer age) {
    44         this.age = age;
    45     }
    46     public Address getAddress() {
    47         return address;
    48     }
    49 
    50 
    51     public void setAddress(Address address) {
    52         this.address = address;
    53     }
    54 
    55 
    56 
    57 
    58     @Override
    59     public String toString() {
    60         return "Student [id=" + id + ", name=" + name + ", age=" + age
    61                 + ", address=" + address + "]";
    62     }
    63 
    64 
    65 
    66     
    67     
    68     
    69 }

    mappers映射类

    AddressMapper.java

    1 package com.javaxk.mappers;
    2 
    3 import com.javaxk.model.Address;
    4 
    5 public interface AddressMapper {
    6 
    7     public Address findById(Integer id);
    8 
    9 }

    StudentMapper.java

     1 package com.javaxk.mappers;
     2 
     3 import java.util.List;
     4 
     5 import com.javaxk.model.Student;
     6 
     7 public interface StudentMapper {
     8 
     9     
    10     public Student findStudentWithAddress(Integer id);
    11 }

    主程序运行类

    StudentTest3.java

     1 package com.javaxk.service;
     2 
     3 import java.util.List;
     4 
     5 import org.apache.ibatis.session.SqlSession;
     6 import org.apache.log4j.Logger;
     7 import org.junit.After;
     8 import org.junit.Before;
     9 import org.junit.Test;
    10 
    11 import com.javaxk.mappers.StudentMapper;
    12 import com.javaxk.model.Student;
    13 import com.javaxk.util.SqlSessionFactoryUtil;
    14 
    15 public class StudentTest3 {
    16 
    17     private static Logger logger=Logger.getLogger(StudentTest.class);
    18     private SqlSession sqlSession=null;
    19     private StudentMapper studentMapper=null;
    20     
    21     /**
    22      * 测试方法前调用
    23      * @throws Exception
    24      */
    25     @Before
    26     public void setUp() throws Exception {
    27         sqlSession=SqlSessionFactoryUtil.openSession();
    28         studentMapper=sqlSession.getMapper(StudentMapper.class);
    29     }
    30 
    31     /**
    32      * 测试方法后调用
    33      * @throws Exception
    34      */
    35     @After
    36     public void tearDown() throws Exception {
    37         sqlSession.close();
    38     }
    39 
    40     @Test
    41     public void testFindStudentWithAddress() {
    42         logger.info("查询学生(带地址)");
    43         Student student=studentMapper.findStudentWithAddress(1);
    44         System.out.println(student);
    45     }
    46     
    47 }

     Mapper映射文件的不同写法。。。

    AddressMapper.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="com.javaxk.mappers.AddressMapper">
     6 
     7     <resultMap type="Address" id="AddressResult">
     8         <result property="id" column="id"/>
     9         <result property="sheng" column="sheng"/>
    10         <result property="shi" column="shi"/>
    11         <result property="qu" column="qu"/>
    12     </resultMap>
    13     
    14     <select id="findById" parameterType="Integer" resultType="Address">
    15         select * from t_address where id=#{id}
    16     </select>
    17 
    18 </mapper> 

    第一种方式:

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="com.javaxk.mappers.StudentMapper">
     6 
     7     <resultMap type="Student" id="StudentResult">
     8         <id property="id" column="id"/>
     9         <result property="name" column="name"/>
    10         <result property="age" column="age"/>
    11         
    12         <result property="address.id" column="addressId"/>
    13         <result property="address.sheng" column="sheng"/>
    14         <result property="address.shi" column="shi"/>
    15         <result property="address.qu" column="qu"/>
    16     </resultMap>
    17     <select id="findStudentWithAddress" resultMap="StudentResult" parameterType="Integer">
    18         select * from t_student t1,t_address t2 where t1.addressId=t2.id and t1.id=#{id}
    19     </select>
    20 </mapper> 

    第二种方式:

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="com.javaxk.mappers.StudentMapper">
     6 <resultMap type="Address" id="AddressResult">
     7         <result property="id" column="id"/>
     8         <result property="sheng" column="sheng"/>
     9         <result property="shi" column="shi"/>
    10         <result property="qu" column="qu"/>
    11 </resultMap>
    12     
    13 <resultMap type="Student" id="StudentResult">
    14         <id property="id" column="id"/>
    15         <result property="name" column="name"/>
    16         <result property="age" column="age"/>
    17         <association property="address" resultMap="AddressResult"/>
    18 </resultMap>
    19 
    20  
    21 <select id="findStudentWithAddress" resultMap="StudentResult" parameterType="Integer">
    22         select * from t_student t1,t_address t2 where t1.addressId=t2.id and t1.id=#{id}
    23     </select>
    24 </mapper> 

    第三种方式:

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="com.javaxk.mappers.StudentMapper">
     6      <resultMap type="Student" id="StudentResult">
     7         <id property="id" column="id"/>
     8         <result property="name" column="name"/>
     9         <result property="age" column="age"/>
    10         <association property="address" javaType="Address">
    11             <result property="id" column="id"/>
    12             <result property="sheng" column="sheng"/>
    13             <result property="shi" column="shi"/>
    14             <result property="qu" column="qu"/>
    15         </association>
    16     </resultMap> 
    17 
    18     <select id="findStudentWithAddress" resultMap="StudentResult" parameterType="Integer">
    19         select * from t_student t1,t_address t2 where t1.addressId=t2.id and t1.id=#{id}
    20     </select>
    21 
    22 </mapper> 

    第四种方式:

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="com.javaxk.mappers.StudentMapper">
     6     <resultMap type="Student" id="StudentResult">
     7         <id property="id" column="id"/>
     8         <result property="name" column="name"/>
     9         <result property="age" column="age"/>
    10         <association property="address" column="id" select="com.javaxk.mappers.AddressMapper.findById"></association>
    11     </resultMap>
    12     
    13     <select id="findStudentWithAddress" resultMap="StudentResult" parameterType="Integer">
    14         select * from t_student t1,t_address t2 where t1.addressId=t2.id and t1.id=#{id}
    15     </select>
    16 
    17 </mapper> 

    第二节:一对多关系实现

    StudentMapper.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="com.javaxk.mappers.StudentMapper">
     6 
     7     <resultMap type="Student" id="StudentResult">
     8         <id property="id" column="id"/>
     9         <result property="name" column="name"/>
    10         <result property="age" column="age"/>
    11         <association property="address" column="addressId" select="com.javaxk.mappers.AddressMapper.findById"></association>
    12         <association property="grade" column="gradeId" select="com.javaxk.mappers.GradeMapper.findById"></association>
    13     </resultMap>
    14     
    15     <select id="findStudentWithAddress" resultMap="StudentResult" parameterType="Integer">
    16         select * from t_student t1,t_address t2 where t1.addressId=t2.id and t1.id=#{id}
    17     </select>
    18 
    19 </mapper> 

    AddressMapper.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="com.javaxk.mappers.AddressMapper">
     6 
     7     <resultMap type="Address" id="AddressResult">
     8         <result property="id" column="id"/>
     9         <result property="sheng" column="sheng"/>
    10         <result property="shi" column="shi"/>
    11         <result property="qu" column="qu"/>
    12     </resultMap>
    13     
    14     <select id="findById" parameterType="Integer" resultType="Address">
    15         select * from t_address where id=#{id}
    16     </select>
    17 
    18 </mapper> 

    GradeMapper.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="com.javaxk.mappers.GradeMapper">
     6 
     7     <resultMap type="Grade" id="GradeResult">
     8         <result property="id" column="id"/>
     9         <result property="gradeName" column="gradeName"/>
    10         
    11     </resultMap>
    12     
    13     <select id="findById" parameterType="Integer" resultType="Grade">
    14         select * from t_grade where id=#{id}
    15     </select>
    16 
    17 </mapper> 

    测试主类:

    1     
    2     @Test
    3     public void testFindStudentWithGrade(){
    4         logger.info("查询学生(带年级)");
    5         Student student=studentMapper.findStudentWithAddress(1);
    6         System.out.println(student);
    7     }
  • 相关阅读:
    Dispatcher及线程操作
    MVVM中轻松实现Command绑定(三)任意事件的Command
    MVVM Light中的Message
    Prism
    Prism的IEventAggregator事件聚合器, 事件订阅发布, ViewModel之间的通讯
    文件写操作--WriteLog
    【Golang】Debug :decoding dwarf section info at offset 0x0: too short
    【Golang 接口自动化03】 解析接口返回XML
    【Golang 接口自动化02】使用标准库net/http发送Post请求
    【Golang 接口自动化01】使用标准库net/http发送Get请求
  • 原文地址:https://www.cnblogs.com/wishwzp/p/7082007.html
Copyright © 2011-2022 走看看