Mybatis的map用法

当Mybatis传过来的值是map类型的时候,有两种处理方法

1、将数值装入类封装起来

public interface IStudentDao {

    // 根据姓名和年龄查询
    List<Student> selectStudentsByCondition(Map<String, Object> map);

    // 根据姓名和年龄查询
    List<Student> selectStudentsByCondition2(String name,int age);
}

2、map有动态加载,所以不用impl,只需dao 的抽象方法和id名称一样就可以

<?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相同的id名所以namespace改为对应的到的包路径-->
<mapper namespace="com.liuya.demo.mybatis.dysnamic.dao.IStudentDao">
    <!-- 配置数据库和实体类的字段 -->
    <resultMap id="studentMapper" type="Student">
        <id column="T_ID" property="id"/>
        <result column="T_NAME" property="name"/>
        <result column="T_AGE" property="age"/>
        <result column="T_SCORE" property="score"/>
    </resultMap>

    <!-- 根据姓氏模糊查询 -->
    <select id="selectStudentsByCondition" resultMap="studentMapper">
        select T_NAME,T_AGE,T_SCORE
        from STUDENT
        where T_NAME like ‘%‘ #{nameCon} ‘%‘
        AND T_AGE > #{ageCon}
        AND T_SCORE > #{student1.score }
    </select>

    <!-- 根据姓氏模糊查询,#{}大括号里是索引
          #{}中可以放什么内容?
          (1)参数对象的属性
          (2)随意内容,此时的#{}是占位符
          (3)参数为map时的key
          (4)参数为map时,若key所对应的value为对象,则可将对象的属性放入
          (5)参数的索引号
    -->
    <select id="selectStudentsByCondition2" resultMap="studentMapper">
        select T_NAME,T_AGE,T_SCORE
        from STUDENT
        where T_NAME like ‘%‘ #{0} ‘%‘
        AND T_AGE > #{1}
    </select>

</mapper>

3、对其测试

public class MyTest {

    private IStudentDao idao;
    private SqlSession sqlSession;

    @Before
    public void before() {
        sqlSession = MybatisUtil.getSqlSession();
        idao = sqlSession.getMapper(IStudentDao.class);
    }

    @After
    public void after() {
        if (sqlSession != null) {
            sqlSession.close();
        }
    }

    // 查询一个姓张的,年龄大于24,并且成绩比田七高的学生
    @Test
    public void testSelectStudentsByCondition() {
        System.out.println("开始查询学生");
        Student student1 = new Student("",21,66);

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("nameCon","张");
        map.put("ageCon",24);
        map.put("student1",student1);

        List<Student> students = idao.selectStudentsByCondition(map);
        for (Student student : students) {
            System.out.println(student);
        }
        System.out.println("查询学生成功");
    }

    // 查询一个姓张的,年龄大于24,并且成绩比田七高的学生
    @Test
    public void testSelectStudentsByCondition2() {
        System.out.println("开始查询学生");

        List<Student> students = idao.selectStudentsByCondition2("张",24);
        for (Student student : students) {
            System.out.println(student);
        }
        System.out.println("查询学生成功");
    }
}
时间: 2024-12-09 16:01:53

Mybatis的map用法的相关文章

MyBatis 返回Map&lt;String,Object&gt;类型

<resultMap type="map" id="stringMap"> <result property="contentIntr" column="contentIntr" javaType="string" /> </resultMap> <!-- 导出所有数据 --> <select id="exportAll" resul

Mybatis返回Map的一种实现

Mybatis返回Map的一种实现 前言 在使用Mybatis进行系统开发的时候,有时候我们会有这么一种需求:我们希望通过Mybatis查询某一个表返回的结果是一个Map,而这个Map的Key是表的一个字段,Value是另一个字段.然而当我们按照Mybatis的做法,指定查询Mapper语句的resultType为map时返回的结果是一个Map列表(表中有多条记录时),而且每个元素Map对应的是表的一行记录(Key为每个字段的名称,Value为对应的值),这跟我们的需求是不相符合的.那有什么方法

STL中的map用法详解

STL中map用法详解 说明:如果你具备一定的C++ template知识,即使你没有接触过STL,这个文章你也应该可能较轻易的看懂.本人水平有限,不当之处,望大家辅正. 一.map概述 map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),

Collection List Set和Map用法与区别

labels:Collection List Set和Map用法与区别 java 散列表 集合 Collection           接 口的接口      对 象的集合   ├   List                    子接口         按进入先后有序保存      可 重复   │├   LinkedList                 接口实现类      链表      插入删除      没有同步      线程不安全   │├   ArrayList     

mybatis返回map类型数据空值字段不显示的解决方法

在日常开发中,查询数据返回类型为map,数据库中有些自动值为null,则返回的结果中没有值为空的字段,则如何显示值为空的字段呢? Spring boot + MyBatis返回map中null值默认不显示,如要调整为null值显示需要在配置文件中添加属性,如下图红框中所示: 2.Mybatis使用IFNULL(P1,P2)函数 原文地址:https://www.cnblogs.com/panchanggui/p/10919421.html

Mybatis之foreach用法----List、Array、Map三种类型遍历

在mybatis的xml文件中构建动态sql语句时,经常会用到标签遍历查询条件.特此记录下不同情况下书写方式!-------仅供大家参考------ 1. foreach元素的属性 collection: 需做foreach(遍历)的对象,作为入参时,list.array对象时,collection属性值分别默认用"list"."array"代替,Map对象没有默认的属性值.但是,在作为入参时可以使用@Param("keyName")注解来设置自

02—mybatis的基本用法01

深入mybatis的配置文件(mybatis-config.xml) MyBatis的配置文档结构 顶层configuration 配置 properties 属性 settings 设置 typeAliases 类型命名 typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 |-environment 环境变量 |-transactionManager 事务管理器 |-dataSource 数据源 databaseId

ArrayList、LinkedList、 Vector、Map 用法比较

ArrayList和Vector是采用数组方式存储数据,此数组元素总数大于实际存储的数据个数以便增加和插入元素,二者都允许直接序号索引元素,但是插入数据要移动数组元素等内存操作,所以它们索引数据快.插入数据慢. ArrayList数组存储方式: [java] view plaincopyprint? private transient Object[] elementData; public ArrayList(int initialCapacity) { super(); if (initia

map用法详解

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 下面举例说明什么是一对一的数据映射.比如一个班级中,每个学生的学号跟他的姓名就存在着一一