MyBatis关联映射(一对多查询)
引“一个用户可以有多个订单多个订单也可以归一个用户所有。”本文主要实现《Java EE企业级应用开发教程SpringSpringMVCMybatis》第2版中第4章中的MyBatis一对一查询。本文使用工具IDEA2024、jdk1.8、maven3.6.3jdk1.8下载地址jdk1.8.0_131.zip链接:1百度网盘:通过网盘分享的文件jdk1.8.0_131.zip链接: https://pan.baidu.com/s/1KfrWgmzk720RHxlMcySPow?pwd49dt 提取码: 49dt(2) 夸克网盘我用夸克网盘给你分享了「jdk_8.0.1310.11.zip」点击链接或复制整段内容打开「夸克APP」即可获取。/82383b6hcL链接https://pan.quark.cn/s/25b5829aba22?pwdqwK9提取码qwK9Maven3.6.3下载地址链接:1百度网盘通过网盘分享的文件apache-maven-3.6.3.zip链接: https://pan.baidu.com/s/1hDekReMQF-CdbO6SSBpPaQ?pwdke73 提取码: ke732夸克网盘我用夸克网盘给你分享了「apache-maven-3.6.3.zip」点击链接或复制整段内容打开「夸克APP」即可获取。/fd6c3b6gww链接https://pan.quark.cn/s/1f109c6b6581?pwdRq2P提取码Rq2PWin10如何配置Java JDK环境请点击这里。Win10如何配置Maven环境请点击这里。IDEA如何配置JDK,请点击这里。IDEA如何配置Maven请点击这里。可能遇到的报错java.io.IOException: Could not find resource mybatis-config.xmlIDEA 连接数据库报错Public Key Retrieval is not allowed本文源代码下载地址1百度网盘通过网盘分享的文件ch04Mybatis关联映射.zip链接: https://pan.baidu.com/s/1dCjdWJaEDa0LIN_M0H2bew?pwd8p36 提取码: 8p362夸克网盘我用夸克网盘给你分享了「ch04Mybatis关联映射.zip」点击链接或复制整段内容打开「夸克APP」即可获取。/33a13b6hTX链接https://pan.quark.cn/s/99b916923d33?pwdsfjN提取码sfjN0.数据库创建我们按照下面的方式创建数据库和数据表-- 创建数据库CREATEDATABASEIFNOTEXISTSmybatis;-- 使用数据库USEmybatis;-- 创建tb_user表CREATETABLEIFNOTEXISTStb_user(idINT(32)PRIMARYKEYAUTO_INCREMENT,usernamevarchar(256),addressvarchar(256));-- 插入数据INSERTINTOtb_userVALUES(1,小明,北京);INSERTINTOtb_userVALUES(2,李华,上海);INSERTINTOtb_userVALUES(3,李刚,上海);-- 创建tb_orders表CREATETABLEIFNOTEXISTStb_orders(idINT(32)PRIMARYKEYAUTO_INCREMENT,numbervarchar(32)NOTNULL,user_idint(32)NOTNULL,FOREIGNKEY(user_id)REFERENCEStb_user(id));-- 插入数据INSERTINTOtb_ordersVALUES(1,1001,1);INSERTINTOtb_ordersVALUES(2,1002,2);INSERTINTOtb_ordersVALUES(3,1003,3);1.项目创建项目创建过程可以参考这篇文章IDEA 2024版本创建maven项目的方式有哪些?这里选择使用maven的方式创建打开IDEA点击“文件—新建—项目”这里使用生成器生成maven项目maven配置正确才能正常构建jdk版本选的1.8Archtype选择的是webapp点击“创建”等待一段时间后项目构建完毕。maven构建完项目后如下出现上面的SUCCESS空白的maven项目就创建完毕了。下面开始引入依赖文件。我们打开项目的pom.xml参考下面的代码引入mybatis和mysql等依赖projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.guo/groupIdartifactIdch04/artifactIdpackagingwar/packagingversion1.0-SNAPSHOT/versionnamech04 Maven Webapp/nameurlhttp://maven.apache.org/urldependenciesdependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.2/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.11/version/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope/dependency/dependenciesbuildfinalNamech04/finalName/build/project点击刷新依赖maven就可以下载依赖了。2.创建实体类先要创建相关的文件夹这里创建java文件夹也就是Maven源目录。这个文件夹创建后是蓝色的。java这个文件夹如果不是蓝色的可以右击这个文件夹选择“将目录标记为”—”源代码目录”然后创建实体类的文件夹com.itheima.pojo右击java选择“新建”然后点击“软件包”软件包的名字是 com.itheima.pojo然后回车创建然后创建实体类,右击pojo文件夹选择“新建”—”Java类”类名是 Orders选择是“类”参考代码如下packagecom.itheima.pojo;publicclassOrders{privateIntegerid;//订单idprivateStringnumber;//订单编号publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.idid;}publicStringgetNumber(){returnnumber;}publicvoidsetNumber(Stringnumber){this.numbernumber;}OverridepublicStringtoString(){returnOrders{idid, numbernumber\};}}生成后项目代码如下再按照同样方式生成一个类类名是Users类名是User参考代码如下packagecom.itheima.pojo;importjava.util.List;publicclassUsers{privateIntegerid;//用户idprivateStringusername;//用户姓名privateStringaddress;//用户地址privateListOrdersordersList;//用户关联订单publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.idid;}publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.usernameusername;}publicStringgetAddress(){returnaddress;}publicvoidsetAddress(Stringaddress){this.addressaddress;}publicListOrdersgetOrdersList(){returnordersList;}publicvoidsetOrdersList(ListOrdersordersList){this.ordersListordersList;}OverridepublicStringtoString(){returnUsers{idid, usernameusername\, addressaddress\, ordersListordersList};}}创建完后项目如下所示3.创建映射文件选择“resources”文件夹右击选择“新建”—”目录”创建com.itheima.mapper文件夹如果出现上面的提示可以把文件的名字改为com/itheima/mapper按回车后生成相关文件夹然后右击mapper文件夹选择“新建”—”文件”文件名称为 “UsersMapper.xml”要创建的代码参考如下?xml version1.0 encodingUTF-8?!DOCTYPEmapperPUBLIC-//mybatis.org//DTD mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmappernamespacecom.itheima.mapper.UsersMapperselectidfindUserWithOrdersparameterTypeIntegerresultMapUserWithOrdersResultSELECT u.*,o.id as orders_id,o.number from tb_user u,tb_orders o WHERE u.id o.user_id AND u.id #{id}/select!-- 一对多关联映射collection,ofType表示属性集合中的元素类型ListOrders属性即Orders类 --resultMaptypecom.itheima.pojo.UsersidUserWithOrdersResultidpropertyidcolumnid/resultpropertyusernamecolumnusername/resultpropertyaddresscolumnaddress/collectionpropertyordersListofTypecom.itheima.pojo.Ordersidpropertyidcolumnorders_id/resultpropertynumbercolumnnumber//collection/resultMap/mapper创建后项目如下4.创建数据库配置文件db.properties右击“resources”文件夹选择“新建”——”文件”文件名称为db.properties参考代码如下mysql.drivercom.mysql.cj.jdbc.Driver mysql.urljdbc:mysql://localhost:3306/mybatis?serverTimezoneUTCcharacterEncodingutf8useUnicodetrueuseSSLfalse mysql.usernameroot mysql.password123456注意此处要修改为你自己的数据库的用户名和密码。5.创建mybatis配置文件mybatis-config.xml右击“resources”文件夹选择“新建”——”文件”文件名称为 mybatis-config.xml参考代码如下?xml version1.0 encodingUTF-8 ?!DOCTYPEconfigurationPUBLIC-//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtdconfiguration!-- 环境配置 --!-- 加载类路径下的属性文件 --propertiesresourcedb.properties/typeAliasespackagenamecom.itheima.pojo//typeAliasesenvironmentsdefaultdevelopmentenvironmentiddevelopmenttransactionManagertypeJDBC/!-- 数据库连接相关配置 ,db.properties文件中的内容--dataSourcetypePOOLEDpropertynamedrivervalue${mysql.driver}/propertynameurlvalue${mysql.url}/propertynameusernamevalue${mysql.username}/propertynamepasswordvalue${mysql.password}//dataSource/environment/environments!-- 配置Mapper文件 --mappersmapperresourcecom/itheima/mapper/UserMapper.xml//mappers/configuration创建完后项目结构如下6.创建测试类右击src文件夹选择“新建”—”目录”这里文件夹是 test/java注意颜色测试文件夹是绿色如果不是绿色需要手动标记成测试源。右击绿色的java文件夹选择“新建”—”Java类”类名为 MyBatisTest参考代码如下importcom.itheima.pojo.Users;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.Test;importjava.io.IOException;importjava.io.Reader;publicclassMyBatisTest{TestpublicvoidfindUserWithOrdersTest(){//读取文件名Stringresourcesmybatis-config.xml;//创建流Readerreadernull;try{//读取mybatis-config.xml文件内容到reader对象中readerResources.getResourceAsReader(resources);}catch(IOExceptione){e.printStackTrace();}//初始化mybatis数据库,创建SqlSessionFactory类的实例SqlSessionFactorysqlMappernewSqlSessionFactoryBuilder().build(reader);//创建SqlSession实例SqlSessionsessionsqlMapper.openSession();//传入参数查询返回结果Usersuserssession.selectOne(com.itheima.mapper.UsersMapper.findUserWithOrders,1);System.out.println(users);//关闭sessionsession.close();}}添加完后项目结构如下测试效果如下