DAO
里面是自定义的对象或hashMap 主要是 k-value
resultType 与 parameterType 的基本使用的区别 :
1、使用 resultType : 主要针对于从数据库中提取相应的数据出来2、使用parameterType : 主要针对于 将信息存入到数据库中 如: insert 增加数据到数据库zhong Update等
resultType是sql语句查询结果集的封装类型,也就是说把sql查询的结果封装在bean里返回回去,是存数据用的。 paramType是从传过来的Bean中取数据放进例如insert语句的values中当实参用,是取数据用的。什么时候必须加上 jdbcType
只有当将一个空值作用于插入、更新、删除操作时,jdbcType 才是必须的。这是 JDBC 的一个需求,并不是 MyBatis 的。所以即使你是直接编写 JDBC,当它是空的时候,你也一定要指定它的类型,其他情况不需要指定它的类型。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shujuku.mybatis.dao.MemberDAO">
<resultMap id="memberMap" type="Member">
<id column="member_id" property="memberId"/>
<result column="member_nick" property="memberNick"/>
<result column="member_gender" property="memberGender"/>
<result column="member_age" property="memberAge"/>
<result column="member_city" property="memberCity"/>
</resultMap>
<select id="searchMember" resultMap="memberMap">
select member_id,member_nick,member_gender,member_age,member_city
from members
where 1=1
<if test="gender != null" ><!-- gender 就是参数对象的属性/参数Map的key-->
and member_gender=#{gender}
</if>
<if test="minAge != null">
and member_age >=#{minAge}<!-->表示大于号(>) <表示小于号(<) -->
</if>
<if test="maxAge != null">
and member_age <= #{maxAge}
</if>
<if test="city != null">
and member_city=#{city}
</if>
</select>
<select id="searchMember" resultMap="memberMap">
select member_id,member_nick,member_gender,member_age,member_city
from members
<where>
<if test="gender != null" ><!-- gender 就是参数对象的属性/参数Map的key-->
and member_gender=#{gender}
</if>
<if test="minAge != null">
and member_age >=#{minAge}<!-->表示大于号(>) <表示小于号(<) -->
</if>
<if test="maxAge != null">
and member_age <= #{maxAge}
</if>
<if test="city != null">
and member_city=#{city}
</if>
</where>
</select>
<select id="searchMember" resultMap="memberMap">
select member_id,member_nick,member_gender,member_age,member_city
from members
-- 可以加前缀和后缀
<trim prefix="where" prefixOverrides="and | or">
<if test="gender != null" ><!-- gender 就是参数对象的属性/参数Map的key-->
and member_gender=#{gender}
</if>
<if test="minAge != null">
and member_age >=#{minAge}<!-->表示大于号(>) <表示小于号(<) -->
</if>
<if test="maxAge != null">
and member_age <= #{maxAge}
</if>
<if test="city != null">
and member_city=#{city}
</if>
</trim>
</select>
//-------------------------------------------
<select id="searchMemberBycity" resultMap="memberMap">
select member_id,member_nick,member_gender,member_age,member_city
-- from members where member_city in ('武汉','宜昌')
from members where member_city in
<foreach collection="list" item="cityName" separator="," open="(" close=")">
#{cityName}
</foreach>
</select>
</mapper>
if 如果 要加and 有
<if test="判断条件"> SQL语句</if>
直接用 where 1=1 再加 <if>
<select id="searchMember" resultMap="memberMap">
select member_id,member_nick,member_gender,member_age,member_city
from members
where 1=1
<if test="gender != null" ><!-- gender 就是参数对象的属性/参数Map的key-->
and member_gender=#{gender}
</if>
<if test="minAge != null">
and member_age >=#{minAge}<!-->表示大于号(>) <表示小于号(<) -->
</if>
<if test="maxAge != null">
and member_age <= #{maxAge}
</if>
<if test="city != null">
and member_city=#{city}
</if>
</select>
where
where+if标签
where 判断会主动把第一个条件的and去掉
`<where>` 只会去掉`<if>` 语句中的最开始的and关键字。
如果标签返回的内容是以AND 或OR 开头的,则它会剔除掉。
<select id="searchMember" resultMap="memberMap">
select member_id,member_nick,member_gender,member_age,member_city
from members
<where>
<if test="gender != null" ><!-- gender 就是参数对象的属性/参数Map的key-->
and member_gender=#{gender}
</if>
<if test="minAge != null">
and member_age >=#{minAge}<!-->表示大于号(>) <表示小于号(<) -->
</if>
<if test="maxAge != null">
and member_age <= #{maxAge}
</if>
<if test="city != null">
and member_city=#{city}
</if>
</where>
</select>
set标签
set可以用来修改
<update id="upd">
update student
<set>
<if test="sname != null">sname=#{sname},</if>
<if test="spwd != null">spwd=#{spwd},</if>
<if test="sex != null">sex=#{sex},</if>
<if test="phone != null">phone=#{phone}</if>
sid=#{sid}
</set>
where sid=#{sid}
</update>
choose(when,otherwise) 语句
有时候,我们不想用到所有的查询条件,只想选择其中的一个,查询条件有一个满足即可,使用 choose 标签可以解决此类问题,类似于 Java 的 switch 语句
choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。
<select id="selectUserByChoose" resultType="com.ys.po.User" parameterType="com.ys.po.User">
select * from user
<where>
<choose>
<when test="id !='' and id != null">
and id=#{id}
</when>
<when test="username !='' and username != null">
and username=#{username}
</when>
<otherwise>
and sex=#{sex}
</otherwise>
</choose>
</where>
</select>
trim 标签
profixOverrides=“and | or” 如果第一个是and或or会被干掉
prefix=“where”(加前缀)不会把and去掉
suffix=“order by member_age” 可以加后缀
<select id="searchMember" resultMap="memberMap">
select member_id,member_nick,member_gender,member_age,member_city
from members
-- 可以加前缀和后缀
<trim prefix="where" prefixOverrides="and | or">
<if test="gender != null" ><!-- gender 就是参数对象的属性/参数Map的key-->
and member_gender=#{gender}
</if>
<if test="minAge != null">
and member_age >=#{minAge}<!-->表示大于号(>) <表示小于号(<) -->
</if>
<if test="maxAge != null">
and member_age <= #{maxAge}
</if>
<if test="city != null">
and member_city=#{city}
</if>
</trim>
</select>
foreach
list :集合的类型
collection:list集合参数,集合名
item:给每个对象进行取名
separator:分隔符
open:以什么开头
close:以什么结尾
sql模板
<sql id="名字">
</sql>
//=======
<include refid="名字"/>
引用其他XML中的SQL片段
比如你在com.xxx.dao.xxMapper这个Mapper的XML中定义了一个SQL片段如下:
<sql id="Base_Column_List"> ID,MAJOR,BIRTHDAY,AGE,NAME,HOBBY</sql>
此时我在com.xxx.dao.PatinetMapper中的XML文件中需要引用,如下:
<include refid="com.xxx.dao.xxMapper.Base_Column_List"></include>