MyBatis 多表操作的实现
1.1一对一查询
1.1.1概述
关系数据库中第一个表中的单个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关。
1.1.2创建实体类
publicclassStudent{ privateIntegerid; privateStringname; privateBooleanage; privateStringsex; privateStudentStatusstudentStatus; //setandget }
publicclassStudentStatus{ privateIntegerid; privateStringnum; privateStringmajor; //setandget }
1.1.3创建DAO接口
publicclassStudentStatus{ privateIntegerid; privateStringnum; privateStringmajor; //setandget }
1.1.4结果映射
resultMap元素是MyBatis中最重要最强大的元素。它可以从90%的JDBCResultSets数据提取代码中解放出来,并在一些情形下允许进行一些JDBC不支持的操作。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份resultMap能够代替实现同等功能的长达数千行的代码。resultMap的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。之前已经使用过简单映射语句了,但并没有显式指定resultMap。只是简单的使用resultType将所有的列映射到对象的属性上,需要注意的是列名与属性名一致才能映射,解决列名不匹配还是需要使用resultMap。
selectuser_id,user_name,hashed_passwordfromsome_tablewhereid=#{id}
1.1.5配置mapper
select*fromstudents,student_statusstwheres.st_id=st.st_id
上面这种配置会将自动将列名一致的映射到type指定的实体类中,该实体类中属性类型为对象的则需要单独拿出来映射。还可以使用association进行复杂的映射,我们发现未配置的属性无法进行映射。产生这个问题的原因是resultMap的自动映射未打开,使用autoMapping设置这个属性为true/false,MyBatis将会为本结果映射开启/关闭自动映射。
select*fromstudents,student_statusstwheres.st_id=st.st_id
select*fromstudents,student_statusstwheres.st_id=st.st_id
1.1.6核心配置
1.1.7测试
/** *CreatedwithIntelliJIDEA. * *@authorDemo_Null *@date2020/9/3 *@description测试类 */ publicclassMybatisDemo{ @Test publicvoidTestA()throwsIOException{ //加载核心配置文件 InputStreamresourceAsStream=Resources.getResourceAsStream("mybatis.xml"); //获得sqlSession工厂对象 SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream); //获得sqlSession对象 SqlSessionsqlSession=sqlSessionFactory.openSession(); Listlist=sqlSession.selectList("com.software.mybatis.dao.StudentDao.findAll"); System.out.println(list); } }
1.2一对多查询
1.2.1概述
一对多关系是关系数据库中两个表之间的一种关系,该关系中第一个表中的单个行可以与第二个表中的一个或多个行相关,但第二个表中的一个行只可以与第一个表中的一个行相关。
1.2.2创建实体类
publicclassStudent{ privateIntegersId; privateStringsName; privateLongsAge; privateStringsSex; privateIntegercId; //setandget }
publicclassClass{ privateIntegercId; privateStringcName; privateStringcAddr; privateListstudents; //setandget }
1.1.3创建DAO接口
/** *CreatedwithIntelliJIDEA. * *@authorDemo_Null *@date2020/9/3 *@descriptionDAO接口 */ publicinterfaceClassDao{ publicListfindAll(); }
1.1.4配置mapper
select*fromstudents,classcwheres.c_id=c.c_id
1.1.5测试
/** *CreatedwithIntelliJIDEA. * *@authorDemo_Null *@date2020/9/3 *@description测试类 */ publicclassMybatisDemo{ @Test publicvoidTestA()throwsIOException{ //加载核心配置文件 InputStreamresourceAsStream=Resources.getResourceAsStream("mybatis.xml"); //获得sqlSession工厂对象 SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream); //获得sqlSession对象 SqlSessionsqlSession=sqlSessionFactory.openSession(); Listlist=sqlSession.selectList("com.software.mybatis.dao.ClassDao.findAll"); for(ClassaClass:list){ System.out.println(aClass); } } }
1.3多对多查询
1.3.1概述
多对多关系是关系数据库中两个表之间的一种关系,该关系中第一个表中的一个行可以与第二个表中的一个或多个行相关。第二个表中的一个行也可以与第一个表中的一个或多个行相关。该关系一般会借助第三方表实现。
1.3.2创建实体类
publicclassCourse{ privateIntegercId; privateStringcName; privateListstudents; //setandget }
publicclassStudent{ privateIntegersId; privateStringsName; privateLongsAge; privateStringsSex; privateListcourses; //setandget }
1.3.3创建DAO接口
/** *CreatedwithIntelliJIDEA. * *@authorDemo_Null *@date2020/9/3 *@descriptioncourseDAO接口 */ publicinterfaceCourseDao{ publicListfindAll(); }
/** *CreatedwithIntelliJIDEA. * *@authorDemo_Null *@date2020/9/3 *@descriptionstudentDAO接口 */ publicinterfaceStudentDao{ publicListfindAll(); }
1.3.4配置mapper
☞student-mapper.xml
select*fromcoursec,students,s_cscwherec.c_id=sc.c_idands.s_id=sc.s_id
☞course-mapper.xml
select*fromcoursec,students,s_cscwherec.c_id=sc.c_idands.s_id=sc.s_id
1.3.5测试
/** *CreatedwithIntelliJIDEA. * *@authorDemo_Null *@date2020/9/3 *@description测试类 */ publicclassMybatisDemo{ @Test publicvoidTestA()throwsIOException{ //加载核心配置文件 InputStreamresourceAsStream=Resources.getResourceAsStream("mybatis.xml"); //获得sqlSession工厂对象 SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream); //获得sqlSession对象 SqlSessionsqlSession=sqlSessionFactory.openSession(); ListcourseList=sqlSession.selectList("com.software.mybatis.dao.CourseDao.findAll"); List studentList=sqlSession.selectList("com.software.mybatis.dao.StudentDao.findAll"); System.out.println("###课程###"); for(Coursecourse:courseList){ System.out.println(course); } System.out.println("###学生###"); for(Studentstudent:studentList){ System.out.println(student); } } }
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。