[Mybatis学习-02]手写Mapper.xml映射文件

写在前面:

无论JDBC还是Mybatis,都属于“持久化”这个概念的范畴,只不过Mybatis是一种更有效和更高级的解决方案,ORM(Object Relational Mapping)对象关系映射;本章中的编写规范主要是为了动态代理;

  1. 第一步:新建EmpMapper.xml(用于对员工进行操作,可以任意命名)和EmpMapper.java接口;
<?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="mapper.EmpMapper"><!--namespace为EmpMapper.java的完全限定名-->

    <!--查询某个工号员工的信息,可以用注解方式实现 -->
    <!-- <select id="getOneByEmpNo" parameterType="int" resultType="emp"> -->
    <!-- SELECT * FROM EMP WHERE EMPNO = #{empNo} -->
    <!-- </select> -->

    <!--查询某个部门下所有员工 -->
    <select id="getEmpListByDeptNo" parameterType="int"
        resultType="emp">
        SELECT * FROM EMP WHERE DEPTNO = #{deptNo}
    </select>

    <!--新增员工 -->
    <insert id="saveOneEmp">
        INSERT INTO EMP(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
        VALUES(#{empNo},#{eName},#{job},#{mgr},to_date(#{hireDate},'yyyy-MM-dd'),#{sal},#{comm},#{deptNo})
    </insert>

    <!--根据工号更新一个员工信息 -->
    <update id="updateOneByEmpNo" parameterType="emp">
        UPDATE EMP SET
        ENAME=#{eName},JOB=#{job},MGR=#{mgr},HIREDATE=to_date(#{hireDate},'yyyy-mm-dd'),SAL=#{sal},COMM=#{comm},DEPTNO=#{deptNo}
        where EMPNO=#{empNo}
    </update>

    <!--根据工号删除员工信息 -->
    <delete id="removeByEmpNo" parameterType="int">
        DELETE FROM EMP WHERE
        EMPNO = #{empNo}
    </delete>

    <!--根据姓名模糊查询 -->
    <select id="getEmpByName" parameterType="string"
        resultType="emp">
        SELECT * FROM EMP WHERE ENAME LIKE #{ename}
    </select>

    <!--查询某个职位和某个部门下的员工(已知职位名称和部门编号查员工),不可以为空时可以考虑不加jdbcType -->
    <select id="getEmpByJobAndDeptNo" resultType="emp">
        SELECT * FROM EMP
        WHERE JOB=#{job,jdbcType=VARCHAR} AND
        DEPTNO=#{deptNo,jdbcType=NUMERIC}
    </select>

    <!--分页查询(已知起始行数和结束行数查员工信息) -->
    <select id="getPageInfo" resultType="emp">
        SELECT T2.*
        FROM (SELECT e.*,rownum rn FROM EMP e) T1,EMP T2
        WHERE rn BETWEEN #{param1} AND #{param2} AND T1.EMPNO=T2.EMPNO
    </select>
</mapper>
public interface EmpMapper {
    // 方法名要与Mapper.xml中的id一样
    // 0.查询某个工号员工的信息,简单SQL可以用注解方式;
    @Select("SELECT * FROM EMP WHERE EMPNO = #{empNo}")
    Emp getOneByEmpNo(int empNo);

    // 1.查询某个部门下所有员工;
    List<Emp> getEmpListByDeptNo(int deptNo);

    // 2.添加一条员工信息;
    int saveOneEmp(Emp emp);

    // 3.根据工号更新一个员工信息;
    int updateOneByEmpNo(Emp newEmp);

    // 4.根据工号删除员工信息;
    int removeByEmpNo(int empNo);

    // 5.模糊查询
    List<Emp> getEmpByName(String name);

    // 6.查询某个职位和某个部门下的员工(已知职位名称和部门编号查员工)
    List<Emp> getEmpByJobAndDeptNo(@Param("job")String job, @Param("deptNo")int deptNo);

    // 7.分页查询(已知起始行数和结束行数查员工信息)
    List<Emp> getPageInfo(int start, int end);
}

写在后面:

  1. namespace和id都可以任意命名,但是必须要对EmpMapper.java接口编写实现类,体现不出Mybatis的优势,所以严格命名以便于动态代理的实现,namespace为EmpMapper.java的完全限定名,id为对应的方法名,parameterType可以省略,但是能加上就加上;
  2. 对于其中Mapper中的SQL实现方法采用了两种方式:1.使用XML文件进行配置,2.使用注解的方式(注解的方式可以用于简单的SQL语句,复杂的推荐使用XML进行配置),可以参考 Mybatis传多个参数
  3. 在Mybatis 3.4.6中传参可以使用注解的方式@param(“别名”)类型 属性名,在XML文件中进行获取;也可以在XML直接使用[arg0、arg1…argn]或者[param1、param2…paramn]来直接获取第一个参数、第二个参数(不能使用其他的否则会报错,而且arg是从0开始,param是从1开始,如下)
    这里写图片描述
  4. 在MySQL中进行模糊查询也有多种方式,在这里贴出我同学给出的方法,使用#{}和${}是有很大区别的,最后会贴出学习链接:
<!--第一种-->
<select id="uvw" parameterType="String" resultType="model.Emp">
       SELECT * FROM EMP WHERE ENAME LIKE '%${value}%'
</select>
<!--第二种-->
<select id="queryEmpByName" parameterType="string" resultType="EMP.Model.Emp">
        select * from emp where ename like '%'||#{search_name}||'%'  
</select>

XML文件中不支持大于号小于号等符号,需要进行转义,具体可以百度,以下贴上几种常见转义:

这里写图片描述
友情链接:
jdbcType详解
#{}和${}用法的区别,主要就是#{}相当于JDBC中PrepareStatement中的?,在插入参数过后,如果参数abc为String类型,#{}会自动把参数变为“abc”,为int时不改变;但是用美元符号{}时将会不改变如何东西,直接传入,即参数为abc,传入后还是abc.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值