03 映射文件-增删改查
增删改查
<?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="com.atguigu.mybatis.dao.EmployeeMapper">
<!--
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id
-->
<select id="selectEmp" resultType="com.atguigu.mybatis.bean.Employee">
select id,last_name lastName,email,gender from tbl_employee where id = #{id}
</select>
<!-- public void addEmp(Employee employee);-->
<!-- parameterType 可以省略
mysql支持自增主键,自增主键值的获取,mybatis也是利用statement.getGeneratedKeys()
useGeneratedKeys="true" 使用自增主键获取主键值策略
keyProperty:指定对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给javaBean的哪个属性
-->
<insert id="addEmp" parameterType="com.atguigu.mybatis.bean.Employee" useGeneratedKeys="true" keyProperty="id">
insert into tbl_employee(last_name,email,gender)
values (#{lastName},#{email},#{gender})
</insert>
<!--
Oracle不支持自增:Oracle使用序列来模拟自增
每次插入的数据的主键是从序列中拿到的值,如何获取到这个值
-->
<insert id="addEmp" databaseId="oracle">
<!-- keyProperty:查处的主键值封装给javaBean的哪个属性
order:当前 sql 在插入sql之前运行
resultType:返回值类型
BEFORE运行顺序:
先运行selectKey查询id的sql,查出id值封装给javaBean的id属性
在运行插入的sql,就可以取出id属性的值
AFTER运行顺序
先运行插入的sql,从序列中取出新值作为id
再运行selectKey 查询id 的 key
-->
<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
<!-- 编写查询主键的sql语句-->
select EMPLOYEES_SEQ.nextval from dual
</selectKey>
<!-- 插入时的主键是从序列中拿到的-->
isnert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL)
values(#{id},#{lastName},#{email},#{gender})
</insert>
<!-- public void updateEmp(Employee employee);-->
<update id="updateEmp">
update tbl_employee
set last_name = #{lastName},gender=#{gender},email=#{email}
where id = #{id}
</update>
<!-- public void deleteEmpById(Integer id);-->
<delete id="deleteEmpById">
delete from tbl_employee where id=#{id}
</delete>
</mapper>
//测试增删改
/*
1. mybatis 允许增删改直接定义以下类型返回值
Long Boolean Integer
2. 需要手动提交数据
sqlSessionFactory.openSession()===> 需要手动提交
sqlSessionFactory.openSession(true)===> 自动提交
*/
@Test
public void test03() throws IOException {
String resources = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resources);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession openSession = sqlSessionFactory.openSession();
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
//测试添加
// Employee employee= new Employee(null,"jerry","jerry@guigu.com","1");
// mapper.addEmp(employee);
//测试修改
// Employee employee= new Employee(1,"jerry","jerry@guigu.com","0");
// mapper.updateEmp(employee);
//测试删除
mapper.deleteEmpById(1);
//手动提交
openSession.commit();
} finally {
openSession.close();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)