Mybatis 映射文件
Mapper 就是“映射”的意思,Mapper 文件时 Mybatis 中的 SQL 语句的配置文件,其会在运行时加载 SQL 语句并映射相应参数。在 Mybatis 的全局配置文件中,其中最后一项就是 mapper 文件的资源路径的配置,因为创建 SqlSessionFactory 时会加载全局配置文件,这说明 Mapper 映射文件会在创建伊始就会被加载了。
一、映射文件标签
Mapper 映射文件,主要就是用来配置 SQL 映射语句的,根据不同的 SQL 语句性质,要使用不同的标签来包裹。
标签名称 | 标签作用 |
---|---|
insert | 用来映射插入语句 |
update | 用来映射更新语句 |
delete | 用来映射删除语句 |
select | 用来映射查询语句 |
resultMap | 自定义结果集映射 |
sql | 配置可以被其他语句引用的SQL语句块 |
cache | 命名空间的二级缓存设置 |
cache-ref | 其他命名空间缓存配置的引用 |
1.1 insert 标签
EmployeeMapper.xml
<insert id="addEmp">insert into tbl_employee (id, last_name, email, gender)values (#{id}, #{lastName}, #{email}, #{gender})</insert>
接口 EmployeeMapper.java
package com.example.mapper;import com.example.pojo.Employee;import java.util.List;public interface EmployeeMapper {public boolean addEmp(Employee employee);
}
测试方法:
@Test
public void test04() throws IOException {SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();SqlSession sqlSession = sqlSessionFactory.openSession();try{EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);Employee employee = new Employee();employee.setLastName("zhangsan");employee.setEmail("zhangsan@123.com");employee.setGender("0");boolean addEmp = mapper.addEmp(employee);System.out.println(addEmp);// 需手动提交sqlSession.commit();} finally {sqlSession.close();}
}
控制台结果:
[main] [com.example.mapper.EmployeeMapper.addEmp]-[DEBUG] ==> Preparing: insert into tbl_employee (id, last_name, email, gender) values (?, ?, ?, ?);
[main] [com.example.mapper.EmployeeMapper.addEmp]-[DEBUG] ==> Parameters: null, zhangsan(String), zhangsan@123.com(String), 0(String)
[main] [com.example.mapper.EmployeeMapper.addEmp]-[DEBUG] <== Updates: 1
true
1.2 update 标签
EmployeeMapper.xml
<update id="updateEmp">update tbl_employee setlast_name=#{lastName},email=#{email},gender=#{gender}where id=#{id}
</update>
接口 EmployeeMapper.java
package com.example.mapper;import com.example.pojo.Employee;import java.util.List;public interface EmployeeMapper {public Integer updateEmp(Employee employee);
}
测试方法:
@Test
public void test05() throws IOException {SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();SqlSession sqlSession = sqlSessionFactory.openSession();try{EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);Employee employee = mapper.getEmpById(8);employee.setLastName("lisi");employee.setEmail("lisi@123.com");employee.setGender("0");Integer updateEmp = mapper.updateEmp(employee);System.out.println(updateEmp);sqlSession.commit();} finally {sqlSession.close();}
}
控制台结果:
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] ==> Preparing: select * from tbl_employee where id = ?
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] ==> Parameters: 8(Integer)
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] <== Total: 1
[main] [com.example.mapper.EmployeeMapper.updateEmp]-[DEBUG] ==> Preparing: update tbl_employee set last_name=?,email=?,gender=? where id=?
[main] [com.example.mapper.EmployeeMapper.updateEmp]-[DEBUG] ==> Parameters: lisi(String), lisi@123.com(String), 0(String), 8(Integer)
[main] [com.example.mapper.EmployeeMapper.updateEmp]-[DEBUG] <== Updates: 1
1
1.3 delete 标签
EmployeeMapper.xml
<delete id="deleteEmpById">delete from tbl_employee where id = #{id}
</delete>
接口 EmployeeMapper.java
package com.example.mapper;import com.example.pojo.Employee;import java.util.List;public interface EmployeeMapper {public void deleteEmpById(Integer id);
}
测试方法:
@Testpublic void test06() throws IOException {SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();SqlSession sqlSession = sqlSessionFactory.openSession();try{EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);mapper.deleteEmpById(7);sqlSession.commit();} finally {sqlSession.close();}}
控制台结果:
[main] [com.example.mapper.EmployeeMapper.deleteEmpById]-[DEBUG] ==> Preparing: delete from tbl_employee where id = ?
[main] [com.example.mapper.EmployeeMapper.deleteEmpById]-[DEBUG] ==> Parameters: 7(Integer)
[main] [com.example.mapper.EmployeeMapper.deleteEmpById]-[DEBUG] <== Updates: 1
1.4 select 标签
EmployeeMapper.xml
<select id="getEmpById" resultType="employee">select * from tbl_employee where id = #{id}
</select>
接口 EmployeeMapper.java
package com.example.mapper;import com.example.pojo.Employee;import java.util.List;public interface EmployeeMapper {public Employee getEmpById(Integer id);
}
测试方法:
@Test
public void test03() throws IOException {SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();SqlSession sqlSession = sqlSessionFactory.openSession();try{EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);Employee emp = mapper.getEmpById(1);System.out.println(emp);} finally {sqlSession.close();}}
控制台结果:
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] ==> Preparing: select * from tbl_employee where id = ?
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] ==> Parameters: 1(Integer)
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] <== Total: 1
Employee{id=1, lastName='tom', email='tom@123.com', gender='0'}
总结:
关于增删改:
- Mybatis 允许增删改直接定义以下类型返回值:Integer、Long、Boolean、void
- 需要手动提交数据 sqlSession.commit()。
sqlSessionFactory.open() 为手动提交
sqlSessionFactory.open(true) 为自动提交
二、标签属性含义
在insert、update、delete 及 select 配置标签中可以配置很多属性,具体可以配置的属性如下:
<select id="selectEmployee" parameterType="int"resultType="hashmap"resultMap="employeeResultMap"flushCache="false"useCache="true"timeout="10000"fetchSize="256"statementType="PREPARED"resultSetType="FORWARD_ONLY">
</select><insert id="insertEmployee"parameterType="com.example.pojo.Employee"flushCache="true"statementType="PREPARED"keyProperty=""keyColumn=""useGeneratedKeys="true"timeout="20">
</insert><update id="updateEmployee"parameterType="com.example.pojo.Employee"flushCache="true"statementType="PREPARED"timeout="20"></update><delete id="updateEmployee"parameterType="com.example.pojo.Employee"flushCache="true"statementType="PREPARED"timeout="20">
</delete>
每一个属性所代表的含义如下所示:
属性名 | 含义 | 所属标签 |
---|---|---|
id | SQL 映射配置的唯一标识,可以代表 SQL 配置 | select¦insert¦update¦delete |
parameterType | 可选属性,用来传入 SQL 配置中需要的参数类型的类名或别名 | select¦insert¦update¦delete |
resultType | 可选属性,用来配置 SQL 语句执行后期望得到的结果数据类型,配置的是结果类型的类名或别名。此属性不能与 resultMap 同时使用 | select |
resultMap | 用来引入外部结果集配置,该结果集配置对应 SQL 结果中的每个字段名称,即将映射到 Java 对象中的哪个属性。此属性不能与 resultType 同时使用 | select |
flushCache | 设置语句调用时,是否清空本地缓存和二级缓存,默认为false | select¦insert¦update¦delete |
useCache | 设置语句调用时,执行结果是否保存二级缓存,对 select 元素默认为 false | select |
timeout | 在抛出异常前,驱动程序等待数据库回应的最大秒数 | select¦insert¦update¦delete |
fetchSize | 设置驱动程序每次批量返回结果的行数 | select |
statementType | 设置 Mybatis 的 Statement 类型。可以配置为 STATEMENT、PREPARED 或 CALLABLE 中的一个,表示使用 Statement、PreparedStatement 或 CallableStatement 类型。默认配置为 PREPARED | select¦insert¦update¦delete |
resultSetType | 设置 Mybatis 的结果集类型。可以配置为 FORWARD_ONLY 、SCROLL_SENSITIVE 或 SCROLL_INSENSITIVE 中的一个。默认无配置 | select |
databaseId | 在配置 databaseIDProvider 的情况下,Mybatis 会加载所有不带 databaseId 或者匹配当前 databaseId 的语句 | select¦insert¦update¦delete |
resultSets | 当有多个结果集的时候使用,会为 SQL 执行后返回的每个结果集设定一个名称,以逗号分隔 | select |
useGeneratedKeys | 设置 Mybatis 使用 JDBC 的 getGeneratedKeys 方法来获取有数据库内部生成的主键(自增主键)。默认值为 false | insert¦update |
keyProperty | 代表主键。Mybatis 会将生成的主键赋给这个列。联合主键使用逗号隔开 | insert¦update |
keyColumn | 仅对特定数据库生效,当主键列不是表中的第一列时需要设置该属性。如果希望得到多个生成的列,也可以是以逗号分隔的属性名称列表 | insert¦update |
Mybatis 映射文件相关推荐
- MyBatis映射文件(一)
目录 一.MyBatis映射文件 1.insert.update.delete元素 2.主键生成方式 3.参数(Parameters)传递 (1)单个参数 (2)多个参数 (3)命名参数 (4)POJ ...
- 3 了解MyBatis映射文件
3.1 认识映射文件: 介绍: MyBatis的映射文件主要用于定义业务操作命令,实现对象与数据表字段的映射,并控制对最终结果的封装.MyBatis是针对SQL构建,相对具有相同功能的JDBC ...
- Mybatis映射文件!CDATA[[]] 转义问题
有没有觉得在mybatis映射文件写>(大于),<(小于)的时候贼麻烦,还得把"<",">"换位为"<", & ...
- Mybatis映射文件SQL语句模糊查询,#和$的区别和注意事项
Mybatis映射文件SQL语句模糊查询 1. "%"#{value}"%" 在参数中不需要添加 %_ 推荐使用 2. '%${value}%' 在参数中不需要 ...
- MyBatis映射文件如何给数据库的int类型字段“插入”string类型记录
MyBatis映射文件如何给数据库的int类型字段"插入"string类型记录. 数据库中对应字段名称和类型如下: 给数据库的int类型字段"插入"string ...
- 利用Maven逆向工程生成mybatis映射文件
一,pom.xml 注意修改逆向工程配置文件的路径 <build><pluginManagement><plugins><plugin><grou ...
- oracle 监听拒绝连接,报mybatis映射文件错误Listener refused the connection with the following error: ORA-12519, TNS
以下错误是:数据库连接数问题. 仔细检查映射文件.xml文件正确 后来发现是数据库最大连接数已满 修改之alter system set processes = 4000 scope = spfile ...
- MyBatis映射文件1(增删改、insert获取自增主键值)
增删改 Mybatis为我们提供了<insert>.<update>.<delete>标签来对应增删改操作 在接口中写增删改的抽象方法 void addEmp(Em ...
- 配置MyBatis映射文件以及核心配置文件模板
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.db.properties模板 二.映射文件mapper.xml模板 三.---------MyBatis核心文件 ...
最新文章
- 修改 Docker 的默认存储路径
- .Net/C# 实现: FlashFXP 地址簿中站点密码的加解密算法
- QML 性能优化建议(二)
- stm32 stm8 产品型号
- jquery实现回车键触发事件
- scn exercise view.setModel will trigger binding creation in Fiori
- 11G Oracle RAC添加新表空间时数据文件误放置到本地文件系统的修正
- 怎样能确保计算机安全,如何确保电脑安全
- python排序算法实现_排序算法整理(Python实现)
- 获取和设置消息队列的属性msgctl,删除消息队列
- 从“挂科大王”到网络安全布道者,云舒的那些“面壁”时刻
- 局域网屏幕共享_教学一体机多屏共享
- 【渝粤教育】国家开放大学2019年春季 1366英语教学理论与实践 参考试题
- macOS SwiftUI 指示器组件规范之 02 评级指标 Rating Indicators
- php微信支付分取消订单,PHP实现微信支付和退款
- YUI中一些方法总结
- 【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)
- 基因数据处理52之cs-bwamem集群版运行(1千万条100bp的reads)
- Mac下ImageMagick安装(libpng)
- Java使用javax.mail.jar发送邮件并允许发送附件
热门文章
- vsto画箱体图 箱线图 xlboxwhisker
- 【转载】Oracle 大字段处理
- Android 无标题 全屏设置
- 判断一点是否在多边形内(附Java实现代码)
- 《C++ Primer》读书笔记——第十三章_拷贝控制
- ChatGPT让我变成了“超人”-如何提升团队30%效能质量提高100%的阶段性总结报告
- uni-app打包后ios证书申请和ios应用市场发布(windows主机发布)
- What are 20 questions to detect fake data scientists?
- 《变形金刚2》剧情细节大揭秘(100%剧透!)
- pta厘米换算英尺英寸