前言:在我们MyBatis的使用之中,其实我们可以不用写bean实体类,用map去代替bean类的,但只是建议在某些情况下临时使用map,比如,当数据库中2张关联的表之间有个中间表的时候,我们可以临时使用map去代替,重要的是我们要知道有map可以代替不用写bean类这样一件事~~
先放代码流程分析:
beanMapper接口:
public interface UserMapper {
void saveBatchByMap(List<Map<String,Object>> list);
}
beanMapper映射文件:
<?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.zhengqing.mybatis._09map.UserMapper"> <!--全限定mapper名-->
<insert id="saveBatchByMap" parameterType="list">
INSERT into user(username,password,age) VALUES
<foreach collection="list" item="user" separator=",">
(#{user.username},#{user.password},#{user.age})
</foreach>
</insert>
</mapper>
测试类:
public class UserMapperTest {
@Test
public void saveBatchByMap() {
SqlSession sqlSession=null;
try {
sqlSession= MybatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<Map<String,Object>> list=new ArrayList<>(); // class com.sun.proxy.$Proxy4
for (int i = 0; i < 5; i++) {
Map<String,Object> map=new HashMap<>();
map.put("username", "map"+i);
map.put("password", "MAP"+i);
map.put("age", 1+i);
list.add(map);
}
userMapper.saveBatchByMap(list);
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
运行结果:
最后在我的数据库中成功插入如下数据: