MB03 Mybatis Mapper

declair

Jihao Deng

Posted on August 17, 2020

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表示实体类里的属性

💖 💪 🙅 🚩
declair
Jihao Deng

Posted on August 17, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

MB03 Mybatis Mapper
learning MB03 Mybatis Mapper

August 17, 2020