Mybatis的*Mapper.xml的配置


1.導包.包括Mybatis的lib包,已經Mybatis的核心包,數據庫驅動,就可以Mybatis測試,

2.配置文件

    1.sqlConfig.xml是Mybatis的核心配置文件.

     其中主要定義了對bean包下的類的掃描,起一個別名,別名即為類名,首字母大小寫都可以識別.配置了Mappers,用來掃描Mapper.xml的配置文件位置.,

    和數據庫連接的配置在和Spring整合后可不配置,由Spring來連接數據庫,管理事務.

    settings屬性為Mybatis的設置,可以采用默認值,如需改變,查找改變即可,文中不全.  

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

<!--和Spring整合可不配置,由Spring來連接數據庫 --> <!-- 讀取數據庫連接配置文件 --> <properties resource="jdbc.properties"></properties> <settings> <!--所有映射器緩存配置的開關 --> <setting name="cacheEnabled" value="true"/> <!-- 延遲加載的全局開關 --> <setting name="lazyLoadingEnabled" value="false"/> <!-- <setting name="aggressiveLazyLoading" value=""/> --> </settings> <!-- 配置bean實體類的別名 --> <typeAliases> <package name="cn.guanyq.bean"/> </typeAliases> <environments default="development"> <environment id="development"> <!-- 使用jdbc事務管理 --> <transactionManager type="JDBC" /> <!-- 數據庫連接池 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClass}" /> <property name="url" value="${jdbc.jdbcUrl}" /> <property name="username" value="${jdbc.user}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <mappers> <!--<mapper resource="cn/guanyq/sqlmap/User.xml"/> --> <!-- <mapper resource="cn/guanyq/mapper/UserMapper.xml"/> --> <package name="cn/guanyq/mapper"/> </mappers> </configuration>

 2.使用Mapper接口開發.需要注意的四個要點.

     a.Mapper接口必須和*Mapper.xml配置文件在同一包內,也就是同一個路徑下.

     b.接口內的方法名稱必須和xml的配置文件id一致,執行方法時才會找到.

     c. 接口的方法參數類型必須要和xml中的參數類型一致.parameterType.一致

     d.接口的返回值類型必須和xml中的返回值類型一致. resultMap或resultType.

  3.接口開發xml文件的配置.

    一般接口的命名規則為類名加Mapper,方便區分.xml的命名為類名加上Mapper,比如UserMapper.java 和UserMapper.xml方便區分.接口不需要繼承任何接口.

    *Mapper.xml的配置.

      其中命名空間應該指向實體類  

<?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="cn.guanyq.mapper.UserMapper">

 

      頂級元素

  •   cache緩存.cache-ref其他命名空間緩存的引用,已經不太使用
  • resultMap 最強大的元素,用來描述如何從數據庫結果集中加載對象,
  • sql 代碼塊.可被其他語句引用的代碼塊,實現重用性
  • insert
  • delete
  • update
  • select

基本增刪改查.   #{ } 和 ${} 不會轉義字符串.

<select id="getUserById" parameterType="Integer" resultType="User" statementType="PREPARED" flushCache="true" useCache="true" resultOrdered="true" timeout="1000"> select * from users where uid = #{uid} </select>

 

       這是一個簡單的查詢語句 ,其中id要求和對應的接口的方法名稱一致,parameterType是方法參數的別名,或者完整類名,可以是包裝類.數組或者集合.resultType定義和返回的類型.如果是集合應該使用集合內裝的類型.resultMap外部reslutMap的引用.這是對結果集的映射.resultMap和resultType不能同時使用.flushCache將其設置為true將會在任何時候只要語句被執行,本地的緩存將被清除.useCache,將其設置為True,將會導致select的結果被二級緩存.timeOut這個設置是在拋出異常之前,驅動程序等待數據庫返回請求結果的時間.fetchSize這個值是設置驅動程序每次批量返回的結果的行數.statementType ,STATMENT,PREPARED和CALLABED三種,分別讓Mybatis使用Statement,PreparedStatement和CallableStatement.

  insert,update,delete基本屬性相似.

如果主鍵是數據庫自動生成,insert還支持將剛生成的主鍵返回.

 

<selectKey keyProperty="id" order="AFTER" resultType="Long"> select last_insert_id() </selectKey>

 

 

 在insert語句之后插入上述代碼.即可返回剛生成主鍵.

    sql片段

<sql id="userColumns"> uid,uname </sql>
    <select id="getUserById" parameterType="Integer" resultType="User" statementType="PREPARED" flushCache="true" useCache="true" resultOrdered="true" timeout="1000"> select <include refid="userColumns"></include> from users where uid = #{uid} </select>

 

可以這樣來重復利用代碼塊

   resultMap

resultMap一般用來映射多表查詢的結果,如下代碼,其中為User和Order兩張表.

<resultMap type="User" id="getAllUserAndOrderList">
        <id property="uid" column="uid"/>
        <result property="uname" column="uname"/>
        <collection property="orders" ofType="cn.guanyq.bean.Order">
            <id property="oid" column="oid"/>
            <result column="number" property="number"/>
            <result column="price" property="price"/>
            <association property="user" column="uid" javaType="User" resultMap="getUserResult"></association>
        </collection>
    </resultMap>
     <resultMap type="User" id="getUserResult">
         <id property="uid" column="uid"/>
         <result column="uname" property="uname" />
     </resultMap>
    <select id="getAllUserAndOrderList" resultMap="getAllUserAndOrderList"> select * from users u left join orders o on u.uid=o.oid </select>
    

 

  1.shouxianresultMap中的type表示的是返回值的結果類型.id是標識,如上面綠色,來調用這個resultMap

  2.resultMap內的元素屬性.

    a.id和result 

      映射的基本內容,其中的基本屬性property是映射到結果的字段或者屬性,也可映射一些復雜的東西比如user.id.column:從數據庫中得到的列名.

    b.構造方法 constructor ,構造方法映射不太常用.

    c.關聯查詢  

<association property="user" javaType="cn.guanyq.bean.User">
              <id property="uid" column="uid"/>
              <result property="uname" column="uname"/>
         </association>

 

 

 

    

<resultMap type="User" id="getAllUserAndOrderList" >
        <id property="uid" column="uid"/>
        <result property="uname" column="uname"/>
        <collection property="orders" ofType="cn.guanyq.bean.Order" >
            <id property="oid" column="oid"/>
            <result column="number" property="number"/>
            <result column="price" property="price"/>
            <association property="user" column="uid" javaType="User" resultMap="getUserResult"></association>
        </collection>
    </resultMap>
     <resultMap type="User" id="getUserResult">
         <id property="uid" column="uid"/>
         <result column="uname" property="uname" />
     </resultMap>

 

 

 

適合多對一的映射,其中的javaType是對應的類型.其余一樣,第二種可以提高代碼的復用性.

    d.集合.多對一.上面的collection元素.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM