Mybatis之核心配置文件详解、默认类型别名、Mybatis获取参数值的两种方式

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
注册配置 MSE Nacos/ZooKeeper,118元/月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 【1月更文挑战第3天】一、核心配置文件详解二、默认的类型别名三、MyBatis的增删改查四、MyBatis获取参数值的两种方式1、单个字面量类型的参数2、多个字面量类型的参数3、map集合类型的参数4、实体类类型的参数5、使用@Param标识参数


学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:

想系统/深入学习某技术知识点…

一个人摸索学习很难坚持,想组团高效学习…

想写博客但无从下手,急需写作干货注入能量…

热爱写作,愿意让自己成为更好的人…

文章目录

前言

一、核心配置文件详解

二、默认的类型别名

三、MyBatis的增删改查

四、MyBatis获取参数值的两种方式

1、单个字面量类型的参数

2、多个字面量类型的参数

3、map集合类型的参数

4、实体类类型的参数

5、使用@Param标识参数

总结


前言

一、核心配置文件详解

二、默认的类型别名

三、MyBatis的增删改查

四、MyBatis获取参数值的两种方式

1、单个字面量类型的参数

2、多个字面量类型的参数

3、map集合类型的参数

4、实体类类型的参数

5、使用@Param标识参数


一、核心配置文件详解

核心配置文件中的标签必须按照固定的顺序(有的标签可以不写,但顺序一定不能乱):

properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、reflectorFactory、plugins、environments、databaseIdProvider、mappers

<?xmlversion="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//MyBatis.org//DTD Config 3.0//EN""http://MyBatis.org/dtd/MyBatis-3-config.dtd"><configuration><!--引入properties文件,此时就可以${属性名}的方式访问属性值--><propertiesresource="jdbc.properties"></properties><settings><!--将表中字段的下划线自动转换为驼峰--><settingname="mapUnderscoreToCamelCase"value="true"/><!--开启延迟加载--><settingname="lazyLoadingEnabled"value="true"/></settings><typeAliases><!--typeAlias:设置某个具体的类型的别名属性:type:需要设置别名的类型的全类名alias:设置此类型的别名,且别名不区分大小写。若不设置此属性,该类型拥有默认的别名,即类名--><!--<typeAlias type="com.atguigu.mybatis.bean.User"></typeAlias>--><!--<typeAlias type="com.atguigu.mybatis.bean.User" alias="user"></typeAlias>--><!--以包为单位,设置改包下所有的类型都拥有默认的别名,即类名且不区分大小写--><packagename="com.atguigu.mybatis.bean"/></typeAliases><!--environments:设置多个连接数据库的环境属性:default:设置默认使用的环境的id--><environmentsdefault="mysql_test"><!--environment:设置具体的连接数据库的环境信息属性:id:设置环境的唯一标识,可通过environments标签中的default设置某一个环境的id,表示默认使用的环境--><environmentid="mysql_test"><!--transactionManager:设置事务管理方式属性:type:设置事务管理方式,type="JDBC|MANAGED"type="JDBC":设置当前环境的事务管理都必须手动处理type="MANAGED":设置事务被管理,例如spring中的AOP--><transactionManagertype="JDBC"/><!--dataSource:设置数据源属性:type:设置数据源的类型,type="POOLED|UNPOOLED|JNDI"type="POOLED":使用数据库连接池,即会将创建的连接进行缓存,下次使用可以从缓存中直接获取,不需要重新创建type="UNPOOLED":不使用数据库连接池,即每次使用连接都需要重新创建type="JNDI":调用上下文中的数据源--><dataSourcetype="POOLED"><!--设置驱动类的全类名--><propertyname="driver"value="${jdbc.driver}"/><!--设置连接数据库的连接地址--><propertyname="url"value="${jdbc.url}"/><!--设置连接数据库的用户名--><propertyname="username"value="${jdbc.username}"/><!--设置连接数据库的密码--><propertyname="password"value="${jdbc.password}"/></dataSource></environment></environments><!--引入映射文件--><mappers><!-- <mapper resource="UserMapper.xml"/> --><!--以包为单位,将包下所有的映射文件引入核心配置文件注意:1. 此方式必须保证mapper接口和mapper映射文件必须在相同的包下2. mapper接口要和mapper映射文件的名字一致--><packagename="com.atguigu.mybatis.mapper"/></mappers></configuration>

二、默认的类型别名

三、MyBatis的增删改查

  1. 添加
<!--intinsertUser();--><insertid="insertUser">insertintot_uservalues(null,'admin','123456',23,'男','12345@qq.com')
</insert>
  1. 删除
<!--intdeleteUser();--><deleteid="deleteUser">deletefromt_userwhereid=6</delete>
  1. 修改
<!--int updateUser();--><update id="updateUser">update t_user set username ='张三'where id =5</update>
  1. 查询一个实体类对象
<!--UsergetUserById();--><selectid="getUserById"resultType="com.atguigu.mybatis.bean.User">select*fromt_userwhereid=2</select>
  1. 查询集合
<!--List<User>getUserList();--><selectid="getUserList"resultType="com.atguigu.mybatis.bean.User">select*fromt_user</select>
  • 注意:
  1. 查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系
  • resultType:自动映射,用于属性名和表中字段名一致的情况
  • resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况
  1. 当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值

四、MyBatis获取参数值的两种方式

  • MyBatis获取参数值的两种方式:${}和#{}
  • ${}的本质就是字符串拼接,#{}的本质就是占位符赋值
  • ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号

1、单个字面量类型的参数

  • 若mapper接口中的方法参数为单个的字面量类型,此时可以使用${}和#{}以任意的名称(最好见名识意)获取参数的值,注意${}需要手动加单引号
<!--UsergetUserByUsername(Stringusername);--><selectid="getUserByUsername"resultType="User">select*fromt_userwhereusername=#{username}
</select>
<!--UsergetUserByUsername(Stringusername);--><selectid="getUserByUsername"resultType="User">select*fromt_userwhereusername='${username}'</select>

2、多个字面量类型的参数

  • 若mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个map集合中
  1. 以arg0,arg1…为键,以参数为值;
  2. 以param1,param2…为键,以参数为值;
  • 因此只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号。
  • 使用arg或者param都行,要注意的是,arg是从arg0开始的,param是从param1开始的
<!--UsercheckLogin(Stringusername,Stringpassword);--><selectid="checkLogin"resultType="User">select*fromt_userwhereusername=#{arg0} andpassword=#{arg1}  
</select>
<!--UsercheckLogin(Stringusername,Stringpassword);--><selectid="checkLogin"resultType="User">select*fromt_userwhereusername='${param1}'andpassword='${param2}'</select>

3、map集合类型的参数

  • 若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在map中只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号
<!--UsercheckLoginByMap(Map<String,Object>map);--><selectid="checkLoginByMap"resultType="User">select*fromt_userwhereusername=#{username} andpassword=#{password}
</select>
@TestpublicvoidcheckLoginByMap() {
SqlSessionsqlSession=SqlSessionUtils.getSqlSession();
ParameterMappermapper=sqlSession.getMapper(ParameterMapper.class);
Map<String,Object>map=newHashMap<>();
map.put("usermane","admin");
map.put("password","123456");
Useruser=mapper.checkLoginByMap(map);
System.out.println(user);
}

4、实体类类型的参数

  • 若mapper接口中的方法参数为实体类对象时此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号
<!--intinsertUser(Useruser);--><insertid="insertUser">insertintot_uservalues(null,#{username},#{password},#{age},#{sex},#{email})
</insert>
@TestpublicvoidinsertUser() { 
SqlSessionsqlSession=SqlSessionUtils.getSqlSession();
ParameterMappermapper=sqlSession.getMapper(ParameterMapper.class);
Useruser=newUser(null,"Tom","123456",12,"男","123@321.com");
mapper.insertUser(user);
}

5、使用@Param标识参数

  • 可以通过@Param注解标识mapper接口中的方法参数,此时,会将这些参数放在map集合中
  1. 以@Param注解的value属性值为键,以参数为值;
  2. 以param1,param2…为键,以参数为值;
  • 只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号
<!--UserCheckLoginByParam(@Param("username") Stringusername, @Param("password") Stringpassword);--><selectid="CheckLoginByParam"resultType="User">select*fromt_userwhereusername=#{username} andpassword=#{password}
</select>
@TestpublicvoidcheckLoginByParam() {
SqlSessionsqlSession=SqlSessionUtils.getSqlSession();
ParameterMappermapper=sqlSession.getMapper(ParameterMapper.class);
mapper.CheckLoginByParam("admin","123456");
}
  • 建议分成两种情况进行处理
  1. 实体类类型的参数
  2. 使用@Param标识参数

总结

以上就是Mybatis之核心配置文件详解、默认类型别名、Mybatis获取参数值的两种方式的相关知识点,希望对你有所帮助。

积跬步以至千里,积怠惰以至深渊。时代在这跟着你一起努力哦!

相关文章
|
7月前
|
XML Java 数据库连接
mybatis环境搭建步骤(含配置文件代码)
mybatis环境搭建步骤(含配置文件代码)
|
1月前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
1月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
6月前
|
SQL Java 数据库连接
MYBATIS获取参数值
MYBATIS获取参数值
MYBATIS获取参数值
|
6月前
|
XML Java 数据库连接
MyBatis入门——MyBatis XML配置文件(3)
MyBatis入门——MyBatis XML配置文件(3)
96 6
|
2月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
53 10
|
3月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
2月前
|
SQL Java 数据库连接
Mybatis中传入不同类型的值处理方案
这篇文章讲述了在Mybatis中如何处理传入不同类型参数的情况,包括单个值、列表及Map等,并提供了相应的XML映射和Java代码示例。
93 0
|
5月前
|
Java 数据库连接 mybatis
Mybatis查询传递单个参数和传递多个参数用法
Mybatis查询传递单个参数和传递多个参数用法
80 11
|
5月前
|
SQL
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
下一篇
DataWorks