Mybatis 映射文件配置

<?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.jv.dao.EmployeeMapper">

  <!-- 
  	若是參數只有一個,在映射文件中使用${**},好比${id},若是有多個參數能夠採用多參數或者POJO方式來傳遞,詳細內容見
  	https://my.oschina.net/u/3049601/blog/edit
  -->
  <select id="getEmployeeById" resultType="employee" databaseId="mysql">
    select employee_id,first_name,last_name,gendor,birthday from employee where employee_id=#{id}
  </select>
  
  <select id="getEmployeeById" resultType="employee" databaseId="oracle">
    select employee_id,first_name,last_name,gendor,birthday from employee where employee_id=#{id}
  </select>
  
  <!-- 注意:必定要在全局配置文件中切換environments的默認environment爲dev_mysql -->
  <!-- 
  	由於Mysql支持主鍵自增,因此使用useGeneratedKeys+keyProperty兩個屬性能夠在程序得到自增值,其內部原理就是經過Statement.getGeneratedKeys獲得
  		useGeneratedKeys:默認值即爲true
  		keyProperty:指定javabean的主鍵對應的屬性名稱
  -->
  <insert id="addEmployee" useGeneratedKeys="true" keyProperty="employeeId" databaseId="mysql">
  	<!-- 由於主鍵是自增的,因此不須要寫ID的插入語句 -->
  	insert into employee (first_name,last_name,gendor,birthday)
  	values(#{firstName},#{lastName},#{gendor},#{birthday})
  </insert>
  
  <!--  
  	由於Oracle不支持自增屬性,解決方式是使用序列,所以須要得到插入記錄的主鍵須要經過另外的方式
  	<selectKey>:指定得到主鍵的SQL
  		keyProperty:指定javabean的主鍵對應的屬性名稱
  		order:有BEFORE和AFTER兩種取值,建議都是BEFORE,由於使用AFTER可能會出現問題,這裏也就不針對AFTER作代碼演示了
  		resultType:javabean屬性類型
  -->
  <insert id="addEmployee" databaseId="oracle">
  	<selectKey databaseId="oracle" keyProperty="employeeId" order="BEFORE" resultType="Integer">
  		<!-- 若是<selectKey>的order屬性是BEFORE,那麼取序列就必須是xxx_seq.nextval,若是是AFTER,則是xxx_seq.currval -->
  		select EMPLOYEE_ID_SEQ.nextval from dual
  	</selectKey>
  	<!-- 由於主鍵不是自增的,須要在得到主鍵值並設置給JAVABEAN對象後從對象中獲取並插入,所以須要些主鍵插入SQL -->
  	insert into employee (employee_id,first_name,last_name,gendor,birthday)
  	values(#{employeeId},#{firstName},#{lastName},#{gendor},#{birthday})
  </insert>
  
  <!-- 由於更新操做和數據庫沒什麼差異,因此再也不指定datebaseId屬性 -->
  <update id="updateEmployee">
  	update employee set first_name=#{firstName} where employee_id=#{employeeId}
  </update>
  
  <!-- 由於更新操做和數據庫沒什麼差異,因此再也不指定datebaseId屬性 -->
  <delete id="deleteEmployee" ></delete>
  
</mapper>

Mybatis參數傳遞和取值詳情:java

單個參數:Mybatis不會作特殊處理, #{參數名/任意名}:取出參數值。
    
多個參數:mybatis會作特殊處理。
    1.多個參數會被封裝成 一個map,
        封裝:mysql

            key:paramName1...paramNameN,或者參數的索引也能夠
            value:傳入的參數值
         取值:sql

            #{paramName}就是從map中獲取指定的key的值;
    
    操做:
        方法:public Employee getEmpByIdAndLastName(Integer id,String lastName);
        取值:#{id},#{lastName}數據庫

    2.形參了表有多個參數apache

        public Employee getEmpByIdAndLastName(Integer id,String lastName);數組

        錯誤的取值方式:#{id},#{lastName}mybatis

        Mybatis會報以下錯誤:oracle

            org.apache.ibatis.binding.BindingException: 
            Parameter 'id' not found. 
            Available parameters are [1, 0, param1, param2
app

        正確的取值方式1:#{param1},#{param2}spa

        正確的取值方式1:使用命名參數方式

            明確指定封裝參數時map的key;@Param("id"),如:

            public Employee getEmpByIdAndLastName(@Param("id")Integer id,

            @Param("lastName")String lastName);
                多個參數會被封裝成 一個map,
                    key:使用@Param註解指定的值
                    value:參數值
                使用#{指定的key}取出對應的參數值,如:${lastName}


    3.POJO:
        若是多個參數正好是咱們業務邏輯的數據模型,咱們就能夠直接傳入pojo;
        #{屬性名}:取出傳入的pojo的屬性值    

    4.Map:
        若是多個參數不是業務模型中的數據,沒有對應的pojo,不常常使用,爲了方便,咱們也能夠傳入map
        #{key}:取出map中對應的值

     5.TO:
        若是多個參數不是業務模型中的數據,可是常常要使用,推薦來編寫一個TO(Transfer Object)數據傳輸對象
        Page{
            int index;
            int size;
        }

========================思考========================    
public Employee getEmp(@Param("id")Integer id,String lastName);
    取值:id==>#{id/param1}   lastName==>#{param2}

public Employee getEmp(Integer id,@Param("e")Employee emp);
    取值:id==>#{param1}    lastName===>#{param2.lastName/e.lastName}

特別注意:若是是Collection(List、Set)類型或者是數組,也會特殊處理。也是把傳入的list或者數組封裝在map中。

    Collection:${collection[index]}

    List:${list[index]}

    數組:${array[index]}

相關文章
相關標籤/搜索