Code前端首页关于Code前端联系我们

MyBatis教程:XML方法的基本使用:增删改查

terry 2年前 (2023-09-25) 阅读数 48 #后端开发

1.输入用户

1.1 简单的录入方法

如果我们现在想添加一个新用户,应该怎么做呢?

首先,在SysUserMapper接口中添加以下方法。

/**
 * 新增用户
 *
 * @param sysUser
 * @return
 */
int insert(SysUser sysUser);

然后打开相应的 SysUserMapper.xml 文件并添加以下语句。

<insert id="insert">
    INSERT INTO sys_user(id, user_name, user_password, user_email, user_info, head_img, create_time)
    VALUES (#{id},#{userName},#{userPassword},#{userEmail},#{userInfo},#{headImg,jdbcType=BLOB},#{createTime,jdbcType=TIMESTAMP})
</insert>

特别说明:

1)为了避免类型错误,对于一些特殊的数据类型,需要定义特殊的jdbcType值。例如,headImg 定义了 BLOB 类型,createTime 定义了 TIMESTAMP 类型。

2)对应的BLOB类型是ByteArrayInputStream,它是一个二进制数据流。

3)由于数据区分日期、时间和日期类型,因此Java中经常使用java.util.Date类型。因此,为了保证数据类型正确,需要手动设置日期类型。日期、时间和日期对应的 JDBC 类型分别是 DATE、TIME 和 TIMESTAMP。

在SysUserMapperTest测试类中添加以下代码来测试insert()方法。

@Test
public void testInsert() {
    SqlSession sqlSession = getSqlSession();

    try {
        SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);

        SysUser sysUser = new SysUser();
        sysUser.setUserName("test1");
        sysUser.setUserPassword("123456");
        sysUser.setUserEmail("test@mybatis.tk");
        sysUser.setUserInfo("test info");
        // 正常情况下应该读入一张图片保存到byte数组中
        sysUser.setHeadImg(new byte[]{1, 2, 3});
        sysUser.setCreateTime(new Date());

        // 这里的返回值result是执行的SQL影响的行数
        int result = sysUserMapper.insert(sysUser);
        // 只插入1条数据
        Assert.assertEquals(1, result);
        // id为null,没有给id赋值,并且没有配置回写id的值
        Assert.assertNull(sysUser.getId());
    } finally {
        // 为了不影响其他测试,这里选择回滚
        // 默认的sqlSessionFactory.openSession()是不自动提交的
        // 因此不手动执行commit也不会提交到数据库
        sqlSession.rollback();
        sqlSession.close();
    }
}

执行此测试程序,输出日志如下。

调试 [main] - ==> 准备:插入 sys_user(id, user_name, user_password, user_email, user_info, head_img, create_time) 值 (?,?,?,?,?,?,?)

DEBUG [main] - ==> 参数:null, test1(String), 123456(String), test@mybatis.tk(String), info test(String), java.io.ByteArrayInputStream@544a2ea6(ByteArrayInputStream) , 2019- 07-02 13:09:07.822(Timestamp)

DEBUG [main] - 准备:INSERT INTO sys_user(user_name, user_password, user_email, user_info, head_img, create_time) VALUES (?,?,?,?,?,?)

DEBUG [main] - ==> 参数:test1(String)、123456(String)、test@mybatis.tk(String)、info test(String)、java.io.ByteArrayInputStream@544a2ea6(ByteArrayInputStream)、2019-07-02 14:02 :22.506(Timestamp)

DEBUG [main] - 准备: UPDATE sys_user SET user_name = ?, user_password = ?, user_email = ?, user_info = ?, head_img = ?, create_time = ? WHERE id = ?

DEBUG [main] - ==> 参数:admin_test(String), 123456(String), admin_test@mybatis.tk(String), test info(String), java.io.ByteArrayInputStream@78186a70( ByteArrayInputStream), 2019-07-02 14:57 :34.792(时间戳), 1(长)

DEBUG [主要] - 准备:从 sys_user WHERE id = ?

DEBUG [main] - ==> 参数:1(长)

DEBUG [main] -

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门