上文说到:数据库的增删改查是如何实现的,但是有个明显的缺点就是:如果一个实体类具有非常多的字段的时候,按照之前的思路是一定要把每个字段都进行考虑,工作量会非常大,所以有什么办法可以只对其中的某些字段进行操作呢,这里引用Map实现。
在springmvc+mybatis中dao接口中使用map作为参数传递的优点:
1.不用指定每个参数的名称.
2.可以传递任意数量和任意类型的参数,而不用对每个参数进行命名和申明,非常利于扩展,在需要时不用额外动Java代码在xml中可以更灵活的获取参数,不用受前端参数变化的影响
- 接口内定义方法
UserMapper.java
//map方式插入
int addUser2(Map<String,Object> map);
- 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>
- 测试代码
@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);
}
}
}