zoukankan      html  css  js  c++  java
  • MyBatis笔记02

    1.resultType

    当返回值类型为基本数据类型时(增删改 返回int),指定不指定都可以。

    当返回值类型为引用数据类型时(查询 返回集合或对象),要指定返回类型。

    2.sql映射的xml文件

    01.MyBatis真正的力量实在映射语句中,专注于SQL,功能强大,SQL映射的配置确实相当简单。

    02.SQL映射文件的几个顶级元素(按照定义的顺序)

    001.cache---配置给定命名空间的缓存

    002.cache-ref----从其他命名空间引用缓存配置

    003.resultMap----用来描述数据库结果集和对象的对应关系

    004.sql----可以重用的SQL块,也可以被其他语句引用

    005.insert----映射插入语句

    006.update----映射更新语句

    007.delete----映射删除语句

    008.select----映射查询语句

    3.MyBatis基本知识

    01.select

    a.select是MyBatis中最常用的元素之一。

    b.select语句有很多属性可以详细配置每一条语句。

    c.代码:

     别名的使用:

     

    <typeAliases>
    <!--只要是在mapper.xml文件中使用了cn.pb.bean包下面的任意类的时候,无需再用全类名
    使用简写的类名
    之前应该 cn.pb.bean.Student
    现在 Student
    -->
    <package name="cn.pb.bean"/>
    <!--
    规定指定类的别名 但是如果有多个类 使用不方便
    <typeAlias type="cn.pb.bean.Student" alias="s"></typeAlias>
    -->
    </typeAliases>


    <mapper namespace="cn.pb.dao.StudentDao">
    <!--根据指定的id查询对象 传递一个id不是一个对象 所以我们在sql语句中就可以用占位符-->
    <select id="selectStudentById" parameterType="int" resultType="Student">
    select id,name,age from student where id=#{xxx}
    </select>

    </mapper>
    d.#{}中可以存放什么内容
           01.参数对象的属性
           02.任意内容,此时的#{}只是一个占位符
           03.map的key
           04.如果key所对应的value是对象,则存放的是对象的属性
           05.参数的索引号!从0开始

    02.resultMap

    001.resultMap:描述如何将结果集映射到java对象

    002.resultMap属性:id   type

    003.resultMap子元素:id  result association   collection 

      a.association:实体类中有其他类型的属性,例如user中有Role属性

        实体类属性:

        private Integer id;//主键

        private Integer age;//年龄

        private String name;//名字

        private Role role;//用户类型

        
        mapper中的代码:

        <resultMap type="User" id="userMap">
            <result property="id" column="id"/>
            
    <result property="userCode" column="userCode"/>

            <result property="userName" column="userName"/>
             
            <association property="role" javaType="Role">
              <result property="id" column="id"/>
              
    <result property="roleCode" column="roleCode"/>

              <result property="roleName" column="roleName"/>
     

            </assoiation>
     
        </resultMap>


        <select id="getUserListByRoleId" parameterType="Role" resultMap="userMap">
          sql语句
        </select>

      b.collection:实体类中有集合属性,例如user中有list<Address>属性

        private List<Address> list;

    004.代码:

    <!--查询所有的student  返回值是map
    如果我们写的是resultType="map"
    那么mybatis在底层会把我们的每个字段当成key
    字段对象的值 是value! 这样不可行!
    我们是想把某一个字段当成key!
    整行数据(对象)当成value!
    这时候就需要把resultType换成resultMap(结果映射)="映射的resultMap名称"
    mybatis底层会进行拦截ResultSet!
    然后根据我们在resultMap中的配置,
    把对应的key和value封装到map集合中!
    -->
    <select id="selectAllByMap" resultMap="studentMap">
    select id,age,NAME from student
    </select>
    <!--
    必须使用resultMap的三种情况
    01.数据库字段名和我们实体类属性名不一致 必须使用
    02.返回结果是map集合时 必须使用
    03.关联映射 以及延迟加载 必须使用
    -->
    <resultMap id="studentMap" type="Student">
    <id property="id" column="id"/><!--只针对于主键的设置-->
    <result property="age" column="age"/> <!--设置除了主键,集合,对象之外的属性-->
    <result property="name" column="name"/>
    </resultMap>

    property:对应type中的Student类中的属性名称
    column:对应数据库中查询出来的字段名


    03.resultType和resultMap区别:
      MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,将数据库中列数据复制到对象的相应属性上,可以用于复制查询,两者不能同时用。
      resultType:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,而resultType中的内容就是pojo在本项目中的位置。因此对于单表查询的话用resultType是最合适的。但是,如果在写pojo时,不想用数据库表中定义的字段名称,也是可以使用resultMap进行处理对应的。多表连接查询时,若是一对一的连接查询,那么需要新建一个pojo,pojo中包括两个表中需要查询出的所有的字段,这个地方的处理方式通常为创建一个继承一个表字段的pojo,再在里面添加另外一个表内需要查询出的字段即可。若是一对多查询时,若是使用内连接查询,则很可能出现查询出的字段有重复。使用双重for循环嵌套处理即可。

      resultMap:当使用resultMap做SQL语句返回结果类型处理时,通常需要在mapper.xml中定义resultMap进行pojo和相应表字段的对应。

      
      001.数据库字段名和我们实体类属性名不一致的时候,必须使用resultMap,不能使用resultType
      002.返回结果是map集合时,必须使用
    resultMap,不能使用resultType
      003.关联映射,以及延迟加载,必须使用resultMap,不能使用resultType,例如数据表中字段特别多的时候,但是我们需要用到的只有个别几个的时候。


     





  • 相关阅读:
    php中session的运行机制
    Mysql5.5修改字符集
    java中用StringBuffer写文件换行
    DatabaseMetaData 获取mysql表和字段注释
    DatabaseMetaData 获取oracle字段注释
    常用的easyui使用方法
    定位div滚动条
    easyui edatagrid 触发编辑行回掉onEdit
    java 读取类内容给指定的方法追加内容
    JS中文转换(UTF-8),中文乱码解决办法,url传递中文乱码解决
  • 原文地址:https://www.cnblogs.com/lyb0103/p/7530155.html
Copyright © 2011-2022 走看看