5.平凡之路-查询结果集简单处理

作者: 胖先森 | 来源:发表于2017-08-26 08:56 被阅读0次

    说在前面的话 : 命名空间暂时约定-持久化类(实体Bean)的类名的全路径 com.shxt.model.Skill

    一 简单查询结果集处理

    1.查询结果集处理为Map类型

    (1) 字段作为Map中的KEY值

    • 映射文件
    <?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="命名空间,唯一的不能重复"> -->
    <mapper namespace="com.shxt.model.Skill">
      <!-- 1.结果集处理后变成Map类型 -->
      <!-- 当你传递的是 "一个" 简单的数据类型的形参的时候,那么你的KEY值可以任意取名 -->
      <select id="getMap01" parameterType="_int" resultType="map">
        SELECT
            skill_id,skill_name,num
        FROM
            skill
        WHERE
            skill_id=#{asdfasdfasdf}
      </select>
    </mapper>
    
    • Java测试代码
    public class 处理结果集为Map类型 {
        public static void main( String[] args ) {
            SqlSession sqlSession = null;
            try {
                sqlSession = MyBatisUtils.getSqlSession();
    
                Map<String,Object> map =  sqlSession.selectOne(Skill.class.getName()+".getMap01", 2);
    
                System.out.println(map);
            } finally {
                MyBatisUtils.closeSqlSession(sqlSession);
            }
        }
    }
    
    • 图解说明


      结果集处理Map
    • 经典异常[重点,重点,重点]

    映射文件或者核心配置文件错误

    (2) 通过设置字段别名修改Map中的KEY值

    • 映射文件[关键代码]
       <select id="getMap02" parameterType="_int" resultType="map">
        SELECT
            skill_id skillId,skill_name as skillName,num as number
        FROM
            skill
        WHERE
            skill_id=#{id}
      </select>
    
    • Java测试代码
    public class 处理结果集为Map类型_通过给字段取别名方式 {
        public static void main( String[] args ) {
            SqlSession sqlSession = null;
            try {
                sqlSession = MyBatisUtils.getSqlSession();
    
                Map<String,Object> map =  sqlSession.selectOne(Skill.class.getName()+".getMap02", 2);
    
                System.out.println(map);
            } finally {
                MyBatisUtils.closeSqlSession(sqlSession);
            }
        }
    
    }
    

    (3) 通过resultMap属性和resultMap标签组合,设置不同的KEY

    • 映射文件
      <!-- 只能对结果集(查询)操作进行处理 -->
      <resultMap type="map" id="MapResultMapper" autoMapping="true">
        <result column="skill_id" property="id"/>
        <result column="skill_name" property="name"/>
        <result column="num" property="num"/>
      </resultMap>
      <select id="getMap03" parameterType="_int" resultMap="MapResultMapper">
        SELECT
            skill_id,skill_name,num
        FROM
            skill
        WHERE
            skill_id=#{asdfasdfasdf}
      </select>
    

    autoMapping="true" 默认值 按照字段进行映射,如果修改了后者覆盖前者
    autoMapping="false" 设置哪些就映射哪些

    • Java测试代码
    public class 处理结果集为Map类型_通过resultMap标签处理结果集 {
        public static void main( String[] args ) {
            SqlSession sqlSession = null;
            try {
                sqlSession = MyBatisUtils.getSqlSession();
    
                Map<String,Object> map =  sqlSession.selectOne(Skill.class.getName()+".getMap03", 2);
    
                System.out.println(map);
            } finally {
                MyBatisUtils.closeSqlSession(sqlSession);
            }
        }
    
    }
    
    • 图解说明


      Map设置不同的KEY

    2.返回单一值

    • 映射文件
      <select id="getCountSkill" resultType="int">
        SELECT count(*) FROM skill 
      </select>
    

    返回一个字符串也是类似的 resultType="string"

    • Java测试代码
    public class 处理结果集返回一个整型 {
        public static void main( String[] args ) {
            SqlSession sqlSession = null;
            try {
                sqlSession = MyBatisUtils.getSqlSession();
    
                Integer count =  sqlSession.selectOne(Skill.class.getName()+".getCountSkill");
    
                System.out.println(count);
            } finally {
                MyBatisUtils.closeSqlSession(sqlSession);
            }
        }
    
    }
    

    3.返回自定义类型对象

    (1) 通过设置别名方式

    • 持久化类
    public class Skill {
        private Integer skillId;
        private String skillName;
        private Integer num;
            //省略getter和setter方法
    }
    
    • 映射文件
      <!-- 1.别名方式,属性和字段名一致,可以完成自动映射 -->
      <select id="getSkill01" 
        parameterType="int" 
        resultType="com.shxt.model.Skill">
         SELECT
            skill_id skillId,skill_name skillName,num
        FROM
            skill
        WHERE
            skill_id=#{id}
      </select>
    

    字段别名和类中的属性名保持一致

    • 测试代码
    public class 处理结果集为自定义类Skill {
        public static void main( String[] args ) {
            SqlSession sqlSession = null;
            try {
                sqlSession = MyBatisUtils.getSqlSession();
    
                Skill s =  sqlSession.selectOne(Skill.class.getName()+".getSkill01", 2);
    
                System.out.println(s);
            } finally {
                MyBatisUtils.closeSqlSession(sqlSession);
            }
        }
    
    }
    
    • 图解说明


      别名方式

    (2) resultMap属性和resultMap标签组合方式

    • 映射文件
      <resultMap 
        type="com.shxt.model.Skill" 
        id="SkillResultMapper">
        <id column="skill_id" jdbcType="INTEGER" property="skillId" javaType="java.lang.Integer"/>
        <result column="skill_name" jdbcType="VARCHAR" property="skillName" javaType="java.lang.String"/>
        <result column="num" jdbcType="INTEGER" property="num" javaType="java.lang.Integer"/>
      </resultMap>
      <select id="getSkill02"  parameterType="int"  resultMap="SkillResultMapper"
       >
         SELECT
            skill_id ,skill_name ,num
        FROM
            skill
        WHERE
            skill_id=#{id}
      
      </select>
    
    • Java测试代码
    public class 处理结果集为自定义类Skill_resultMap标签处理 {
        public static void main( String[] args ) {
            SqlSession sqlSession = null;
            try {
                sqlSession = MyBatisUtils.getSqlSession();
    
                Skill s =  sqlSession.selectOne(Skill.class.getName()+".getSkill02", 2);
    
                System.out.println(s);
            } finally {
                MyBatisUtils.closeSqlSession(sqlSession);
            }
        }
    
    }
    
    • 图解说明


      resultMap标签解决方式

    4.返回列表别名和resultMap标签处理

    • 映射文件
      <select id="getSkillList01" resultType="map">
        SELECT
             skill_id ,skill_name ,num
        FROM
            skill
      </select>
    
      <select id="getSkillList02" resultMap="SkillResultMapper">
        SELECT
             skill_id ,skill_name ,num
        FROM
            skill shxt
      </select>
    

    resultType 返回结果集处理的内置类型
    resultMap 去找之前定义的resultMap标签的ID

    • Java测试代码
    public class 处理结果集结合 {
        public static void main( String[] args ) {
            SqlSession sqlSession = null;
            try {
                sqlSession = MyBatisUtils.getSqlSession();
    
                List<Map<String,Object>> list01= sqlSession.selectList(Skill.class.getName()+".getSkillList01");
                List<Skill> list02= sqlSession.selectList(Skill.class.getName()+".getSkillList02");
    
                System.out.println("list01:"+list01);
                System.out.println("list02:"+list02);
            } finally {
                MyBatisUtils.closeSqlSession(sqlSession);
            }
        }
    
    }
    

    因为我们知道要返回的是一个列表,所以我们使用的是selectList方法

    • 图解说明


      返回列表

    2.sql标签提取公共部分

    • 简单方式
      <sql id="skill_columns">
       skill_id ,skill_name ,num
      </sql>
      <select id="getSkillList01" resultType="map">
        SELECT
            <include refid="skill_columns"/>
        FROM
            skill
      </select>
    
    • 动态别名方式
      <sql id="skill_columns_alias">
       ${vip}.skill_id ,${vip}.skill_name ,${vip}.num
      </sql>
      <select id="getSkillList02" resultMap="SkillResultMapper">
        SELECT
            <include refid="skill_columns_alias">
                <property name="vip" value="shxt"/>
            </include>
        FROM
            skill shxt
      </select>
    

    sql标签不仅仅是处理字段,只要是公共的部分就可以提出来
    可以查看官方文档

    相关文章

      网友评论

        本文标题:5.平凡之路-查询结果集简单处理

        本文链接:https://www.haomeiwen.com/subject/zzkmdxtx.html