Mybatis万能Map
Map
sql中一些经常性的CRUD操作都需要传递参数,根据不同的需求传递的参数也不同,大致分三种:
- Map传递参数,直接在sql中取出key即可
(parameterType=“map” 常用此方式) - 对象传递参数,直接在sql中取对象的属性即可(parameterType=“com.rjxy.mybatis.test.User”)
- 只有一个基本类型参数的情况下,可以直接在sql中取到(parameterType=“int”)
示例如下:
1.
userMapper.xml
<insert id="five" parameterType="map">
<!-- 如果实体类或数据库中的表的字段或者参数过多,应当考虑使用Map。如果字段过多,要想更改其中的某一个值则要连带全部的字段是很不便捷的,使用Map可以随意更改key的名字 -->
insert into users(id,age) values(#{userid},#{userage});
</insert>
测试类:
@Test
public void insert() {
//如果实体类或数据库中的表的字段或者参数过多,应当考虑使用Map,使用Map传递参数直接在sql中取出key即可,
//如下所示Map集合可以指定所需字段,相比较对象传参的插入方法是要带上全部字段才可以完成最终目的,
//如果字段过多,要想更改其中的某一个字段的值必须要连带全部的字段是很不便捷的,普通的方法使用对象传递参数直接在sql中取出对象的属性即可
String statement="study.mybatis.userMapper"+".five";
Map<String, Object> map=new HashMap<String, Object>();
map.put("userid", 35);
map.put("userage", 21);
int b=(new MybatisUtils()).getSqlSession().insert(statement, map);
System.out.println(b);
(new MybatisUtils()).getSqlSession().close();
}
运行结果(最后两行):
userMapper.xml
<insert id="two" parameterType="com.rjxy.mybatis.test.User">
insert into users values(#{id},#{name},#{age});
</insert>
测试类
@Test
public void insertUser() {
String statement="study.mybatis.userMapper"+".two";
int a=(new MybatisUtils()).getSqlSession().insert(statement, new User(33,"AAA",22));
System.out.println(a);
(new MybatisUtils()).getSqlSession().close();
}
运行结果(最后一行):
userMapper.xml
<select id="one" parameterType="int" resultType="com.rjxy.mybatis.test.User">
<!-- resultType返回一个结果,resultMap接收返回多个结果 -->
select * from users where age=#{age};
</select>
测试类:
@Test
public void selectUser() {
String statement="study.mybatis.userMapper"+".one";
List<User> users=(new MybatisUtils()).getSqlSession().selectList(statement,21);
System.out.println(users);
(new MybatisUtils()).getSqlSession().close();
}
多个参数用Map