5、MyBatis输入输出映射

来源:互联网 发布:知乎阿波罗和雅典娜 编辑:程序博客网 时间:2024/06/09 22:23

一、输入映射

      输入映射,是在映射文件中通过parameterType指定输入参数的类型,类型可以是简单类型、pojo、pojo的包装类型。

1.1、简单类型

使用#{}占位符或${}进行sql拼接。

1.1.1、根据id查找User
<select id="getUserById" parameterType="int" resultType="cn.xpu.hcp.bean.User">        select * from user where id = #{id}</select>

Mapper接口:

public interface UserMapper {    public User getUserById(int id);}

测试:

public void MapperTest(){    SqlSession session = sqlSessionFactory.openSession();    UserMapper mapper = session.getMapper(UserMapper.class);    User user = mapper.getUserById(1);    System.out.println(user);    session.close();}

这里写图片描述

1.1.2、根据字符串模糊查找User列表
<!-- 模糊查询 --><select id="getLikeByName" parameterType="string" resultType="cn.xpu.hcp.bean.User">         select * from user where username like "%"#{value}"%"</select>

Mapper接口:

public interface UserMapper {    public List<User> getLikeByName(String str);}

测试:

public void MapperTest(){    SqlSession session = sqlSessionFactory.openSession();    UserMapper mapper = session.getMapper(UserMapper.class);    List<User> list = mapper.getLikeByName("张");    for (User user : list) {        System.out.println(user);    }    session.close();}

这里写图片描述


1.2、输入POJO

MyBatis使用OGNL表达式解析对象字段的值,#{}或者${}中的值为POJO属性名称。
更新User

<!-- 更新 --><update id="updateUser" parameterType="cn.xpu.hcp.bean.User">        update user set username=#{username},birthday = #{birthday},sex = #{sex},address = #{address} WHERE id=#{id}</update>

Mapper接口:

public interface UserMapper {    public void updateUser(User user);}

测试:

public void MapperTest(){    SqlSession session = sqlSessionFactory.openSession();    UserMapper mapper = session.getMapper(UserMapper.class);    User user = mapper.getUserById(1);    user.setUsername("Jake");    mapper.updateUser(user);//先查找,再更新    session.commit();    session.close();}

这里写图片描述


1.3、输入POJO的包装类

根据UserWrapper类中的POJO(user)进行模糊查询。
包装类:

public class UserWrapper {    private User user;    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }}

xml文件:

<select id="queryByWrapper" parameterType="cn.xpu.hcp.bean.UserWrapper" resultType="cn.xpu.hcp.bean.User">        select * from user where username like '%${user.username}%'</select>

Mapper接口:

public interface UserMapper {    public List<User> queryByWrapper(UserWrapper wrapper); }

测试:

public void MapperTest(){    SqlSession session = sqlSessionFactory.openSession();    UserMapper mapper = session.getMapper(UserMapper.class);    UserWrapper wrapper = new UserWrapper();    User user = new User();    user.setUsername("张");    wrapper.setUser(user);    List<User> list = mapper.queryByWrapper(wrapper);    for (User u : list) {        System.out.println(u);    }    session.commit();    session.close();}

这里写图片描述


二、输出映射

      MyBatis中输出映射有resultType和resultMap两种。

2.1、输出POJO对象

2.2、输出POJO列表

以上两种前面已经使用了。

2.3、resultType和resultMap

resultType可以指定将查询结果映射为POJO对象,但是,这需要表的列名和POJO的属性名相同才可以映射成功。
这里写图片描述
现在,我修改POJO的属性名:
这里写图片描述

我们继续使用resultType作为输出映射:

<select id="getUserById" parameterType="int" resultType="cn.xpu.hcp.bean.User">        select * from user where id = #{id}</select>

这里写图片描述
由于表名和属性名的不一致输出无法映射上,导致了空值。

这时我们就应该使用resultMap了,他可以将字段和属性名作一个对应关系。

<resultMap type="cn.xpu.hcp.bean.User" id="userMap">      <!--         id标签:定义主键        column:表中的列名        property:POJO中的属性名      -->    <id column="id" property="userId"/>    <!-- 普通属性 -->    <result column="username" property="name"/></resultMap><select id="getUserById" parameterType="int" resultMap="userMap" >        select * from user where id = #{id}</select>

这里写图片描述
成功建立了输出映射。

我认为在建立表和POJO时应该保证一致,避免麻烦。

原创粉丝点击