「Mybatis实战二」:Mybatis实现数据新增详析

一、前言

​ 本文将在 Mybatis初体验:一小时从入门到运行你的第一个应用 所构建的基础代码结构之上,并实现利用Mybatis进行数据新增的操作。

二、代码演示

1、修改映射文件UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="user">
    <!--  查询所有用户  -->
    <select id="findAll" resultType="domain.User">
        select *
        from user
    </select>

    <!--新增用户-->
    <!--#{} : mybatis中的占位符,等同于JDBC中的
        parameterType :指定接收到的参数类型 -->
    <insert id="save" parameterType="domain.User">
        insert into user(username, birthday, sex, address)
        values (#{username}, #{birthday}, #{sex}, #{address})
    </insert>
</mapper>

2、修改测试类

package test;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import domain.User;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class MybatisTest {

    @Test
    public void test() throws IOException {
        //加载核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");

        //获取SqlSessionFactory工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);

        //获取SqlSession会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<User> list = sqlSession.selectList("user.findAll");
        for (User user : list) {
            System.out.println(user);
        }

        //释放资源
        sqlSession.close();


    }
    
    @Test
    public void testInsert() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        
        //执行更新
        User user = new User();
        user.setUsername("lily");
        user.setBirthday(new Date());
        user.setSex("女");
        user.setAddress("杭州");
        sqlSession.insert("user.save", user);

        //DML语句需要手动提交事务
        sqlSession.commit();
        
        sqlSession.close();

    }
        
}

注意:这里插入会出现乱码问题,需要确保数据库连接字符串中指定了正确的字符编码,在连接URL后添加 ?characterEncoding=UTF-8

3、测试结果

在这里插入图片描述


总结

  • 插入语句使用insert标签

  • 在映射文件中使用parameterType属性指定要插入的数据类型

  • Sql语句中使用#{实体属性名}方式引用实体中的属性值

  • 插入操作使用的API是sqlSession.insert(“命名空间.id”,实体对象);

  • 在映射文件中使用parameterType属性指定要插入的数据类型

  • Sql语句中使用#{实体属性名}方式引用实体中的属性值

  • 插入操作使用的API是sqlSession.insert(“命名空间.id”,实体对象);

  • 插入操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,即 sqlSession.commit()

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值