MyBatis是一个优秀的持久层框架,服务于数据的持久化,与JDBC不同的是,MyBatis根据SQL语句执行的结果去向Java对象组装数据并返回之。
MyBatis提供了两种方式的DAO层设计,第一种是SQLSession访问,提供了基本的增删改查函数:insert()、delete()、update()与select(),另一种是使用Mapper访问,使用DAO层接口搭配SQL去进行访问。
JDBC进行实体查询的方法:建立连接->定义List来存数据->定义SQL语句->处理ResultSet转为List
MyBatis进行实体查询的方法:创建DAO层接口->定义方法->返回值描述->查询到对象
MyBatis会根据命名空间、id值与对应的类和方法进行绑定。
MyBatis有以下四类参数:单个基本类型参数、多个基本类型参数、单个JavaBean类型参数与多个混合类型参数。其中,单个基本类型参数中,映射文件可任意命名参数、多个基本类型参数中,映射文件使用#{0}、#{1}、#{2}的形式进行命名,也可以使用#{param1}、#{param2}的形式进行命名
MyBatis的关联关系主要有多对一、一对多、多对多的关系,例如,公司员工——>部门的关系是多对一关系,代表多个员工在一个部门工作。
MyBatis有如下的动态语句,if代表简单的条件判断、choose相当于Java中的switch与case语句、trim代表增加前缀(prefix)与后缀(suffix)、where简化SQL语句中where条件的判断。
MyBatis的XML代码示例如下
<mapper namespace="com.david.hrsys.dao.EmployeeDao">
<!-- 查询整体信息-->
<select id="search" resultMap="EmpAndDep">
select e.*, d.name as depName from
employee as e left join department as d
on e.dep_id = d.id order by e.id
</select>
<!-- 按照ID查询信息并输出结果-->
<select id = "searchById" resultMap = "EmpAndDep">
select e.*, d.name as depName, d.number as depNumber from
employee as e left join department as d on e.dep_id = d.id where
e.id = #{id}
</select>
<resultMap type="com.david.hrsys.entity.Employee" id="EmpAndDep">
<id property="id" column="id"/>
<result property="number" column="number"/>
<result property="name" column="name"/>
<result property="gender" column="gender"/>
<result property="age" column="age"/>
<association property="dep" javaType="com.david.hrsys.entity.Department">
<id property="id" column="dep_id"/>
<result property="number" column="depNumber"/>
<result property="name" column="depName"/>
</association>
</resultMap>
<!-- 增加数据-->
<insert id="add">
insert into employee (number,name,gender,age,dep_id)
values (#{number},#{name},#{gender},#{age},#{dep.id})
</insert>
<!-- 更新数据-->
<update id="update">
update employee set number = #{number}, name = #{name}, gender = #{gender}, age = #{age}, dep_id = #{dep.id}
where id = #{id}
</update>
<!-- 删除数据-->
<delete id="delete">
delete from employee where id = #{id}
</delete>
<!-- 根据部门信息更新数据-->
<update id="updateByDep">
update employee set dep_id=null where dep_id = #{depId}
</update>
</mapper>