DEV Community

Jihao Deng
Jihao Deng

Posted on

MB03 Mybatis Mapper

本篇主要讲利用Mybatis的xml配置SQL方法实现增删改查

基本的增删改查

select

<select id="findUserById" resultType="com.dale.pojo.User" parameterType="int">
    select * from h_user where id = #{id}
</select>
Enter fullscreen mode Exit fullscreen mode
  • 标签中的id:Dao接口里的方法名
  • resultType:SQL语句执行的返回值类型(基本数据类型、实体类、map)
  • parameterType:SQL语句的参数类型

insert

<insert id="addUser" parameterType="com.dale.pojo.User">
    insert into h_user (id, name, pwd) values (#{id}, #{name}, #{pwd})
</insert>
Enter fullscreen mode Exit fullscreen mode
  • 标签中没有resultType
  • 对象中的属性可以直接取出来:#{属性名}
  • 需要用SqlSession的commit()方法提交事务

update

<update id="updateUser" parameterType="com.dale.pojo.User">
    update h_user set name = #{name}, id = #{id}, pwd = #{pwd} where id = #{id}
</update>
Enter fullscreen mode Exit fullscreen mode
  • 需要用SqlSession的commit()方法提交事务

delete

<delete id="deleteUser" parameterType="int">
    delete from h_user  where id = #{id}
</delete>
Enter fullscreen mode Exit fullscreen mode
  • 需要用SqlSession的commit()方法提交事务

使用Map作为标签的参数

观察上述配置文件,如果使用实体类作为参数,我们需要保证#{属性名}必须与实体类中的属性名一致。

使用Map作为参数可以更加自由。

接口中的方法:

public int addUserUsingMap(Map<String, Object> map);
Enter fullscreen mode Exit fullscreen mode

Mapper.xml配置文件:

<!-- 使用map来作为参数,里面的键名可以任意 -->
<insert id="addUserUsingMap" parameterType="map">
    insert into h_user (id, name, pwd) values (#{userId}, #{username}, #{password})
</insert>
Enter fullscreen mode Exit fullscreen mode

测试代码:

@Test
public void testAddUsingMap() {
    // 获取SqlSession对象
    SqlSession ss = MybatisUtil.getSqlSession();

    // 获取Dao对象,即Mapper
    UserDao userDao = ss.getMapper(UserDao.class);

    Map<String, Object> mp = new HashMap<String, Object>();

    mp.put("userId", 6);
    mp.put("username", "是否合适的空间");
    mp.put("password", "password");

    userDao.addUserUsingMap(mp);

    // 提交事务
    ss.commit();

    // 关闭SqlSession
    ss.close();
}
Enter fullscreen mode Exit fullscreen mode

结果集映射 resultMap

继续观察上述配置文件,如果使用实体类作为返回类型resultType,那么我们需要保证实体类的属性名和数据库里的字段名保持一致。如果有的字段名不一致,那么返回的结果中,这个属性值将为null。

如果将上述User实体类的熟悉名name改为username:

public class User {
    private int id;
    private String username;
    private String pwd;
}
Enter fullscreen mode Exit fullscreen mode

此时数据库里对应的字段名依旧是name

引入结果集映射:

<!-- 通过namespace来绑定一个Dao接口 -->
<mapper namespace="com.dale.dao.UserDao">

    <resultMap type="com.dale.pojo.User" id="userResultMap">
        <result column="name" property="username"/>
    </resultMap>

    <select id="findUserById" resultMap="userResultMap" parameterType="int">
    select * from h_user where id = #{id}
</select>

</mapper>
Enter fullscreen mode Exit fullscreen mode

<resultMap>标签中,column表示数据库里的字段,property表示实体类里的属性

Top comments (0)