Mybatis查询
select查询
resultType:返回的是一个集合,则是集合元素的类型
Map<String ,Object> ====>resultType="map"
Map<Integer,Employee>====>resultType="mybatis.bean.Employee"限定名)
引用mapper:<mapper namespace="跟mapper的接口进行绑定"></mapper>
自定义某个JavaBean的规则 type自定义规则的Java类型 id:唯一id方便引用
<resultMap type="mybatis.bean.Employee" id="MyEmp">
<id column="id" property="id"/>
<result column="last_name" property="LastName"/>
</resultMap>
id定义主键会有底层有优化、column指定那一列 property指定对应的javaBean属性
alter table tbl_employee add constraint fk_emp_dept
foreign key(d_id) references tbl_dept(id) (添加外键约束)
select * from tbl_employee e,tbl_dept d where e.d_id=d.id and e.id=1
联合查询:级联属性封装
association:可以指定联合的javabean对象
proeprty=”dept“:指定哪个属性是联合的对象
javaType=指定属性的类型
association 分步查询:1、先按照员工id查询员工信息
2、根据查询员工信息中的d_id值去部门表查询出部门信息
3、部门设置到员工中去
流程:使用select指定的方法传入column指定的这列参数的值、查出对象,并封装给property指定的属性
显示指定每个我们需要更改的配置的值,即使是默认的
<setting name="lazyloadingEnabled" value="true"/>
<setting name="aggressivelazyLoading" value="false"/>
延迟加载(按需加载)
employee====》dept每次查询employee对象的时候,一起查询出来,部门信息在我们使用的时候再去查询
例: select d.id d.id, d.dept_name dept_name,e.id eid, e.last_name last_name,e.email email,e.gender gender
from tbl_dept d
left join tbl_employee e
on d.id=e.d_id
where d.id=1
分段查询
<!---collectionf:分段查询-->
<resultMap type="mybatis.bean.Department" id="myDeptStep">
<id column="id" property="id" />
<id column="dept_name" property="departmentName" />
<collection property="emps"
select=”mybatis.dao.EmployeeMapperPlus.getEmpstep“ column="id" fetchType="lazy" </collection>
</resultMap>
<select id="getDeptByIdStep" resultMap="myDeptStep">
select id,dept_name from tbl_dept where id=#{id}
</select>
discriminator 鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为。
动态SQL
查询的时候如果某些条件没带可能sql拼装会有问题
1、给where后面加上1=1,以后的条件都and xxx
2、mybatis使用where标签来将所有的查询条件包括在内,mybatis就会将where标签中拼装的sql,多出来的and或者or去掉
IF用法:
<select id="getEmpByConditionIf" resultType="mybatis.bean.Employee">
select * from tbl_employee
where
<if test="id!=null">
id=#{id}
</if>
<if test="lastName!=null && lastName!="" ">
and last_Name like #{lastName}
</if>
<if test="email!=null and email.trim()!="" ">
and email=#{email}
</if>
<if test="gender==0 or gender==1">
and gender=#{gender}
</if>
</select>
Where用法
<select id="getEmpsByConditionIf" resultType="mybatis.bean.Employee">
select * from tbl_employee
where 1=1
<if test="id!=null">
and id=#{id}
</if>
<if test="lastName!=null && lastName!=""">
and last_name like #{lastName}
</if>
<if test="email!=null and email.trim()!=""">
and email=#{email}
</if>
<if test="gender==0 or gender==1">
and gender=#{gender}
</if>
</select>
trim 用法 字符截取
prefix="" 前缀:trim标签中是整个字符串拼串后的结果 prefix给拼串后的整个字符串加一个前缀
prefixOverriders:去掉整个字符串前面多余的字符
suffix=”“ 后缀:拼串后的整个字符串加一个后缀
suffixOverrides:去掉整个字符后面多余的字符
<select id="getEmpsByconditiontrim" resultType="mybatis.bean.Employee">
select * from tbl_employee
<trim prefix="where" suffoxOverrides="and">
<if test =”id!=null“>
id=#{id}
</if>
<if test="lastName!=null && lastName!=""">
lastname like #{lastName} and
</if>
<if test="email!=null and email.trim()!=""">
email=#{email} and
</if>
<if test="gender==0 or gender==1">
gender=#{gender}
</if>
</trim>
<select>
choose(when,otherwise):分支选择switch-case
<select id="getEmpsByConditionChoose" resultType="mybatis.bean.Employee">
select * from tbl_employee
<where>
<choose>
<when test="id!=null">
id=#{id}
</when>
<when test="lastName!=null">
last_name like #{lastname}
</when>
<when test="email!=null">
email=#{email}
</when>
<otherwise>
gender==0
</otherwise>
</choose>
</where>
</select>
where(封装) set
<update id="updateEmp">
update tbl_employee
set
<if test="lastname!=null">
last_name=#{lastname},
</if>
<if test="email!=null">
email=#{email},
</if>
<if test="gender!=null">
gender=#{gender}
</if>
where id=#{id}
</update>
collection:指定要遍历的集合(list类型的参数会特殊处理封装在map中,map的key:list)
item:将当前遍历出的元素赋值给指定的变量
separator:每个元素之间分隔符
open:遍历出所有结果拼接一个开始的字符
close:遍历出所有结果拼接一个开始的字符
index:索引(遍历list:index(索引) item当前值 index====>map的key,item==>map的值)
<select id="getEmpsByConditionForeach" resultType="mybatis.bean.Employee">
select * from tbl_employee where id in
<foreach collection="ids" item="item_id" separator="," open="where id in ("close") ">
#{item_id}
</foreach>
</select>
批量保存
<select id="getEmpsByConditionForeach" resultType="mybatis.bean.Employee">
<insert id="addEmps">
insert into tbl_employee(last_name,email,gender,d_id)
values
<foreach collection="emps" item="emp" sepatator="">
(#{emp.lastName},#{emp.eamil},#{emp.gender},#{emp.dept.id})
</foreach>
</select>