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。那么就不用手动提交事务了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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语句:使用策略模式优化代码结构