小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

MyBatis 詳解(一對一,一對多,多對多)

 ywasdfghjkl 2019-04-25

1、什么是MyBatis?

  MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為MyBatis 。2013年11月遷移到Github。

  iBATIS一詞來源于“internet”和“abatis”的組合,是一個基于Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)。

  MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis 使用簡單的 XML或注解用于配置和原始映射,將接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。

PS:本文所有代碼下載鏈接:http://pan.baidu.com/s/1gf8CPQN 密碼:t2x9 

  再給大家推薦一個比較好的mybatis學(xué)習(xí)網(wǎng)站:www.

2、MyBatis 入門實例基于xml配置

  ①、創(chuàng)建MySQL數(shù)據(jù)庫:mybatisDemo和表:person

1
2
3
create database mybatisDemo;
use mybatisDemo;
create table person(pid int primary key AUTO_INCREMENT, pname varchar(50), page int);

  

  ②、建立一個Java工程,并導(dǎo)入相應(yīng)的jar包

   

  相應(yīng)的 jar 包下載鏈接:http://pan.baidu.com/s/1skZM09Z  密碼:nkt6

   ③、在 MyBatisDemo 工程中添加數(shù)據(jù)庫配置文件 mybatis-configuration.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
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE configuration PUBLIC '-////DTD Config 3.0//EN' 'http:///dtd/mybatis-3-config.dtd'>
<configuration>
<!-- 可以配置多個運行環(huán)境,但是每個 SqlSessionFactory 實例只能選擇一個運行環(huán)境  
  一、development:開發(fā)模式
   二、work:工作模式-->
 <environments default='development'>
 <!--id屬性必須和上面的default一樣  -->
    <environment id='development'>
    <!--事務(wù)管理器
        一、JDBC:這個配置直接簡單使用了 JDBC 的提交和回滾設(shè)置。它依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)范圍
        二、MANAGED:這個配置幾乎沒做什么。它從來不提交或回滾一個連接。而它會讓容器來管理事務(wù)的整個生命周期
            比如 spring 或 JEE 應(yīng)用服務(wù)器的上下文,默認情況下,它會關(guān)閉連接。然而一些容器并不希望這樣,
            因此如果你需要從連接中停止它,就可以將 closeConnection 屬性設(shè)置為 false,比如:
            <transactionManager type='MANAGED'>
                <property name='closeConnection' value='false'/>
            </transactionManager>
      -->
      <transactionManager type='JDBC'/>
      <!--dataSource 元素使用標準的 JDBC 數(shù)據(jù)源接口來配置 JDBC 連接對象源  -->
      <dataSource type='POOLED'>
        <property name='driver' value='com.mysql.jdbc.Driver'/>
        <property name='url' value='jdbc:mysql://localhost:3306/mybatisdemo'/>
        <property name='username' value='root'/>
        <property name='password' value='root'/>
      </dataSource>
    </environment>
  </environments>
</configuration>

  ④、定義表所對應(yīng)的實體類

  

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
package com.ys.bean;
public class Person {
    private int pid;
    private String pname;
    private int page;
     
    public int getPid() {
        return pid;
    }
    public void setPid(int pid) {
        this.pid = pid;
    }
    public String getPname() {
        return pname;
    }
    public void setPname(String pname) {
        this.pname = pname;
    }
    public int getPage() {
        return page;
    }
    public void setPage(int page) {
        this.page = page;
    }
    @Override
    public String toString() {
        return 'Person [pid=' + pid + ', pname=' + pname + ', page=' + page
                + ']';
    }
}

  ⑤、定義操作 person 表的sql映射文件personMapper.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
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE mapper
  PUBLIC '-////DTD Mapper 3.0//EN'
  'http:///dtd/mybatis-3-mapper.dtd'>
<mapper namespace='com.ys.bean.personMapper'>
  <!-- 根據(jù) pid 查詢 person 表中的數(shù)據(jù)
       id:唯一標識符,此文件中的id值不能重復(fù)
       resultType:返回值類型,一條數(shù)據(jù)庫記錄也就對應(yīng)實體類的一個對象
       parameterType:參數(shù)類型,也就是查詢條件的類型
   -->
  <select id='selectPersonById'
            resultType='com.ys.bean.Person' parameterType='int'>
    <!-- 這里和普通的sql 查詢語句差不多,對于只有一個查詢條件后面的 #{pid}表示占位符,里面不一定要寫pid,寫啥都可以,但是不要空著;如果有多個查詢條件,則要寫pojo類里面的屬性 -->
    select * from person where pid = #{pid}
  </select>
   
  <!-- 查詢person 表所有數(shù)據(jù) -->
  <select id='getAllPerson' resultType='com.ys.bean.Person'>
    select * from person
  </select>
   
  <!-- 根據(jù)id更新數(shù)據(jù) -->
  <update id='updatePersonById' parameterType='com.ys.bean.Person'>
    update person set pname=#{pname},page=#{page} where pid = #{pid}
  </update>
   
  <!-- 向 person 表插入一條數(shù)據(jù) -->
  <insert id='addPerson' parameterType='com.ys.bean.Person'>
    insert into person(pid,pname,page) values(#{pid},#{pname},#{page})
  </insert>
   
  <!-- 根據(jù) pid 刪除數(shù)據(jù) -->
  <delete id='deletePersonById' parameterType='Long'>
    delete from person where pid=#{pid}
  </delete>
   
</mapper>

 ?、?strong>、向 mybatis-configuration.xml 配置文件中注冊 personMapper.xml 文件

1
2
3
4
5
<mappers>
       <!-- 注冊personMapper.xml文件,
       personMapper.xml位于com.ys.bean這個包下,所以resource寫成com/ys/bean/personMapper.xml-->
       <mapper resource='com/ys/bean/personMapper.xml'/>
</mappers>

  如下圖所示:

   ⑦、創(chuàng)建測試類

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
88
package com.ys.test;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.ys.bean.Person;
public class MyBatisTest {
    SqlSession session;
     
    @Before
    public void beforeLoadXML(){
        //加載 mybatis 配置文件
        InputStream inputStream = MyBatisTest.class.
                getClassLoader().getResourceAsStream('mybatis-configuration.xml');
        //構(gòu)建sqlSession的工廠
        SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(inputStream);
        //根據(jù) sqlSessionFactory 產(chǎn)生 session
        session = sqlSessionFactory.openSession();
    }
     
    //根據(jù) pid 查詢 person 表中的數(shù)據(jù)
    @Test
    public void testSelectById(){
        //這個字符串有 personMapper.xml 文件中 兩個部分構(gòu)成
        //<mapper namespace='com.ys.bean.personMapper'> 的 namespace 的值
        //<select id='selectPersonById' > id 值
        String statement = 'com.ys.bean.personMapper'+'.selectPersonById';
        Person p = session.selectOne(statement, 1);
        System.out.println(p);
        session.close();
    }
     
    //查詢person 表所有數(shù)據(jù)
    @Test
    public void testGetAllPerson(){
        String statement = 'com.ys.bean.personMapper.getAllPerson';
        List<Person> listPerson = session.selectList(statement);
        System.out.println(listPerson);
        session.close();
    }
     
    //根據(jù)id更新數(shù)據(jù)
    @Test
    public void updateById(){
        String statement = 'com.ys.bean.personMapper.updatePersonById';
        Person p = new Person();
        p.setPid(1);
        p.setPname('aaa');
        p.setPage(11);
        session.update(statement, p);
        session.commit();
        session.close();
    }
     
    //向 person 表插入一條數(shù)據(jù)
    @Test
    public void addPerson(){
        String statement = 'com.ys.bean.personMapper.addPerson';
        Person p = new Person();
        //由于我們設(shè)置了主鍵的自增長機制,故這里不需要手動設(shè)置 pid 的值
        //p.setPid(1);
        p.setPname('add');
        p.setPage(11);
        session.insert(statement, p);
        session.commit();
        session.close();
    }
     
    //根據(jù) pid 刪除person 表中的數(shù)據(jù)
    @Test
    public void deletePersonById(){
        String statement = 'com.ys.bean.personMapper.deletePersonById';
        session.delete(statement, 1);
        session.commit();
        session.close();
         
    }
     
}

3、MyBatis 入門實例注解配置

   ①、上面的前面四步都是一樣的,但是第五步不一樣,我們不需要創(chuàng)建 personMapper.xml 文件,首先在 src 目錄下創(chuàng)建 personMapper.java 文件

  

   內(nèi)容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.ys.annocation;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.ys.bean.Person;
public interface PersonMapper {
     
    @Insert('insert into person(pid,pname,page) values(#{pid},#{pname},#{page})')
    public int add(Person person);
     
    @Select('select * from person where pid = #{pid}')
    public Person getPerson(int pid);
     
    @Update('update person set pname=#{pname},page=#{page} where pid = #{pid}')
    public int updatePerson(Person preson);
     
    @Delete('delete from person where pid=#{pid}')
    public int deletePerson(int pid);
}

 ?、?、向 mybatis-configuration.xml 配置文件中注冊 personMapper.xml 文件

   ③、編寫測試類

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Test
public void testAnnocation(){
    PersonMapper mapper = session.getMapper(PersonMapper.class);
    Person p = new Person();
    p.setPid(7);
    p.setPname('abc');
    p.setPage(11);
    //調(diào)用增加方法
    mapper.add(p);
    //調(diào)用查詢方法
    Person p1 = mapper.getPerson(3);
    System.out.println(p1);
    //調(diào)用更新方法
    p.setPage(100);
    mapper.updatePerson(p);
    //調(diào)用刪除方法
    mapper.deletePerson(7);
    session.commit();
    session.close();
}

4、MyBatis 入門實例  一對一  基于xml配置

  這里我們以老師和班級為例,假設(shè)一般班級只能擁有有一個老師,一個老師只能帶一個班級。

  ①、創(chuàng)建實體類

  

  Teacher.java

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
package one.to.one;
public class Teacher {
    private int tid;
    private String tname;
    private Classes classes;
     
    public int getTid() {
        return tid;
    }
    public void setTid(int tid) {
        this.tid = tid;
    }
    public String getTname() {
        return tname;
    }
    public void setTname(String tname) {
        this.tname = tname;
    }
    public Classes getClasses() {
        return classes;
    }
    public void setClasses(Classes classes) {
        this.classes = classes;
    }
    @Override
    public String toString() {
        return 'Teacher [tid=' + tid + ', tname=' + tname + ', classes=' + classes + ']';
    }
     
     
}

  Classes.java

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
package one.to.one;
public class Classes {
    private int cid;
    private String cname;
    private Teacher teacher;
     
    public int getCid() {
        return cid;
    }
    public void setCid(int cid) {
        this.cid = cid;
    }
    public String getCname() {
        return cname;
    }
    public void setCname(String cname) {
        this.cname = cname;
    }
    public Teacher getTeacher() {
        return teacher;
    }
    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }
    @Override
    public String toString() {
        return 'Classes [cid=' + cid + ', cname=' + cname + ', teacher=' + teacher + ']';
    }
     
}

  ②、在數(shù)據(jù)庫中根據(jù)實體類創(chuàng)建相應(yīng)的數(shù)據(jù)表

  ③、定義操作 Classes 表的sql映射文件classesMapper.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
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE mapper
  PUBLIC '-////DTD Mapper 3.0//EN'
  'http:///dtd/mybatis-3-mapper.dtd'>
<mapper namespace='one.to.one.classesMapper'>
    <!--
         方式一:嵌套結(jié)果:使用嵌套結(jié)果映射來處理重復(fù)的聯(lián)合結(jié)果的子集
                 封裝聯(lián)表查詢的數(shù)據(jù)(去除重復(fù)的數(shù)據(jù))
         select * from classes c, teacher t where c.tid=t.tid and c.tid=#{tid}
     -->
    <select id='getClasses' resultMap='getClassesMap' parameterType='int'>
        select * from classes c ,teacher t
            where c.tid=t.tid and c.tid=#{tid}
    </select>
    <resultMap type='one.to.one.Classes' id='getClassesMap'>
        <id column='cid' property='cid'/>
        <result column='cname' property='cname'/>
        <association property='teacher' javaType='one.to.one.Teacher'>
            <id column='tid' property='tid'></id>
            <result column='tname' property='tname'/>
        </association>
    </resultMap>
    <!--
         方式一:嵌套結(jié)果:使用嵌套結(jié)果映射來處理重復(fù)的聯(lián)合結(jié)果的子集
                 封裝聯(lián)表查詢的數(shù)據(jù)(去除重復(fù)的數(shù)據(jù))
         select * from teacher t,classes c where t.cid = c.cid and t.cid=#{cid}
     -->
    <select id='getTeacher' resultMap='getTeacherMap' parameterType='int'>
        select * from teacher t,classes c
            where t.cid = c.cid and t.cid=#{cid}
    </select>
    <resultMap type='one.to.one.Teacher' id='getTeacherMap'>
        <id column='tid' property='tid'/>
        <result column='tname' property='tname'/>
        <association property='classes' javaType='one.to.one.Classes'>
            <id column='cid' property='cid'/>
            <result column='cname' property='cname'/>
        </association>
    </resultMap>
     
     
    <!--
         方式二:嵌套查詢:通過執(zhí)行另外一個SQL映射語句來返回預(yù)期的復(fù)雜類型
         SELECT * FROM classes WHERE cid=1;
         SELECT * FROM teacher WHERE tid=1   //1 是上一個查詢得到的tid的值
         property:別名(屬性名)    column:列名 -->
          <!-- 把teacher的字段設(shè)置進去 -->
    <select id='getClasses2' resultMap='getClassesMap2'>
        select * from classes c where c.cid = #{cid}
    </select>
    <resultMap type='one.to.one.Classes' id='getClassesMap2'>
        <id column='cid' property='cid'/>
        <result column='cname' property='cname'/>
        <collection property='teacher' column='tid' select='getTeacherCollection'>
        </collection>
    </resultMap>
    <select id='getTeacherCollection' resultType='one.to.one.Teacher'>
        select tid tid,tname tname from teacher where tid=#{tid}
    </select>
   
</mapper>

  說明:我們這里一對一的關(guān)聯(lián)操作,有兩種方式:

    1、使用嵌套結(jié)果映射來處理重復(fù)的聯(lián)合結(jié)果的子集

    2、通過執(zhí)行另外一個SQL映射語句來返回預(yù)期的復(fù)雜類型

    相關(guān)屬性解釋:

    

 ?、?、向 mybatis-configuration.xml 配置文件中注冊 classesMapper.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
package one.to.one;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.ys.test.MyBatisTest;
public class OneToOneTest {
SqlSession session;
     
    @Before
    public void beforeLoadXML(){
        //加載 mybatis 配置文件
        InputStream inputStream = MyBatisTest.class.
                getClassLoader().getResourceAsStream('mybatis-configuration.xml');
        //構(gòu)建sqlSession的工廠
        SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(inputStream);
        //根據(jù) sqlSessionFactory 產(chǎn)生 session
        session = sqlSessionFactory.openSession();
    }
     
    //一對一嵌套結(jié)果方式:根據(jù)教師id查詢班級信息
    @Test
    public void testGetClasses(){
        String statement = 'one.to.one.classesMapper.getClasses';
        Classes c = session.selectOne(statement, 1);
        System.out.println(c);
    }
     
    //一對一嵌套結(jié)果方式:根據(jù)班級id查詢教師信息
    @Test
    public void testGetTeacher(){
        String statement = 'one.to.one.classesMapper.getTeacher';
        Teacher t = session.selectOne(statement, 1);
        System.out.println(t);
    }
     
    //一對一嵌套查詢方式:根據(jù)教師id查詢班級信息
    @Test
    public void testGetClasses2(){
        String statement = 'one.to.one.classesMapper.getClasses2';
        Classes c = session.selectOne(statement, 1);
        System.out.println(c);
    }
     
     
}

4、MyBatis 入門實例  一對多,多對一  基于xml配置

  這里我們以班級和學(xué)生為例,一個班級里面對應(yīng)多個學(xué)生,這是一對多;反過來,多個學(xué)生對應(yīng)一個班級,這是多對一

  ①、建立學(xué)生和班級的實體類

  Student.java

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
package one.to.many;
public class Student {
    private int sid;
    private String sname;
    private Classes classes;
    public int getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public Classes getClasses() {
        return classes;
    }
    public void setClasses(Classes classes) {
        this.classes = classes;
    }
    @Override
    public String toString() {
        return 'Student [sid=' + sid + ', sname=' + sname + ', classes=' + classes + ']';
    }
     
}

    Classes.java

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
package one.to.many;
import java.util.Set;
public class Classes {
    private int cid;
    private String cname;
    private Set<Student> students;
     
    public int getCid() {
        return cid;
    }
    public void setCid(int cid) {
        this.cid = cid;
    }
    public String getCname() {
        return cname;
    }
    public void setCname(String cname) {
        this.cname = cname;
    }
    public Set<Student> getStudents() {
        return students;
    }
    public void setStudents(Set<Student> students) {
        this.students = students;
    }
    @Override
    public String toString() {
        return 'Classes [cid=' + cid + ', cname=' + cname + ', students=' + students + ']';
    }
}

  ②、在數(shù)據(jù)庫中根據(jù)實體類創(chuàng)建相應(yīng)的數(shù)據(jù)表

  ③、多對一:定義操作 Classes 表的sql映射文件classesMapper.xml 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE mapper
  PUBLIC '-////DTD Mapper 3.0//EN'
  'http:///dtd/mybatis-3-mapper.dtd'>
<mapper namespace='one.to.many.classesMapper'>
    <select id='getClasses' resultMap='getClassesMap'>
        select * from classes c,student s where s.cid=c.cid and c.cid=#{cid}
    </select>
    <resultMap type='one.to.many.Classes' id='getClassesMap'>
        <id column='cid' property='cid'></id>
        <result column='cname' property='cname'/>
        <collection property='students' ofType='one.to.many.Student'>
            <id column='sid' property='sid'/>
            <result column='sname' property='sname'/>
        </collection>
    </resultMap>
     
</mapper>

 ?、?、一對多:定義操作 Student 表的sql映射文件studentMapper.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE mapper
  PUBLIC '-////DTD Mapper 3.0//EN'
  'http:///dtd/mybatis-3-mapper.dtd'>
<mapper namespace='many.to.one.studentMapper'>
    <select id='getStudents' resultMap='getStudentMap'>
        select * from classes c,student s where s.cid=c.cid and s.sid=#{sid}
    </select>
    <resultMap type='one.to.many.Student' id='getStudentMap'>
        <id column='sid' property='sid'></id>
        <result column='sname' property='sname'/>
        <association property='classes' javaType='one.to.many.Classes'>
            <id column='cid' property='cid'/>
            <result column='cname' property='cname'/>
        </association>
    </resultMap>
     
</mapper>

  ⑤、向 mybatis-configuration.xml 配置文件中注冊 classesMapper.xml 、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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package one.to.many;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.ys.test.MyBatisTest;
public class OneToManyTest {
SqlSession session;
     
    @Before
    public void beforeLoadXML(){
        //加載 mybatis 配置文件
        InputStream inputStream = MyBatisTest.class.
                getClassLoader().getResourceAsStream('mybatis-configuration.xml');
        //構(gòu)建sqlSession的工廠
        SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(inputStream);
        //根據(jù) sqlSessionFactory 產(chǎn)生 session
        session = sqlSessionFactory.openSession();
    }
     
    //一對多嵌套結(jié)果方式:根據(jù)班級id查詢班級所有的學(xué)生信息
    @Test
    public void testGetClasses(){
        String statement = 'one.to.many.classesMapper.getClasses';
        Classes c = session.selectOne(statement, 1);
        System.out.println(c);
        System.out.println(c.getStudents().size());
    }
     
     
    //多對一嵌套結(jié)果方式:根據(jù)學(xué)生id查詢班級信息
    @Test
    public void testGetStudents(){
        String statement = 'many.to.one.studentMapper.getStudents';
        Student s = session.selectOne(statement, 1);
        System.out.println(s);
        System.out.println(s.getClasses());
    }
     
     
}

5、MyBatis 入門實例  多對多  基于xml配置

  這里我們以 users 表和 groups 表為例,一個 users 可能加入多個 groups,而一個 groups 可能包含多個 users,故構(gòu)成 多對多 的關(guān)聯(lián)

  ①、在數(shù)據(jù)庫中建立相應(yīng)的表

  users 表

  

  groups 表

  

  兩者之間的關(guān)聯(lián)表users_groups表

  

  ②、建立對應(yīng)的實體類

  Users.java

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
package many.to.many;
import java.util.Set;
public class Users {
    private int uid;
    private String uname;
    private Set<Groups> groups;
    public int getUid() {
        return uid;
    }
    public void setUid(int uid) {
        this.uid = uid;
    }
    public String getUname() {
        return uname;
    }
    public void setUname(String uname) {
        this.uname = uname;
    }
    public Set<Groups> getGroups() {
        return groups;
    }
    public void setGroups(Set<Groups> groups) {
        this.groups = groups;
    }
    @Override
    public String toString() {
        return 'User [uid=' + uid + ', uname=' + uname + ', groups=' + groups + ']';
    }
     
}

    Groups.java

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
package many.to.many;
import java.util.Set;
public class Groups {
    private int gid;
    private String gname;
    private Set<Users> users;
    public int getGid() {
        return gid;
    }
    public void setGid(int gid) {
        this.gid = gid;
    }
    public String getGname() {
        return gname;
    }
    public void setGname(String gname) {
        this.gname = gname;
    }
    public Set<Users> getUsers() {
        return users;
    }
    public void setUsers(Set<Users> users) {
        this.users = users;
    }
    @Override
    public String toString() {
        return 'Group [gid=' + gid + ', gname=' + gname + ', users=' + users + ']';
    }
     
}

    Users_Groups.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package many.to.many;
public class Users_Groups {
    private Users user;
    private Groups group;
    public Users getUser() {
        return user;
    }
    public void setUser(Users user) {
        this.user = user;
    }
    public Groups getGroup() {
        return group;
    }
    public void setGroup(Groups group) {
        this.group = group;
    }
}

 ?、邸⒍?strong>對多:定義操作 sql映射文件userMapper.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 mapper
  PUBLIC '-////DTD Mapper 3.0//EN'
  'http:///dtd/mybatis-3-mapper.dtd'>
<mapper namespace='many.to.many.userMapper'>
    <!-- 給一個用戶 id,查看該用戶下的所有用戶組信息 -->
    <select id='getUsers' resultMap='getGroupMap'>
        select g.gid,g.gname from users_groups ug,groups g
            where ug.group_id=g.gid and ug.user_id=#{uid}
    </select>
    <resultMap type='many.to.many.Groups' id='getGroupMap'>
        <id column='gid' property='gid'/>
        <result column='gname' property='gname'/>
        <collection property='users' ofType='many.to.many.Users'>
            <id column='uid' property='uid'/>
        <result column='uname' property='uname'/>
        </collection>
    </resultMap>
     
</mapper>

 ?、荨⑾?nbsp;mybatis-configuration.xml 配置文件中注冊 userMapper.xml文件

 ?、蕖⒕帉憸y試類

1
2
3
4
5
6
7
8
9
//多對多:根據(jù)根據(jù)用戶 id 查詢所有的用戶組信息
    @Test
    public void testGetGroups(){
        String statement = 'many.to.many.userMapper.getUsers';
        List<Groups> listGroup = session.selectList(statement,1);
        for(Groups g : listGroup){
            System.out.println(g.toString());
        }
    }

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多