成人视屏在线观看-国产99精品-国产精品1区2区-欧美一级在线观看-国产一区二区日韩-色九九九

您的位置:首頁技術(shù)文章
文章詳情頁

MyBatis 多表操作的實現(xiàn)

瀏覽:6日期:2023-10-22 18:16:34

1.1 一對一查詢

1.1.1 概述

  關(guān)系數(shù)據(jù)庫中第一個表中的單個行只可以與第二個表中的一個行相關(guān),且第二個表中的一個行也只可以與第一個表中的一個行相關(guān)。

MyBatis 多表操作的實現(xiàn)

1.1.2 創(chuàng)建實體類

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 創(chuàng)建 DAO 接口

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

1.1.4 結(jié)果映射

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

<resultMap type='User'><result property='id' column='user_id' /><result property='username' column='user_name'/><result property='password' column='hashed_password'/></resultMap><select 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 type='student'> <result property='studentStatus.id' column='st_id'/> <result property='studentStatus.major' column='major'/> <result property='studentStatus.num' column='num'/> </resultMap> <select resultMap='resMap'> select * from student s, student_status st where s.st_id = st.st_id </select></mapper>

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

<mapper namespace='com.software.mybatis.dao.StudentDao'> <resultMap 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 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 type='student' autoMapping='true'> <association property='studentStatus' resultMap='stMap' /> </resultMap> <resultMap type='StudentStatus' autoMapping='true'/> <select 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 多表操作的實現(xiàn)

1.2 一對多查詢

1.2.1 概述

  一對多關(guān)系是關(guān)系數(shù)據(jù)庫中兩個表之間的一種關(guān)系,該關(guān)系中第一個表中的單個行可以與第二個表中的一個或多個行相關(guān),但第二個表中的一個行只可以與第一個表中的一個行相關(guān)。

MyBatis 多表操作的實現(xiàn)

1.2.2 創(chuàng)建實體類

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 創(chuàng)建 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 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 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 多表操作的實現(xiàn)

1.3 多對多查詢

1.3.1 概述

  多對多關(guān)系是關(guān)系數(shù)據(jù)庫中兩個表之間的一種關(guān)系, 該關(guān)系中第一個表中的一個行可以與第二個表中的一個或多個行相關(guān)。第二個表中的一個行也可以與第一個表中的一個或多個行相關(guān)。該關(guān)系一般會借助第三方表實現(xiàn)。

MyBatis 多表操作的實現(xiàn)

1.3.2 創(chuàng)建實體類

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 創(chuàng)建 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 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 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 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 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 多表操作的實現(xiàn)

到此這篇關(guān)于MyBatis 多表操作的實現(xiàn)的文章就介紹到這了,更多相關(guān)MyBatis 多表操作內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

相關(guān)文章:
主站蜘蛛池模板: 久久免费精品国产72精品剧情 | 久久午夜国产片 | 亚洲va久久久噜噜噜久久狠狠 | 一级片国产 | 亚洲自偷自偷图片在线高清 | 91精品国产综合久久久久 | 亚洲精品字幕一区二区三区 | 国产一级不卡毛片 | 亚洲国产欧美一区 | 免费播放巨茎人妖不卡片 | 精品在线一区二区三区 | 作爱在线观看 | 国产精品久久久久亚洲 | 成人久久18网站 | 一级免费视频 | 黄色三级国产 | 高清午夜看片a福利在线观看琪琪 | 免费一级片视频 | 久久国产成人午夜aⅴ影院 久久国产成人亚洲精品影院老金 | 久久手机精品视频 | 国产色在线观看 | 泰国情欲片寂寞的寡妇在线观看 | 国产成人免费不卡在线观看 | 黄色三级视频 | 国产成人小视频 | 国产精彩视频在线 | 国产成人精品日本亚洲语音1 | 综合精品 | 精品一区二区三区三区 | 亚洲欧美日韩精品久久亚洲区 | 欧美夜夜骑 | 亚洲色欧美 | 亚洲第一网站在线观看 | 欧美成人aa | 亚洲欧洲小视频 | 久草在线色站 | 在线播放高清国语自产拍免费 | 三级视频在线播放 | 精品久久久久久综合日本 | 国产精品久久久精品三级 | 最新亚洲精品 |