MyBatis3.X复杂Sql查询的语句
程序员文章站
2022-06-25 20:17:51
mybatis3.x复杂sql查询mybatis3.x的resultmap1.mybatis的sql语句返回的结果有两种 resulttype 查询出的字段在相应的pojo中必须有和它相同的字段对...
mybatis3.x复杂sql查询
mybatis3.x的resultmap
1.mybatis的sql语句返回的结果有两种
- resulttype
- 查询出的字段在相应的pojo中必须有和它相同的字段对应,或者基本数据类型
- 适合简单查询
- resultmap
需要自定义字段,或者多表查询,一对多等关系,比resulttype更强大
适合复杂查询
<resultmap id="videoresultmap" type="video"> <!-- id 指定查询列列的唯⼀一标示 column 数据库字段的名称 property pojo类的名称 --> <id column="id" property="id" jdbctype="integer" /> <result column="video_tile" property="title" jdbctype="varchar" /> <result column="summary" property="summary" jdbctype="varchar" /> <result column="cover_img" property="coverimg" jdbctype="varchar" /> </resultmap> <select id="selectbasefieldbyidwithresultmap" resultmap="videoresultmap"> select id , title as video_tile, summary, cover_img from video where id = #{video_id} </select>
resultmap复杂对象一对一查询结果映射之association
association:映射到pojo的某个复杂类型属性,比如订单order对象里面包含user对象
<!-- 名称空间,需要保存全局唯一,最好是和dao层的java接口一致 可以映射sql语句到对应的方法名参数和返回值 mybatis是使用接口动态代理 --> <mapper namespace="net.xiaotiancai.online_class.dao.videoordermapper"> <resultmap id="videoorderresultmap" type="videoorder"> <id column="id" property="id"></id> <result column="user_id" property="userid"></result> <result column="out_trade_no" property="outtradeno"></result> <result column="state" property="state"></result> <result column="total_fee" property="totalfee"></result> <result column="video_id" property="videoid"></result> <result column="video_title" property="videotitle"></result> <!-- 配置属性一对一 property对应videoorder里面的user javatype对应这个属性的类型 --> <association property="user" javatype="user"> <id column="user_id" property="id"></id> <result column="name" property="name"></result> <result column="head_img" property="headimg"></result> <result column="phone" property="phone"></result> </association> </resultmap> <!--一对一订单查询,订单内部包含用户属性--> <select id="queryvideoorderlist" resultmap="videoorderresultmap"> select o.id id, o.user_id, o.out_trade_no, o.state, o.total_fee, o.video_id, o.video_title, u.name, u.head_img, u.phone from video_order o left join user u on o.user_id = u.id </select> </mapper>
代码
// resultmap association关联查询 videoordermapper videoordermapper =sqlsession.getmapper(videoordermapper.class); list<videoorder> videoorderlist = videoordermapper.queryvideoorderlist(); system.out.println(videoorderlist.tostring());
resultmap复杂对象一对多查询结果映射之collection
collection: 一对多查询结果查询映射,比如user有多个订单
<resultmap id="userorderresultmap" type="user"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="headimg" column="head_img"/> <result property="phone" column="phone"/> <!-- property 填写pojo类中集合类属性的名称 oftype 集合⾥里里⾯面的pojo对象 --> <collection property="videoorderlist" oftype="videoorder"> <!--配置主键,管理理order的唯⼀一标识--> <id column="order_id" property="id"/> <result column="user_id" property="userid"/> <result column="out_trade_no" property="outtradeno"/> <result column="state" property="state"/> <result column="total_fee" property="totalfee"/> <result column="video_id" property="videoid"/> <result column="video_title" property="videotitle"/> <result column="video_img" property="videoimg"/> </collection> </resultmap> <select id="queryuserorder" resultmap="userorderresultmap"> select u.id, u.name, u.head_img, u.phone, o.id order_id, o.out_trade_no, o.user_id, o.state, o.total_fee, o.video_id, o.video_title from user u left join video_order o on u.id = o.user_id </select>
代码
// resultmap association关联查询 videoordermapper videoordermapper =sqlsession.getmapper(videoordermapper.class); //resultmap collection测试 list<user> userlist = videoordermapper.queryuserorder(); system.out.println(userlist.tostring());
mybatis3.x resultmap复杂对象查询总结
总结resultmap的复杂对象查询
- association映射的是一个pojo类,处理一对一的关联关系。
- collection映射的一个集合列表,处理的是一对多的关联关系。
- 模板
<!--column不做限制,可以为任意表的字段,而property须为type定义的pojo属性--> <resultmap id=“唯一的标识”type=“映射的pojo对象"> <id column="表的主键字段,或查询语句中的别名字段”jdbcrype="字段类型”property=“映射pojo对象的主键属性"/> <result column="表的一个字段”jdbcrype="字段类型”property=“映射到pojo对象的一个属性"/> <association property="pojo的一个对象属性”javarype="pojo关联的pojo对象"> <id column="关联pojo对象对应表的主键字段”jdbcrype="字段类型”property="关联pojo对象的属性"/> <result column="表的字段”jdbcrype="字段类型”property="关联pojo对象的属性"/> </association> <!--集合中的property 需要为oftype定义的pojo对象的属性--> <collection property="pojo的集合属性名称”oftype="集合中单个的pojo对象类型"> <id column="集合中pojo对象对应在表的主键字段”jdbcrype="字段类型”property=“集合中pojo对象的主键属性”/> <result column="任意表的字段”jdbcrype="字段类型”property="集合中的pojo对象的属性”/> </collection> </resultmap>
到此这篇关于mybatis3.x复杂sql查询的文章就介绍到这了,更多相关mybatis复杂sql查询内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: 配音秀的声音鉴定功能在哪里
下一篇: 男人不爱女人的表现,要注意辨别
推荐阅读
-
SQLSERVER ISNULL 函数与判断值是否为空的sql语句
-
sql 2000 无法执行查询,因为一些文件缺少或未注册"的解决方法
-
一条SQL语句修改多表多字段的信息的具体实现
-
sql中count或sum为条件的查询示例(sql查询count)
-
oracle下巧用bulk collect实现cursor批量fetch的sql语句
-
SQL Server 2008的逻辑查询处理步骤
-
查看django执行的sql语句及消耗时间的两种方法
-
Django 浅谈根据配置生成SQL语句的问题
-
Sql Server 索引使用情况及优化的相关Sql语句分享
-
sql server中通过查询分析器实现数据库的备份与恢复方法分享