封装mybatis的输出结果

封装mybatis的输出结果

  • 封装输出结果:MyBatis执行sql语句,得到ResultSet,转为java对象。

resultType

resultType属性:在执行select时使用,作为标签的属性值出现的

resultType:表示类型,mysql执行sql语句,得到java对象的类型,它的值有两种

  • java类型的全限定名称( 根据Dao接口中的方法返回值类型确定)
  • 使用别名

resultType表示java自定义对象

全限定名称
Student selectById(Integer id);

<select id="selectById" parameterType="int" resultType="indi.yuluo.domain.Student">
    select id,name,email,age from student where id=#{studentId}
</select>

resultType: 使用java对象的全限定名称。表示的意思是mybatis执行sql语句之后,把ResultSet中的数据转为Student类型的对象。mybatis会做以下的操作:
    1,调用indi.yuluo.domain.Student的无参构造方法,创建对象:
    Student student = new Student();
	2, 同名的列赋值给同名的属性
    student.setId(rs.getInt("id"));
	student.setString(rs.get("name"));
	3,得到java对象,如果dao接口返回值是List集合,mybatis把student对象放入到List集合中
        
所以执行 Student studen = dao.selectById(1001);得到的是数据库中id=1001的这行数据,这行数据的列值,赋给了student对象的属性,得到studen对象,就相当于得到了id=1001这行数据
        
所以在声明实体类的时候,属性名和列名尽量保持一致!
使用别名
  • 自定义别名

    • mybatis提供的对java类型定义简短,好记的名称

    • 自定义别名的步骤

        1. 在mybatis主配置文件中,使用typeAliases标签声明别名
        2. 在mapper文件中,resultType = ”别名“
            <!--类型别名-->
            <typeAliases>
                
                <!--第一种语法格式
                    type:java类型的全限定名称(自定义类型)
                    alias:自定义别名
                -->
                <typeAlias type="indi.yuluo.domain.Student" alias="stu"/>
                <typeAlias type="indi.yuluo.******" alias="****"/>
                
            </typeAliases>
        
      • 优点:别名可以自定义

      • 缺点:每个类型都需要自己定义

      • 使用来定义别名

      •     <!--类型别名-->
                
                <!--别名就是每个类的类名的小写-->
                <package name="indi.yuluo.domain.Student"/>
                <package name="indi.yuluo.****">
                
            </typeAliases>
        
  • 建议使用全限定名称

resultType表示简单类型

mapper文件

    <!--执行sql语句,得到的是一个一行一列的值-->
    <select id="countStudent" resultType="java.lang.Integer">
        select count(*) from student
    </select>

dan方法

    /**
     * 得到student这张表的记录数
     * @return
     */
    Integer countStudent();

resultType表示map数据结构

mapper文件

    <!--执行sql得到一个map数据结构
        {列名 = 列值,……}
    -->
    <select id="selectByMap" parameterType="int" resultType="java.util.HashMap">
        select * from student where id=#{studentId}
    </select>

dao方法

    // 返回结果是一个Map
    Map<Object, Object> selectByMap(@Param("studentId") Integer id);

单元测试

    /**
     * 用于测试:resultMap 返回的是一个map的数据结构
     */
    @Test
    public void testSelectByMap() {
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        StudentDao mapper = sqlSession.getMapper(StudentDao.class);

        Map<Object, Object> objectObjectMap = mapper.selectByMap(1002);

        System.out.println(objectObjectMap);
        sqlSession.close();
    }
  • 只能返回一条数据多了会报异常

resultMap

因为数据库的列名定义规范和java的属性值的命名规范不同,所以会经常使用到resultMap这个属性

<!--
	定义resultMap
    id:给resultMap的映射关系七个名称,唯一值
    type:java类型的全限定名称
-->
<resultMap id="customMap" type="indi.yuluo.vo.CustomerOnject">
    <!--定义列名和属性名的对应-->
    <!--主键类型使用id标签-->
    <id column="id" property="cid"/>
    
    <!--非主键类型使用result标签-->
    <result column="name" property="cname"/>
    
    <!--列名和属性名相同不定义-->
    <result column="emial" property="email"/>
    
</result>
    
<!--使用resultMap属性的id值来指定映射关系-->    
<select id="selectByMap" resultMap="customMap">
    select * from student where id=#{studentId}
</select>
  • 定义了之后可以反复使用

resultType和ruseltMap二选一,不能同时使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值