国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - MyBatis 多表操作的實現

MyBatis 多表操作的實現

2020-09-05 00:15Demo_Null Java教程

這篇文章主要介紹了MyBatis 多表操作的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1.1 一對一查詢

1.1.1 概述

關系數據庫中第一個表中的單個行只可以與第二個表中的一個行相關,且第二個表中的一個行也只可以與第一個表中的一個行相關。

MyBatis 多表操作的實現

1.1.2 創建實體類

public class Student {
  private Integer id;
  private String name;
  private Boolean age;
  private String sex;
  private StudentStatus studentStatus;

  // set and get
}
public class StudentStatus {
  private Integer id;
  private String num;
  private String major;

  // set and get
}

1.1.3 創建 DAO 接口

public class StudentStatus {
  private Integer id;
  private String num;
  private String major;

  // set and get
}

1.1.4 結果映射

resultMap 元素是 MyBatis 中最重要最強大的元素。它可以從 90% 的 JDBC ResultSets 數據提取代碼中解放出來,并在一些情形下允許進行一些 JDBC 不支持的操作。實際上,在為一些比如連接的復雜語句編寫映射代碼的時候,一份 resultMap 能夠代替實現同等功能的長達數千行的代碼。resultMap 的設計思想是,對于簡單的語句根本不需要配置顯式的結果映射,而對于復雜一點的語句只需要描述它們的關系就行了。之前已經使用過簡單映射語句了,但并沒有顯式指定 resultMap。只是簡單的使用 resultType 將所有的列映射到對象的屬性上,需要注意的是列名與屬性名一致才能映射,解決列名不匹配還是需要使用 resultMap。

<resultMap id="userResultMap" type="User">
	<result property="id" column="user_id" />
	<result property="username" column="user_name"/>
	<result property="password" column="hashed_password"/>
</resultMap>
<select id="selectUsers" resultMap="userResultMap">
	select user_id, user_name, hashed_password from some_table where id = #{id}
</select>

1.1.5 配置 mapper

<?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.software.mybatis.dao.StudentDao">
  <resultMap id="resMap" type="student">
    <result property="studentStatus.id" column="st_id"/>
    <result property="studentStatus.major" column="major"/>
    <result property="studentStatus.num" column="num"/>
  </resultMap>
  <select id="findAll" resultMap="resMap">
    select * from student s, student_status st where s.st_id = st.st_id
  </select>
</mapper>

上面這種配置會將自動將列名一致的映射到 type 指定的實體類中,該實體類中屬性類型為對象的則需要單獨拿出來映射。還可以使用 association 進行復雜的映射,我們發現未配置的屬性無法進行映射。產生這個問題的原因是 resultMap 的自動映射未打開,使用 autoMapping 設置這個屬性為 true/false,MyBatis 將會為本結果映射開啟/關閉自動映射。

<mapper namespace="com.software.mybatis.dao.StudentDao">
  <resultMap id="resMap" type="com.software.mybatis.entity.Student">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="sex" column="sex"/>
    <result property="age" column="age"/>
    <association property="studentStatus" javaType="com.software.mybatis.entity.StudentStatus">
      <result property="id" column="st_id"/>
      <result property="major" column="major"/>
      <result property="num" column="num"/>
    </association>
  </resultMap>
  <select id="findAll" resultMap="resMap">
    select * from student s, student_status st where s.st_id = st.st_id
  </select>
</mapper>
<?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.software.mybatis.dao.StudentDao">
  <resultMap id="resMap" type="student" autoMapping="true">
    <association property="studentStatus" resultMap="stMap" />
  </resultMap>
  <resultMap id="stMap" type="StudentStatus" autoMapping="true"/>
  <select id="findAll" resultMap="resMap">
    select * from student s, student_status st where s.st_id = st.st_id
  </select>
</mapper>

1.1.6 核心配置

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

  <settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
  </settings>

  <typeAliases>
    <package name="com.software.mybatis.entity"/>
  </typeAliases>

  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/db"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>

  <mappers>
    <mapper resource="student-mapper.xml"/>
  </mappers>

</configuration>

1.1.7 測試

/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/9/3
 * @description 測試類
 */
public class MybatisDemo {

  @Test
  public void TestA() throws IOException {
    // 加載核心配置文件
    InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
    // 獲得 sqlSession 工廠對象
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    // 獲得 sqlSession 對象
    SqlSession sqlSession = sqlSessionFactory.openSession();

    List<Student> list = sqlSession.selectList("com.software.mybatis.dao.StudentDao.findAll");

    System.out.println(list);
  }
}

MyBatis 多表操作的實現

1.2 一對多查詢

1.2.1 概述

一對多關系是關系數據庫中兩個表之間的一種關系,該關系中第一個表中的單個行可以與第二個表中的一個或多個行相關,但第二個表中的一個行只可以與第一個表中的一個行相關。

MyBatis 多表操作的實現

1.2.2 創建實體類

public class Student {
  private Integer sId;
  private String sName;
  private Long sAge;
  private String sSex;
  private Integer cId;
	
	// set and get
}
public class Class {
  private Integer cId;
  private String cName;
  private String cAddr;
  private List<Student> students;
  	
	// set and get
}

1.1.3 創建 DAO 接口

/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/9/3
 * @description DAO 接口
 */
public interface ClassDao {
  public List<Class> findAll();
}

1.1.4 配置 mapper

<?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.software.mybatis.dao.ClassDao">
  <resultMap id="resMap" type="Class">
    <result property="cId" column="c_id"/>
    <result property="cName" column="c_name"/>
    <result property="cAddr" column="c_addr"/>
    <collection property="students" ofType="Student">
      <result property="sId" column="s_id" />
      <result property="sName" column="s_name"/>
      <result property="sAge" column="s_age"/>
      <result property="sSex" column="s_sex"/>
      <result property="cId" column="c_id"/>
    </collection>
  </resultMap>
  <select id="findAll" resultMap="resMap">
    select * from student s, class c where s.c_id = c.c_id
  </select>
</mapper>

1.1.5 測試

/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/9/3
 * @description 測試類
 */
public class MybatisDemo {

  @Test
  public void TestA() throws IOException {
    // 加載核心配置文件
    InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
    // 獲得 sqlSession 工廠對象
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    // 獲得 sqlSession 對象
    SqlSession sqlSession = sqlSessionFactory.openSession();

    List<Class> list = sqlSession.selectList("com.software.mybatis.dao.ClassDao.findAll");

    for (Class aClass : list) {
      System.out.println(aClass);
    }
  }

}

MyBatis 多表操作的實現

1.3 多對多查詢

1.3.1 概述

多對多關系是關系數據庫中兩個表之間的一種關系, 該關系中第一個表中的一個行可以與第二個表中的一個或多個行相關。第二個表中的一個行也可以與第一個表中的一個或多個行相關。該關系一般會借助第三方表實現。

MyBatis 多表操作的實現

1.3.2 創建實體類

public class Course {
  private Integer cId;
  private String cName;
  private List<Student> students;
	
	// set and get
}
public class Student {
  private Integer sId;
  private String sName;
  private Long sAge;
  private String sSex;
  private List<Course> courses;

	// set and get
}

1.3.3 創建 DAO 接口

/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/9/3
 * @description course DAO 接口
 */
public interface CourseDao {
  public List<Course> findAll();
}
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/9/3
 * @description student DAO 接口
 */
public interface StudentDao {
  public List<Student> findAll();
}

1.3.4 配置 mapper

 student-mapper.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.software.mybatis.dao.StudentDao">
  <resultMap id="resMap" type="Student">
    <result property="sId" column="s_id" />
    <result property="sName" column="s_name"/>
    <result property="sAge" column="s_age"/>
    <result property="sSex" column="s_sex"/>
    <collection property="courses" ofType="Course">
      <result property="cId" column="c_id"/>
      <result property="cName" column="c_name"/>
    </collection>
  </resultMap>
  <select id="findAll" resultMap="resMap">
    select * from course c, student s, s_c sc where c.c_id = sc.c_id and s.s_id = sc.s_id
  </select>
</mapper>

 course-mapper.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.software.mybatis.dao.CourseDao">
  <resultMap id="resMap" type="Course">
    <result property="cId" column="c_id"/>
    <result property="cName" column="c_name"/>
    <collection property="students" ofType="Student">
      <result property="sId" column="s_id" />
      <result property="sName" column="s_name"/>
      <result property="sAge" column="s_age"/>
      <result property="sSex" column="s_sex"/>
    </collection>
  </resultMap>
  <select id="findAll" resultMap="resMap">
    select * from course c, student s, s_c sc where c.c_id = sc.c_id and s.s_id = sc.s_id
  </select>
</mapper>

1.3.5 測試

/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/9/3
 * @description 測試類
 */
public class MybatisDemo {

  @Test
  public void TestA() throws IOException {
    // 加載核心配置文件
    InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
    // 獲得 sqlSession 工廠對象
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    // 獲得 sqlSession 對象
    SqlSession sqlSession = sqlSessionFactory.openSession();

    List<Course> courseList = sqlSession.selectList("com.software.mybatis.dao.CourseDao.findAll");
    List<Student> studentList = sqlSession.selectList("com.software.mybatis.dao.StudentDao.findAll");

    System.out.println("### 課程 ###");
    for (Course course : courseList) {
      System.out.println(course);
    }

    System.out.println("### 學生 ###");
    for (Student student : studentList) {
      System.out.println(student);
    }
  }
}

MyBatis 多表操作的實現

到此這篇關于MyBatis 多表操作的實現的文章就介紹到這了,更多相關MyBatis 多表操作內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/Demo_Null/article/details/108378164

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产成人在线视频 | 视频一区二区三区中文字幕 | 亚洲欧美一区二区三区在线 | 欧美日韩国产一区二区三区 | 国产精品美女久久久久久久网站 | 欧美一区二区三区xxxx监狱 | 国产精品亚洲综合 | 精品一区二区在线看 | 日本全黄裸体片 | 久久久91精品国产一区二区三区 | 亚洲成人av在线 | 国产裸体永久免费视频网站 | 精品免费视频 | 久久亚洲天堂 | 欧美成人精品一区二区 | 久久久亚洲成人 | 国产成人一级毛片 | 日韩精品专区在线影院重磅 | 国产免费一区二区三区 | 九热精品视频 | 99伊人网 | 精品国产精品一区二区夜夜嗨 | 天堂资源 | 色婷婷久久一区二区三区麻豆 | 国产精品美女久久久久久久网站 | 久久久影视| 日韩中文字幕在线播放 | 日韩福利在线 | 日韩在线不卡 | 日韩www| 影音先锋中文字幕一区 | 欧美国产精品一区二区三区 | 在线观看av片| 国产精品一区二区视频 | 欧美a一级 | 欧美精品在线一区二区三区 | 91.成人天堂一区 | 精品国产不卡一区二区三区 | 欧美国产精品一区二区三区 | 国产精品资源在线观看 | 美日韩免费视频 |