结果集映射
结果集映射在对复杂查询的时候很好用,可以将从数据库查询出来的字段映射到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>