结果集映射

结果集映射在对复杂查询的时候很好用,可以将从数据库查询出来的字段映射到pojo类中

简单查询就不必做结果集映射啦,直接用字段名和pojo类的成员变量名映射就好。

先贴一段代码

    <resultMap id="commentMap" type="com.dawn.pojo.Comment">
        <id property="id" column="id" javaType="java.lang.Integer" jdbcType="INTEGER"></id>
        <result property="name" column="name" javaType="java.lang.String" jdbcType="VARCHAR"></result>
        <result property="email" column="email" javaType="java.lang.String" jdbcType="VARCHAR"></result>
        <result property="addr" column="addr" javaType="java.lang.String" jdbcType="VARCHAR"></result>
        <result property="time" column="time"  javaType="java.sql.Date" jdbcType="DATE"></result>
        <result property="content" column="content" javaType="java.lang.String" jdbcType="VARCHAR"></result>
        <result property="article_id" column="article_id" javaType="int" jdbcType="INTEGER"></result>
        <result property="article_name" column="title" javaType="java.lang.String" jdbcType="VARCHAR"></result>
    </resultMap>

    <select id="queryAll" resultMap="commentMap">
        select comment.id,name,email,addr,comment.time,content,article_id,title from blog.comment,blog.article where comment.article_id = article.id
    </select>

是主键映射,是字段名和pojo的类成员变量的映射

其中有两个属性

javaType    jdbcType

这两个东西不能乱写,乱写要报错,而且是严格区分大小写的,成员变量的类型也不能乱设置,贴一下他们的对应表


DBC Type      Java Type

  • CHAR      String
  • VARCHAR       String
  • LONGVARCHAR       String
  • NUMERIC       java.math.BigDecimal
  • DECIMAL       java.math.BigDecimal
  • BIT       boolean
  • BOOLEAN       boolean
  • TINYINT       byte
  • SMALLINT       short
  • INTEGER       int
  • BIGINT       long
  • REAL       float
  • FLOAT       double
  • DOUBLE       double
  • BINARY       byte[]
  • VARBINARY       byte[]
  • LONGVARBINARY       byte[]
  • DATE       java.sql.Date
  • TIME       java.sql.Time
  • TIMESTAMP       java.sql.Timestamp
  • CLOB       Clob
  • BLOB       Blob
  • ARRAY       Array
  • DISTINCT       mapping of underlying type
  • STRUCT       Struct
  • REF       Ref



附上其他代码笔记,避免以后遗忘

  <!-- 这里是没有做映射直接返回类型就是pojo类-->
    <select id="queryId" resultType="Comment" parameterType="int">
        select * from blog.comment where id=#{id}
    </select>

<!-- parameterType 表示的是参数类型,keyProperty和useGeneratedKeys的作用是在插入成功后自动将生成的主键id返回到传入的参数中(这里是comment),这样在控制层就可以用getId()方法获取到刚刚插入的pojo类的id值(因为id是自动生成的所以传入参数的pojo类的id是没有值的 -->
    <insert id="insertComment" parameterType="com.dawn.pojo.Comment" keyProperty="id" useGeneratedKeys="true">
        insert into blog.comment (name, email, addr, time, content,article_id) VALUES (#{name},#{email},#{addr},#{time},#{content},#{article_id})
    </insert>

基础配置(在springboot下)

mybatis:
  type-aliases-package: com.dawn.pojo
  mapper-locations:
    - classpath:mybatis/*.xml

type-aliases-package的作用是指定pojo类的位置,在mapper.xml中的类型中就可以直接写类名就可以了。

mapper-locations的作用是指定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.xml对应的接口!-->
<mapper namespace="com.dawn.mapper.commentMapper">


    <resultMap id="commentMap" type="com.dawn.pojo.Comment">
        <id property="id" column="id" javaType="java.lang.Integer" jdbcType="INTEGER"></id>
        <result property="name" column="name" javaType="java.lang.String" jdbcType="VARCHAR"></result>
        <result property="email" column="email" javaType="java.lang.String" jdbcType="VARCHAR"></result>
        <result property="addr" column="addr" javaType="java.lang.String" jdbcType="VARCHAR"></result>
        <result property="time" column="time"  javaType="java.sql.Date" jdbcType="DATE"></result>
        <result property="content" column="content" javaType="java.lang.String" jdbcType="VARCHAR"></result>
        <result property="article_id" column="article_id" javaType="int" jdbcType="INTEGER"></result>
        <result property="article_name" column="title" javaType="java.lang.String" jdbcType="VARCHAR"></result>
    </resultMap>

    <select id="queryAll" resultMap="commentMap">
        select comment.id,name,email,addr,comment.time,content,article_id,title from blog.comment,blog.article where comment.article_id = article.id
    </select>

    <select id="queryId" resultType="Comment" parameterType="int">
        select * from blog.comment where id=#{id}
    </select>

    <insert id="insertComment" parameterType="com.dawn.pojo.Comment" keyProperty="id" useGeneratedKeys="true">
        insert into blog.comment (name, email, addr, time, content,article_id) VALUES (#{name},#{email},#{addr},#{time},#{content},#{article_id})
    </insert>
</mapper>