zoukankan      html  css  js  c++  java
  • MYBATIS SQL映射文件

    前面学习的都是一些配置,mybatis的精华也就集中在SQL的映射文件上,相比实现相同功能的jdbc代码,节约了95%的代码量。

    <!-- 配置给定命名空间的缓存 -->
    <cache></cache>

    <!-- 从其他命名空间引用缓存配置 -->
    <cache-ref namespace="" />

    <!-- 描述如何将db中查询的结果集加载成对象 -->
    <resultMap type="" id="">
    <constructor>
    <idArg />
    <arg />
    <arg />
    <arg />
    </constructor>
    </resultMap>

    <!-- 定义可重用的sql语句 -->
    <sql id=""></sql>

    <!-- 映射dml语句 -->
    <insert id=""></insert>
    <select id=""></select>
    <update id=""></update>
    <delete id=""></delete>

    一、select可以可以说是使用最多的元素,使用也很简单

    1. <select id="getUserById" parameterType="int" resultType="User"> 
    2.     select * from tbl_user where id = #{id} 
    3. </select> 


    < select>元素中的一些属性(红色为用的较多的属性)

    id 在命名空间中唯一的标识符,可以被用来引用这条语句
    parameterType 将会传入这条语句的参数类的完全限定名或别名。
    resultType 从这条语句中返回的期望类型的类的完全限定名或别名。
    意集合情形,那应该是集合可以包含的类型,
    而不能是集合本身。使用 resultType或 resultMap,
    但不能同时使用
    。(可以是基本类型int等,
    复合类型User,集合类型map,list等)
    resultMap 命名引用外部的resultMap。返回map是MyBat is
    最具力量的特性,对其有一个很好的理解的话,
    多复杂映射的情形就能被解决了。
    使用 resultMap 或resultType,但不能同时使用
    flushCache 将其设置为 true,不论语句什么时候被带哦用,
    都会导致缓存被清空。默认值:false
    useCache 将其设置为 true,将会导致本条语句的结果被缓存。
    默认值:true
    timeout  这个设置驱动程序等待数据库返回请求结果,并抛出
    异常时间的最大等待值。默认不设置(驱动自行处理)
    fetchSize 这是暗示驱动程序每次批量返回的结果行数。
    默认不设置(驱动自行处理)
    statementType STATEMENT,PREPARED 或 CALLABLE 的一种。
    这会让 MyBat is使用选择使用 
    Statement,PreparedStatement或 CallableStatement。
    默认值:PREPARED。
    resultSetType FORWARD_ONLY,
    SCROLL_SENSITIVE,
    SCROLL_INSENSITIVE中的一种。
    默认是不设置(驱动自行处理)
       
       

    二、insert插入数据库,进行插入操作时主要是要拿到插入数据自增的主键

    id 在命名空间中唯一的标识符,可以被用来引用这条语句。
    parameterType 
    将会传入这条语句的参数类的完全限定名或别名
    flushCache 将其设置为 true,不论语句什么时候被带哦用,都会导致缓存被清空。默认值:false。
    timeout 这个设置驱动程序等待数据库返回请求结果,并抛出异常时间的最大等待值。
    默认不设置(驱动自行处理)。
    statementType STATEMENT,PREPARED 或 CALLABLE 的一种。这会让 MyBat is使用选择使用 
    Statement,PreparedStatement 或 CallableStatement。默认值:PREPARED。
    useGeneratedKeys 仅对 insert 有 用 ) 这 会 告 诉 MyBat is 使用 JDBC 的getGeneratedKeys 方法来取出由数据(比如:像 MySQL 和 SQL Server 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值:false。
    keyProperty 仅对insert有用) 标记一个属性, MyBat is会通过getGeneratedKeys或者通过 insert 语句的selectKey 子元素设置它的值。默认:不设置。
       

    在进行insert,update,delete之后session要进行commit操作,不然数据库不会更新到数据库

    insert的Demo

    另一种获取主键的方法

    1. <insert id="addUserLastId" parameterType="User"> 
    2.     <selectKey resultType="int" order="AFTER" keyProperty="id"> 
    3.         SELECT LAST_INSERT_ID() AS id 
    4.     </selectKey> 
    5.     insert into tbl_user(name,age) values(#{name},#{age}) 
    6. </insert> 



     

    1. <insert id="addUser" parameterType="User" keyProperty="id" useGeneratedKeys="true" > 
    2.     insert into tbl_user(name,age) values(#{name},#{age}) 
    3. </insert> 
    1. @Test 
    2. public void testInsert() throws IOException { 
    3.     UserMapper mapper = session.getMapper(UserMapper.class) ;  
    4.     User user = new User() ; 
    5.     user.setName("zhangss") ; 
    6.     user.setAge(22) ; 
    7.     int i = mapper.addUser(user) ; 
    8.     session.commit() ; 
    9.     session.close() ; 
    10.     System.out.println("id:"+i+"--"+user.getId()); 



    update的Demo

    1. <update id="updateUser" parameterType="User"> 
    2.     update tbl_user set name = #{name} ,age = #{age} where id = #{id} 
    3. </update> 
    1. @Test 
    2. public void testUpdate(){ 
    3.     UserMapper mapper = session.getMapper(UserMapper.class) ;  
    4.     User user = new User() ; 
    5.     user.setId(27) ; 
    6.     user.setName("zhang27") ; 
    7.     user.setAge(227) ; 
    8.     int i = mapper.updateUser(user) ; 
    9.     session.commit() ; 
    10.     session.close() ; 
    11.     System.out.println("id:"+i+"--"+user.getId()); 



    三、sql定义可重用的sql语句

    1. <sql id="selectItem">id,name,age</sql> 
    1. <select id="getUserById" parameterType="int" resultType="User"> 
    2.      
    3.     <!--
    4.     select * from tbl_user where id = #{id}
    5.      --> 
    6.      select <include refid="selectItem"/> from tbl_user where id = #{id} 
    7. </select> 

    四、Parameter

    #{department, mode=OUT, jdbcType=CURSOR, javaType=ResultSet,resultMap=departmentResultMap} 


    五、resultMap所做的工作就是将从数据库中获取的ResultSet结果集放入指定的对象中,避免大量的setter getter代码,实现自动装配的功能,实现结果的映射

    1、简单映射

    1. <select id=”selectUsers” parameterType=”int” resultType=”hashmap”>  
    2.     select id, username, hashedPassword from some_table where id = #{id}  
    3. </select>  


    所有列被自动映射到 HashMap 的键上,key为列名,value为数据库中的数据

    1. <select id=”selectUsers” parameterType=”int” resultType=”com.someapp.model.User”>  
    2.     select id, username, hashedPassword from some_table where id = #{id}  
    3. </select>  


    将所有从数据库中取得数据自动装配到JavaBean中,如果列名与属性名相同,则无需作任务的干预即可完成装配。

    如果数据库中的列名与javabean的属性名称不同可以在查询的时候取别名,如

    1. <select id=”selectUsers” parameterType=”int” resultType=”User”>  
    2.     select user_id as “id”, user_name as “userName”, hashed_password as “hashedPassword”  from some_table where id = #{id}  
    3. </select>  


    也可以使用resultMap进行映射的指定

      1. <resultMap id="userResultMap" type="User">  
      2.     <id property="id" column="user_id" />  
      3.     <result property="username" column="username"/>  
      4.     <result property="password" column="password"/>  
      5. </resultMap>  
      6.  
      7. <select id=”selectUsers” parameterType=”int”  resultMap=”userResultMap”>  
      8.     select user_id, user_name, hashed_password from some_table where id = #{id}  
      9. </select>  
  • 相关阅读:
    房地产电话销售资料
    为什么要买二手房,不买一手房
    三句话教你买对房子!买到好房子的都祝福哥三年内赚两个亿!
    如何建立与客户之间的信赖与友谊!和客户电话聊天时会出现那些突发障碍!客户到底想要找什么样的房子?
    技术帖:砖混、砖木、钢混、板楼、塔楼、框架、框架剪力墙等概念之区别优劣
    Redhat 企业版 LINUX AS5.0 下载地址
    写代码如坐禅:你是哪一类程序员
    VMware Workstation 8正式版下载+密钥序列号
    在线修改图片尺寸缩放网站(完美解决图片过大无法上传问题)
    程序员编程需要多少个小时?
  • 原文地址:https://www.cnblogs.com/564085446java/p/3674006.html
Copyright © 2011-2022 走看看