MyBatis——數據庫多表映射


第一步:創建數據庫

CREATE TABLE tb_clazz(
   id INT PRIMARY KEY,
   code VARCHAR(18)
)
CREATE TABLE tb_student(
   id INT PRIMARY KEY,
   name VARCHAR(18),
   sex VARCHAR(18),
   age INT,
   clazz_id INT,
   FOREIGN KEY (clazz_id) REFERENCES tb_clazz(id)
)

 

第二步:引入MyBatis框架的jar包,配置mybatis配置文件

/MyBatis/src/mybatis-config.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">

<!-- xml配置文件包含對MyBatis系統的核心配置 -->
<configuration>

    <!-- 指定MyBatis所有日志的具體實現 -->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    
    <!-- 環境配置,即連接的數據庫。 -->
    <environments default="mysql">
        <environment id="mysql">
            <!-- 指定事務管理類型,type="JDBC"指直接簡單使用JDBC的提交和回滾設置 -->
            <transactionManager type="JDBC"/>
            <!-- dataSource指數據源配置,POOLED是JDBC連接對象的數據源連接池的實現 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    
    <!-- mapper告訴了MyBatis去哪找持久化類的映射文件 -->
    <mappers>
        <mapper resource="com/web/mybatis/mapper/UserMapper.xml"/>
        <mapper resource="com/web/mybatis/mapper/StudentMapper.xml"/>
    </mappers>
</configuration>

/MyBatis/src/log4j.properties

#全局的日志配置
log4j.rootLogger=ERROR, stdout
#MyBatis的日志配置
log4j.logger.com.web.mybatis.mapper.UserMapper=DEBUG
#控制台輸出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

 

第三步:創建將要與數據庫表映射的類

/MyBatis/src/com/web/mybatis/domain/Clazz.java

package com.web.mybatis.domain;

import java.util.List;

public class Clazz {
    private Integer id;
    private String code;
    private List<Student> students;
    @Override
    public String toString() {
        return "Clazz [id=" + id + ", code=" + code + "]";
    }
    public String ClazzToString() {
        StringBuffer s = new StringBuffer();
        for(Student student : students) {
            s.append(student.StudentToString());
        }
        return "Clazz [id=" + id + ", code=" + code + ", students={"+s.toString()+"}]";
    }
//省略get和set方法
}

/MyBatis/src/com/web/mybatis/domain/Student.java

package com.web.mybatis.domain;

public class Student {
    private Integer id;
    private String name;
    private String sex;
    private Integer age;
    private Clazz clazz;
    
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + ", clazz=" + clazz.toString() + "]";
    }
    public String StudentToString() {
        return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]";
    }
//省略get和set方法
}

 

第四步:映射文件

/MyBatis/src/com/web/mybatis/mapper/StudentMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.web.mybatis.mapper.StudentMapper">
    <!-- 查詢學生,關聯班級 -->
    <resultMap id="studentResultMap" type="com.web.mybatis.domain.Student">
        <id property="id" column="id" />
        <result property="name" column="name" />
        <result property="sex" column="sex" />
        <result property="age" column="age" />
        <!-- 關聯映射 -->
        <association property="clazz" column="clazz_id" javaType="com.web.mybatis.domain.Clazz" select="selectClazzWithId"/>
    </resultMap>
    <select id="selectClazzWithId" resultType="com.web.mybatis.domain.Clazz">
        SELECT * FROM tb_clazz WHERE id=#{id}
    </select>
    <select id="selectStudent" resultMap="studentResultMap">
        SELECT * FROM tb_student
    </select>
    
    
    <!-- 查詢班級,關聯學生 -->
    <resultMap id="clazzResultMap" type="com.web.mybatis.domain.Clazz" >
        <id property="id" column="id" />
        <result property="code" column="code" />
        <!-- 關聯映射 -->
        <collection property="students" javaType="ArrayList" column="id" ofType="com.web.mybatis.domain.Student" select="selectStudentWithId" />
    </resultMap>
    <select id="selectStudentWithId" resultType="com.web.mybatis.domain.Student">
        SELECT * FROM tb_student WHERE clazz_id=#{id}
    </select>
    <select id="selectClazz" resultMap="clazzResultMap">
        SELECT * FROM tb_clazz
    </select>
</mapper>

 

第五步:測試

/MyBatis/src/com/web/mybatis/factory/FKSqlSessionFactory.java

package com.web.mybatis.factory;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * 封裝讀取配置文件mybatis-config.xml,
 * 根據文件信息創建SqlSessionFactory對象,
 * 再獲取SqlSession對象
 * */
public class FKSqlSessionFactory {
    private static SqlSessionFactory sqlSessionFactory = null;
    //初始化創建SqlSessionFactory對象
    static {
        try {
            //讀取mybatis-config.xml文件
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            //初始化mybatis,創建SqlSessionFactory類的實例
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    //獲取SqlSession對象的靜態方法
    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
    //獲取SqlSessionFactory的靜態方法
    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }
}

/MyBatis/src/com/web/mybatis/test/StudentTest.java

package com.web.mybatis.test;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.web.mybatis.domain.Clazz;
import com.web.mybatis.domain.Student;
import com.web.mybatis.factory.FKSqlSessionFactory;

public class StudentTest {
    
    public static void SelectStudentTest() {
        //獲得Session實例
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        //查詢User對象
        List<Student> list = session.selectList("com.web.mybatis.mapper.StudentMapper.selectStudent");
        for(Student row : list) {
            System.out.println(row.toString());
        }
        //提交事務
        session.commit();
        //關閉Session
        session.close();
    }
    
    public static void SelectClazzTest() {
        //獲得Session實例
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        //查詢User對象
        List<Clazz> list = session.selectList("com.web.mybatis.mapper.StudentMapper.selectClazz");
        for(Clazz clazz : list) {
            System.out.println(clazz.ClazzToString());
        }
        //提交事務
        session.commit();
        //關閉Session
        session.close();
    }
    
    public static void main(String[] args) {
//        SelectStudentTest();
        SelectClazzTest();
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM