ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Mybatis深入

2019-04-15 09:49:53  阅读:281  来源: 互联网

标签:username pojo resultMap 查询 深入 user sql Mybatis


总结下mybatis比较实用的知识点。

一、传递参数

输入参数

1、传递简单类型:parameterType="包装类的基本数据类型",#{}占位符 或者 ${}进行sql拼接
2、传递pojo对象:parameterType="别名",#{}或者${}括号中的值为pojo属性,例如插入:#{username} username是pojo的属性值
3、传递包装的pojo对象
    一个类里面设置了private User user;还有它的set、get方法,就是包装了pojo,当然里面可以包装n个pojo对象
    parameterType="包装类名"
    `${user.username}`

输出参数

1、简单的数据类型
    resultType="Integer"      Integer String ....
2、pojo对象
    resultType="类名" (已经配置了别名,否则要全路径)selectOne查询单个pojo,selectList多个pojo
3、resultMap
    resultMap可以指定将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功
    如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系,resultMap实质上还需要将查询结果映射到pojo对象中
    resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一和一对多查询
resultMap应用场景1:当数据库表字段和pojo不一样时
解决方案:
(1)、改数据库字段名,或者改pojo属性名(不可取,数据库修改麻烦,pojo属性修改不遵循了命名规范)
(2)、select语句时给别名,别名和pojo属性名一致即可。可取但不方便,每个地方都要取别名。 例如:select user_id userId from user;
(3)、使用resultMap
resultMap入门/定义
<resultMap type="order" id="order_list_map">
    id用于映射主键 property为pojo,column为表的字段
    <id property="id" column="id"/>
普通字段用result映射,习惯性全部映射写全比较好,虽然type指定了order,写一个表的一个字段和pojo映射也不会错,但是多表查询就会出错
    <result property="userId" column="user_id"/>
</resultMap>
使用resultMap
<select id="xxx" resultMap="order_list_map">
    select user_id userId from user;
</select>
 

二、sql灵活使用

1、sql-if语句:改造sql使得更灵活,满足各种应用场景

使用:<if test="条件">条件成立后执行的sql语句体</if>
    例如:where 1 = 1 <if test="username != null and username != ''""> and username LIKE '%{username}%' </if>
    <if test="sex != null and sex != ''">and sex=#{sex} </if>
    1 = 1是让where永远成立,解决不让单个and出现导致 where and语句错误

 

 

 

 

2、sql-where

<where>标签自动补上where关键字,同时处理多余and,解决不让单个and出现导致 where and语句错误的另一个方法,不用每次写1 = 1
用了where标签不能再手动加where不然会出错
<where>
    <if test="username != null and username != ''"> username LIKE '%{username}%' </if>
    <if test="sex != null and sex != ''">and sex=#{sex} </if>
</where>

 

 

 

 

 

3、sql-sql片段

<sql id="user_sql">username</sql>
<select id="xx" >
select 
refid引用定义好的sql片段id
<include refid="user_sql"></include> 
from user</select>

 

 

 

 

 

4、sql-foreach

<foreach>是一个循环标签 collection是要遍历的集合 open循环开始之前输出的内容 item设置循环遍历 separator分隔符 close循环结束之后输出的内容
目的,拼装id IN(1,25,29,30,35)<foreach collection="ids" open=“id IN(”item="uId" separator="," close=")">  #{uId} </foreach>

 

 

 

三、表的查询

1、一对一关联查询
方法一、使用resultType
新建orderUser的pojo,继承自order(就是要把两张关联表要查询的属性都弄到一个类上)
select o.id,u.username from order o left join user u on u.id = o.userid

2、第一种方法不符合面向对象 所以用resultMap
<resultMap type="order" id="order_user_map">
...order表
<association property="user" javaType="com.xxx.pojo.User"> association 用于配置一对一关系,property:order里面的User属性,javaType:user的数据类型,支持别名
...user表
</association>

3、一对多查询(collection与ofType和一对一查询不一样,其他一样)
<resultMap type="user" id="order_user_map">
...user表
<collection property="orders" ofType="com.xxx.pojo.Order"> collection用于配置一对多关系,property:User里面的order的属性,ofType:orders的数据类型,支持别名
...order表
</collection>

 

四、mybatis的逆向工程

见博客逆向工程说明及使用:https://blog.csdn.net/qq_41055045/article/details/89218096

 

五、mybatis整合spring

见博客:https://blog.csdn.net/qq_41055045/article/details/89155336

 

 

标签:username,pojo,resultMap,查询,深入,user,sql,Mybatis
来源: https://blog.csdn.net/qq_41055045/article/details/89305607

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有