MyBatis基础

44 阅读2分钟

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>