4.mybatis之更新相关操作

上一篇我们查询了数据。这次我们往表中插入、更新、删除几条数据玩玩。还是一样,我们在mapper接口中新建一个方法,用来插入数据,就叫insert。但是大家思考一下,我们插入是需要参数的,所以这个参数我们直接用实体类来做参数。

insert(Student student),注意,我们同一个mapper接口中的方法名称是不允许重复的,也就是说不能重载,这个以后再解释。好的,还是直接上代码大家更能看的更清晰:

/**
* mapper接口的方法名称不能重复
*/
public interface StudentMapper {

    /**
     * 查询所有
     * @return
     */
    List<Student> selectAll();

    /**
     * 插入一条记录
     * @param student
     */
    void insert(Student student);
}

对应的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">
<!--这里的namespace取值就是接口全限定类目-->
<mapper namespace="com.bky.mapper.StudentMapper">
    <insert id="insert">
        <!--这里我id设置的自动递增,所以不用插入id
        当我们的接口请求参数是一个实体类,那么我们要取实体类的值就用
        #{}来取,非常方便
        -->
        insert into student(username,gender) values (#{username},#{gender})
    </insert>
    <!--    id属性值要和接口方法名一样(必须),resulType是查询后映射的实体类-->
    <select id="selectAll" resultType="com.bky.entity.Student">
        select *
        from student
    </select>
</mapper>

测试类:

public class Test2 {
    public static void main(String[] args) throws IOException {
        InputStream input = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(input);
        SqlSession sqlSession = factory.openSession();

        StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
        Student student = new Student();
        student.setGender("男");
        student.setUsername("郭富城");
        studentMapper.insert(student);
        sqlSession.commit();//提交事物,要不然无法插入
    }
}

这样我们就将数据插入进去了。这种插入还是比较简单的。那么实际开发中,经常要获取插入数据的id,这个也简单,直接在xml总配置即可:

<!--    插入后,将id自动映射到实体类中
keyProperty就是对应的我们实体类的id字段
-->
    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
        <!--这里我id设置的自动递增,所以不用插入id
        当我们的接口请求参数是一个实体类,那么我们要取实体类的值就用
        #{}来取,非常方便
        -->
        insert into student(username,gender) values (#{username},#{gender})
    </insert>

测试:

对于mybatis的更新(insert,update,delete)相关操作呢,一定要提交事物,否则数据无法更新。那么我们也可以自动开启事物,那就是用 

SqlSession sqlSession = factory.openSession(true);

这个api来获取sqlSession。那么就不用手动提交事务了。

posted @   诸葛匹夫  阅读(86)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示