--------mybatis--------
<!--动态SQL语句,多条件查询-->
<select id="findSomeByMore" resultType="userInfoModel" parameterType="hashmap"> select * from userinfo -- (where标签自动去掉满足条件的第一个and) <where>
<if test="userName!=null">
and username=#{userName} </if>
<if test="gender != null">
and gender=#{gender} </if>
<if test="orderId != null">
and id in (select userid from orders where id=#{orderId}) </if> </where> </select>
-------防止<>被解析器解析
在 XML 元素中,"<" 和 "&" 是非法的。
"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。
"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:
<if test="startTime != null ">
AND <![CDATA[ order_date >= #{startTime,jdbcType=DATE} ]]>
</if>
<if test="endTime != null ">
AND <![CDATA[ order_date <= #{endTime,jdbcType=DATE} ]]>
</if>
不等于<>,在mybatis中需要转义 用<![CDATA[<]]> 分别对大于和小于转义
----------------模糊查询-------------
mybatis中对于使用like来进行模糊查询的几种方式:
1.使用${...}
由于$是参数直接注入的,导致这种写法,大括号里面不能注明jdbcType,不然会报错
2.使用#{...}
因为#{...}解析成sql语句时候,会在变量外侧自动加单引号' ',所以这里 % 需要使用双引号" ",不能使用单引号 ' ',不然会查不到任何结果。
3.使用CONCAT()函数连接参数形式
---------------多表关联查询-----------
注意所连接的表的查询条件不能放到where中,如果放到where语句中则不起任何的作用。红色的部分
----------一对一-----------
association通常用来映射一对一的关系
<association property="article" column="id"
select="test.mybatis.dao.articleMapper.selectArticleByUserId" />//test.mybatis.dao.articleMapper为命名空间
-------------一对多---------------
一对多,collection
<collection property="articleList" column="id"
select="test.mybatis.dao.articleMapper.selectArticleListByUserId" />
--------------------resultType------------------
<!--
指定 resultType 返回值类型时 String 类型的,
string 在这里是一个别名,代表的是 java.lang.String
对于引用数据类型,都是将大写字母转小写,比如 HashMap 对应的别名是 'hashmap'
基本数据类型考虑到重复的问题,会在其前面加上 '_',比如 byte 对应的别名是 '_byte'
--> <select id="getEmpNameById" resultType="string"> select username from t_employee where id = #{id} </select>
-----------------返回为Map类型 解决为null字段不返回--------------
注意 mybatis-config.xml中各标签的顺序
<settings>
<setting name="callSettersOnNulls" value="true"/>
</settings>
注:会陆续补充,谢谢