mybatis简单resultMap使用详解

Mybatis的介绍以及使用:http://www.mybatis.org/mybatis-3/zh/index.html

mybatis是一个半自动的ORM(Object Relational Mapping)框架,需要手动配置一些SQL语句或者注解,相对来说Mybatis留给程序员操作的空间灵活度更高,通常需要手动配置一些东西完成OR映射。当数据库表中的字段 和 POJO实体类不匹配时,这是就需要程序员手动完成字段的映射。

mybatis-config.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <properties resource="db.properties"/>

    <settings>			<!-- 使用日志进行帮忙查看 -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <typeAliases>		<!-- 取个别名 -->
        <typeAlias type="com.pojo.User" alias="user"/>
    </typeAliases>

    <environments default="development">

        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>

    </environments>
    <mappers>
        <mapper resource="com/dao/UserMapper.xml"/>
    </mappers>
</configuration>

mybatisUtil加载工具类

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class mybatisUtil {
    private static SqlSessionFactory sqlSessionFactory = null;
    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream in = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlsession(){
        return sqlSessionFactory.openSession();
    }
}

POJO实体类User,为了方便简单实用Lombok注解,减少一些代码。

package com.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data                           //各种get / set方法  Tostring...
@AllArgsConstructor             //全参构造
@NoArgsConstructor              //无参构造
public class User {
    private int id;						//对应数据库中的id
    private String username;			//对应数据库中的name
    private String password;			//对应数据库中的pwd
}

接口方法与对应的xml配置文件

package com.dao;

import com.pojo.User;
import java.util.List;

public interface UserMapper {
    List<User> getUserList();
}

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 namespace="com.dao.UserMapper">

	<select id="getUserList" resultType="user">
	    select *from user;
	</select>

</mapper>

1. POJO实体类 和 数据表字段不匹配

@Test
public void test1(){
    SqlSession session = mybatisUtil.getSqlsession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    List<User> list = mapper.getUserList();
    for (User user : list) {
        System.out.println(user.toString());
    }
    session.close();
}

POJO实体类中有两个字段和数据库的字段不匹配,最后获得结果的时对于匹配失败的属性会产生null空值。使用输出日志进行帮忙很容易看到区别。

简单的解决方案:就是SQL语句查询时给查询字段使用重命名。

select id, name as username, pwd as password from user

2. resultMap解决属性 - 字段不匹配问题

上面这种解决方案是能够解决问题的,但是有点冗余本身就要查全部的信息用的 * 做通配。这么一改需要每个字段都列出来,然后对极个别的字段进行取别名。试想一下当数据表中有几十个字段呢?而真正需要取别名的字段只有1 - 2个呢?因此mybatis提供了一个强大的机制resultMap结果集映射来解决这个问题。

<?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="com.dao.UserMapper">

	<!--
		  1. id可以认为是定义方法名,整个resultMap是一个映射方法,调用这个方法就可以完成这个映射。
		  2. type是实体类的名称
   -->
    <resultMap id="FieldMap" type="user">
    	<!--   column 是数据库字段名    property是实体类属性名   -->
        <result column="name" property="username"/>
        <result column="pwd"  property="password"/>
    </resultMap>
    <select id="getUserList" resultMap="FieldMap">
        select *from user
    </select>

</mapper>

resultMap标签的解释:

  1. id可以认为定义方法的名称,下面select中的resultMap传入id的值就相当于使用这个方法完成映射。
  2. type是实体类名
  3. column对应数据库中的字段
  4. property是实体类的属性。

到此这篇关于mybatis简单resultMap使用详解的文章就介绍到这了,更多相关mybatis resultMap使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MyBatis映射文件resultMap元素中使用多个association的方法

    现在有一张订单表t_stockorder,其拥有id.code.client_id.merchandise_id.merchandise_number.order_date.operator_id这些字段,其中client_id关联t_client表中code字段,merchandise_id关联t_merchandise表的code字段,operator_id关联t_employee表的code字段. 现在要通过SQL语句将订单表中t_stockorder的数据全部查询出来,SQL语句如下所示

  • mybatis的mapper.xml中resultMap标签的使用详解

    1.前言 最近博主在做一个ssm框架的共享汽车管理系统,其中,数据库字段设计的有下划线方式,a_username,然后在写mapper.xml里面的sql语句的时候,一直出现查询语句查询的值为null的情况.或者是resultMap标签和驼峰规则不太明白的同学,可以看这里. 于是顺便梳理一下. 2.关于resultMap 2.1.什么是resultMap? 在mybatis中有一个resultMap标签,它是为了映射select查询出来结果的集合,其主要作用是将实体类中的字段与数据库表中的字段进

  • mybatis中resultMap 标签的使用教程

    MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设置参数.结果集检索等jdbc繁杂的过程代码. MyBatis特点: 1.开源的优秀持久层框架 2.SQL语句与代码分离 3.面向配置的编程 4.良好支持复杂数据映射 5.动态SQL resultMap 标签: 用来描述如何从数据库结果集中来加载对象 (敲黑板!!)主管数据库的字段和实体类属性的匹配,

  • mybatis简单resultMap使用详解

    Mybatis的介绍以及使用:http://www.mybatis.org/mybatis-3/zh/index.html mybatis是一个半自动的ORM(Object Relational Mapping)框架,需要手动配置一些SQL语句或者注解,相对来说Mybatis留给程序员操作的空间灵活度更高,通常需要手动配置一些东西完成OR映射.当数据库表中的字段 和 POJO实体类不匹配时,这是就需要程序员手动完成字段的映射. mybatis-config.xml配置文件 <?xml versi

  • mybatis分页插件pageHelper详解及简单实例

    mybatis分页插件pageHelper详解及简单实例 工作的框架spring springmvc mybatis3 首先使用分页插件必须先引入maven依赖,在pom.xml中添加如下 <!-- 分页助手 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>3.7.5

  • Mybatis映射文件实例详解

     一.输入映射 parameterType 指定输入参数的Java类型,可以使用别名或者类的全限定名.它可以接收简单类型.POJO.HashMap. 1.传递简单类型 根据用户ID查询用户信息: <select id="findUserById" parameterType="int" resultType="com.itheima.mybatis.po.User"> SELECT * FROM USER WHERE id =#{id

  • springmvc与mybatis集成配置实例详解

    简单之美,springmvc,mybatis就是一个很好的简单集成方案,能够满足一般的项目需求.闲暇时间把项目配置文件共享出来,供大家参看: 1.首先我们来看下依赖的pom: <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.ve

  • SpringBoot整合MyBatis逆向工程及 MyBatis通用Mapper实例详解

    一.添加所需依赖,当前完整的pom文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&q

  • mybatis的动态sql详解(精)

    MyBatis 的一个强大的特性之一通常是它的动态 SQL 能力.如果你有使用 JDBC 或其他 相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空 格或在列表的最后省略逗号.动态 SQL 可以彻底处理这种痛苦. 通常使用动态SQL不可能是独立的一部分,MyBatis当然使用一种强大的动态SQL语言来改进这种情形,这种语言可以被用在任意映射的SQL语句中. 动态SQL元素和使用 JSTL或其他相似的基于XML的文本处理器相似.在MyBatis之前的版本中,有很多

  • SpringBoot 使用Mybatis分页插件实现详解

    这篇文章主要介绍了SpringBoot 使用Mybatis分页插件实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.导入分页插件包和jpa包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </depende

  • MyBatis 中 SqlMapConfig 配置文件详解

    0x00:文件介绍 在 WEB 工程中,对于 MyBatis 最核心的全局配置文件是 SqlMapConfig.xml 文件,其中包含了数据库的连接配置信息.Mapper 映射文件的加载路径.全局参数.类型别名等. 0x01:配置项详解 configuration:包裹所有配置标签,是整个配置文件的顶级标签. properties:属性,该标签可以引入外部配置的属性,也可以自己配置.该配置标签所在的同一个配置文件中的其他配置均可引用此配置中的属性. setting:全局配置参数,用来配置一些改变

  • MyBatis 动态SQL全面详解

    目录 前言 动态sql 1.先看一下模块目录结构 2.物理建模和逻辑建模 3. 引入依赖 4.全局配置文件 5.sql共性抽取文件 6.mapper接口 if 静态sql: 动态sql: where 用if标签的动态sql: where和if的动态sql: trim trim的动态sql trim标签: set trim的动态sql: set的动态sql set标签的作用: choose.when.otherwise 动态sql foreach 1.动态sql 2.动态sql 批量查询:fore

  • Spring和Mybatis整合的原理详解

    目录 前言 简单猜想 案例搭建 通过扫描接口 正式开始 setBeanName setApplicationContext afterProperties postProcessBeanDefinitionRegistry 总结 前言 最近读完了Spring的IOC部分的源码,受益匪浅,这篇文章讲解一下MyBatis是如何做到与Spring整合的.MyBatis是如何做到干扰Spring的生命周期,把Mapper一个个的注册到Spring容器中的将在这里揭秘. 简单猜想 因为阅读过Spring源

随机推荐