MyBatis中映射文件的使用案例代码
作者:一天睡20个小时 发布时间:2021-09-02 23:55:41
Mapper 就是“映射”的意思,Mapper 文件时 Mybatis 中的 SQL 语句的配置文件,其会在运行时加载 SQL 语句并映射相应参数。在 Mybatis 的全局配置文件中,其中最后一项就是 mapper 文件的资源路径的配置,因为创建 SqlSessionFactory 时会加载全局配置文件,这说明 Mapper 映射文件会在创建伊始就会被加载了。本文重点讲解MyBatis映射文件的使用。
MyBatis中映射文件的使用
1、配置核心文件
①引入映射文件
首先我们得在核心配置文件中配置mappers
,引入映射文件所在的包
<mappers>
<package name="com.ch.mybatis.mapper"></package>
</mappers>
这里必须满足两个条件:
接口和映射文件所在的包必须一致
接口的名字和映射文件的名字必须一致
②配置typeAliases
typeAliases
:设置类型别名,即为某个具体的类型设置一个别名。在MyBatis的范围中,就可以使用别名表示一个具体的类型。
在核心配置文件中设置typeAliases
,在映射文件中则可以直接使用别名。
通过包设置类型别名,指定包下所有的类型将全部有用默认的别名,即类名且不区分大小写 。
要注意标签的先后顺序
<!--
标签的先后顺序
properties?,settings?,typeAliases?,typeHandlers?,
objectFactory?,objectWrapperFactory?,reflectorFactory?,
plugins?,environments?,databaseIdProvider?,mappers?
-->
<typeAliases>
<package name="com.ch.mybatis.pojo"></package>
</typeAliases>
③配置映射文件
namespace
接口的全类名和映射文件namespace
一致。
<mapper namespace="com.ch.mybatis.mapper.userMapper">
</mapper>
2、MyBatis的增删改查
创建数据表
复制进MySQL
数据库中运行即可
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`password` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`gender` char(2) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Compact;
SET FOREIGN_KEY_CHECKS = 1;
工具类
创建一个工具类,每次测试就不用去重新写,直接调用获取返回值即可
public static SqlSession getSqlSession() {
SqlSession sqlSession = null;
try {
//获取核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatis-config.xml");
//获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//根据核心配置文件对应的输入流获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取SqlSession对象 自动提交
sqlSession = sqlSessionFactory.openSession(true);
} catch (IOException e) {
e.printStackTrace();
}
return sqlSession;
}
添加
首先得在Mapper接口中创建方法
int insertUser();
在映射文件中使用
insert
标签,标签中的id
要与接口中的方法名保持一致。等调用接口中的方法,它会根据mapper接口的全类名找到映射文件,然后会根据我们调用的方法的方法名,来找到当前的sql
语句,然后获取当前的sql
来执行。
可以将接口的方法写在标签的上方,方便查看。
<!-- int insertUser(); -->
<insert id="insertUser">
insert into t_user
values (null, 'admin', '123456', 23, '男', '12345@qq.com')
</insert>
测试代码
public void testinsert(){
SqlSession sqlSession = sqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.insertUser();
sqlSession.close();
}
修改
<!-- void updateUser(); -->
<update id="updateUser">
update t_user set username='root',password='123'where id = 1
</update>
删除
<!-- void deleteUser(); -->
<delete id="deleteUser">
delete from t_user where id = 1
</delete>
查询
查询比较特殊除了得设置id还必须得设置另外一个参数resultType或resultMap
resultType:设置结果类型,即查询的数据要转换为的java的类型
resultMap:自定义映射,处理多对一或一对多的映射关系resultType中应该写实体类的全类名,但是在核心文件中配置了typeAliases,所以这里可以直接写实体类的名字不区分大小写
<!-- User selectUser();-->
<select id="selectUser" resultType="user">
select id, username, password, age, gender, email from t_user where id = 1
</select>
3、MyBatis获取参数值的两种方式
MyBatis获取参数值的两种方式:${}和#{}
${}的本质就是字符串拼接,#{}的本质就是占位符赋值
${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;
但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时, 可以自动添加单引号
单个字面量类型的参数
<!-- User getUserByUsername(String username); -->
<select id="getUserByUsername" resultType="user">
<!-- select * from t_user where username = #{username}-->
select * from t_user where username = '${username}'
</select>
mapper接口方法的参数为单个的字面量类型此时可以通过
#{}
和${}
以任意的内容获取参数值,一定要注意${}的单引号问题
多个字面量类型的参数
<!-- User chekLogin(String username , String password); -->
<select id="chekLogin" resultType="user">
<!-- select * from t_user where username = #{arg0} and password = #{arg1}-->
select * from t_user where username = '${param1}' and password = '${param2}'
</select>
mybatis会自动把当前参数放在一个Map集合中
放在Map集合中会以两种方式存储数据
①arg0,arg1…为键,以参数为值
②param1,param2…为键,以参数为值
map集合类型的参数
<!-- User chekLoginByMap(Map<String,Object> map);-->
<select id="chekLoginByMap" resultType="user">
select * from t_user where username = #{username} and password = #{password}
</select>
mapper接口方法的参数为map集合类型的参数
只需要通过#{}和${}范围map集合的键,
就可以获取相对于的值,一定要注意${}的单引号问题
测试代码
public void testChekLoginByMap() {
SqlSession sqlSession = sqlSessionUtil.getSqlSession();
userMapper mapper = sqlSession.getMapper(userMapper.class);
Map map = new HashMap<String, Object>();
map.put("username", "admin");
map.put("password", "123456");
User admin = mapper.chekLoginByMap(map);
System.out.println(admin);
}
实体类类型的参数
<!-- void selectUser(User User); -->
<insert id="selectUser">
insert into t_user values(null,#{username},#{password},#{age},#{gender},#{email})
</insert>
mapper接口方法的参数为实体类类型的参数
只需要通过#{}和${}访问实体类中的属性名,
就可以获取相对于的属性值,一定要注意${}的单引号问题
使用@Param标识参数
<!-- User chekLoginByUser(@Param("username") String username ,@Param("password") String password); -->
<select id="chekLoginByUser" resultType="user">
select * from t_user where username = #{username} and password = #{password}
</select>
可以在mapper接口将这些参数上设置@param注解
此时MyBatis会将这些参数放在map中,以@Param注解的value属性值为键,以参数为值;
来源:https://blog.csdn.net/m0_69044845/article/details/128894184
猜你喜欢
- ElGamal数字签名,供大家参考,具体内容如下一、实验目的学习ElGamal算法在数字签名方面的使用,掌握教科书版本的ElGamal数字签
- java获取系统路径字体、得到某个目录下的所有文件名、获取当前路径package com.liuxing.test;import java.
- java沙箱环境测试支付宝支付接口?准备工作,登陆支付宝开放平台,进入沙箱环境开放平台链接:https://developers.alipa
- Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,
- (注意:本文基于JDK1.8) 前言包括迭代器中的remove()方法,以及删除单个元素、删除多个元素、删除所有元素、删除不包含的
- 定义: SharedPreferences
- 自从SEOTcs系统11月份24日更新了一下SEO得分算法以来,一直困扰我的一个问题出现了,java的数据job任务,在执行过程中会经常报以
- 一、什么是热部署?热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。二、什么是SpringBoot热部署?SpringBoot
- 在开发Android应用程序中,经常会自定义View来实现各种各样炫酷的效果,在实现这吊炸天效果的同时,我们往往会定义很多attr属性,这样
- Java main 方法面试题的详细整理1.不用main方法如何定义一个类?不行,没有main方法我们不能运行Java类。在java 7之前
- Eureka注册的服务之间互相调用1.请求方启动类添加注解,扫描Eureka 中的全部服务@SpringBootApplication@En
- 创建类第一步新建一个java类QSV,构造函数传入需要解析的文件名称。public class QSV {private RandomAcc
- 1. 最小生成树连通图中的每一棵生成树 , 都是原图的极大无环子图 , 即: 从中删去任何一条边 , 生成树就不再连通;反之 , 在其中引入
- HashMap的get()方法的NullPointerException今天写代码发现一个 bug,HashMap的 get() 方法一直报
- Spring main方法调用Dao层和Service层的方法在web环境中,一般serviceImpl中的dao之类的数据库连接都由容器启
- Jetty和tomcat的比较Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。架
- 环境:Spring5.3.12.RELEASE。Spring 3引入了一个core.onvert包,提供一个通用类型转换系统。系统定义了一个
- 1)打开idea,开始创建SpringBoot项目2)选择 Spring Initializr ,选择合适的jdk版本,点击Next在操作到
- 详解 Corba开发之Java实现Service与Client1 概述
- 前言本文主要给大家介绍了关于Java读取二进制文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。读Hex写CS