Mybatis(三)--- Map 操作增删改查

上文说到:数据库的增删改查是如何实现的,但是有个明显的缺点就是:如果一个实体类具有非常多的字段的时候,按照之前的思路是一定要把每个字段都进行考虑,工作量会非常大,所以有什么办法可以只对其中的某些字段进行操作呢,这里引用Map实现。

在springmvc+mybatis中dao接口中使用map作为参数传递的优点:
1.不用指定每个参数的名称.
2.可以传递任意数量和任意类型的参数,而不用对每个参数进行命名和申明,非常利于扩展,在需要时不用额外动Java代码在xml中可以更灵活的获取参数,不用受前端参数变化的影响

  1. 接口内定义方法
	UserMapper.java
    //map方式插入
    int addUser2(Map<String,Object> map);
  1. xml文档内定义sql语句
	UserMapper.xml
	<!--参数类型传入map类型-->
	<insert id="addUser2" parameterType="map">
	<!--此处只定义了id,psw,没有考虑name;MapId和MapPsw是自定义的-->
	<!--若为com.kuang.UserMapper,只能传入已经定义好的变量,map类型时可以自己定义-->
        insert into mybatis.user (id,psw) values (#{MapId},#{MapPsw});
    </insert>
  1. 测试代码
  @Test
    //根据id只修改用户的个别属性name---map
    public void addUser2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        
        //创建一个map对象 Map<键类型,値类型>,Object类型作用是可以接收任何类型的数值,因为Object是所有类型的父类
        Map<String,Object> map = new HashMap<>();
        
        //MapId,MapPsw是之前定义的,6和000000是传入的参数
        map.put("MapId",6);
        map.put("MapPsw","000000");
	
		//调用addUser2
        mapper.addUser2(map);
        //记得提交事务
        sqlSession.commit();
        sqlSession.close();
    }

sum: map是非常常用的和重要的方式对数据库操作,这次练习学习掌握的基本的使用方法,但对于进一步的数据库操作没有去总结,例如模糊查询等操作,之后遇到会补充学习,因为这里还是用到了map相关的知识,虽然用法很简单,但是对于map的原理仍需要回顾一下,现回顾内容如下

创建学生类student,此处省略

public class Test {
    public static void main(String[] args) {
        //需求: 往Map集合中添加3个学生对象, 然后打印.
        //1. 创建集合对象.
        //键: 学生的编号,  值: 具体的学生对象
        Map<Integer,Student> map = new HashMap<>();
        //2. 创建元素对象.
        Student s1 = new Student("张三", 23);
        Student s2 = new Student("李四", 24);
        Student s3 = new Student("张三", 23);

        //3. 将元素对象添加到集合中.
        /*Student stu1 = map.put(1, s1);
        System.out.println("stu1: " + stu1);
        Student stu2 = map.put(1, s2);
        System.out.println("stu2: " + stu2);*/
        map.put(1, s1);
        map.put(2, s2);
        map.put(3, s3);

        //根据键,获取值
        Student stu3 = map.get(3);
        System.out.println("key: " + 2 + ", value:" + stu3);

        //打印集合
        System.out.println(map);
        System.out.println("----------------------------");

        //4. 遍历集合.
      /*  //4.1. 获取所有键的集合.                 keySet()
        Set<Integer> keys = map.keySet();
        //4.2. 遍历所有的键, 获取到每一个键.     迭代器, 增强for.
        //获取迭代器对象
        Iterator<Integer> it = keys.iterator();
        while(it.hasNext()) {
            //如果迭代器中有数据, 就获取.
            Integer key = it.next();
            //4.3. 根据键, 获取指定的值.             get()
            Student value = map.get(key);
            System.out.println("key: " + key + "...value:" + value);
        }*/

        //通过增强for实现
        //获取到所有的键
        Set<Integer> keys = map.keySet();
        for (Integer key : keys) {
            //key就是双列集合中的每一个键.
            Student value = map.get(key);
            System.out.println(key + "..." + value);
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值