MyBatis知识点复习-07resultType与resultMap讲解
上一篇:MyBatis知识点复习-06parameter传入包装类查询条件与map的讲解
下一篇:MyBatis知识点复习-08动态SQL
在前面章节中我们已经使用过了resultType,相信你已经和熟练了,但是他其实存在一个弊端,而这个弊端可以用resultMap来解决,那么具体是什么呢?下面的学习将为您讲解!
在正式讲解前我们做个resultType的返回类型的总结:
简单类型:double,long,int,String等
POJO单个对象,比如前面文章的User
POJO列表:比如前面文章用的List<User>
本章内容正式讲解:
我们来看一下我们的User类(是一个javaBean类)的属性内容:
private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
再来看一下我们的user表的字段名字:
会发现他们对应的名字是一模一样的,但是如果我的user表里面的username不叫username而是叫name,那么这个时候如果你还在用resultType就会返回空(当然这里你大可在sql语句去修改来修正,比如select id,name username , birthday,sex,address from user但这不是通用的好方法),这个时候我们的解决办法是使用resultMap
下面我来为大家演示:
先把user表的username属性名字改为name
在UserMapper接口里面添加下面这个方法
public List<User> findUsersByResultMap(User user);
接下来我们需要手动的将对应的名字映射起来,在mapper/UserMapper.xml的mapper标签下面添加下面内容:
<resultMap id="abcdef" type="user">
<id property="id" column="id"></id>
<result property="username" column="name"></result>
</resultMap>
在mapper/UserMapper.xml文件里面添加下面内容:
<select id="findUsersByResultMap" resultMap="abcedef" parameterType="user">
select * from user where name = #{username} and sex = #{sex}
</select>
那么上面添加的两段内容中,第一个的id与第二个的resultMap为abcdef,这是要将两者对应起来,然后
在<resultMap>标签下我们<id>标签是写主键的,<result>标签写其他的
Test方法内容如下:
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setSex("1");
user.setUsername("张三丰");
List<User> usersByResultMap = mapper.findUsersByResultMap(user);
System.out.println(usersByResultMap);
sqlSession.commit();//提交事务,否则会事务回滚
结果:
上一篇:MyBatis知识点复习-06parameter传入包装类查询条件与map的讲解
下一篇:MyBatis知识点复习-08动态SQL