mapper.xml中细节

直接上代码:

接口中的抽象方法:

List<Person> findAll();

Person findOneById(Long id);

Integer findCountBySex(Boolean sex);

映射文件中对应的sql:

<?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="cn.itsource.mapper.PersonMapper">
	<select id="findAll" resultType="cn.itsource.domain.Person">
		select * from person 
	</select>

	<select id="findOneById" resultType="Person">
		select * from person where id = #{id}
	</select>
	
	<select id="findCount" resultType="int">
		select count(id) from person where sex = #{sex}
	</select>
</mapper>

你品,你细品~~~

一、属性问题
1、接口中的参数一般都是一个,
因为一般当参数个数>=2时,都会把它们封装为实体类,然后让其作为参数,在xml文件中通过.来获取值;
如果又需要传递多个对象,那么就把它们放在集合(常用List)或数组中,然后其再作为参数,myBatis会把它变成map。
总之,当只有一个参数时,标签不用写parameterType(不写一定不会错,写了反而可能会错),
并且#{id}中的id也可以随便写,写成id是为了见名知意
2、其次,sql操作的返回值resultType,当然增删改是没有返回值的就不用说,
对于查询来说,最容易混淆的就是,当查询结果为多条记录时,比如接口中的第一个方法,它的返回值是list,所以很可能mapper中的resultType就写成list了,
但正确的就应该写实体类的类型,因为myBatis会自动把多条记录放入集合中

二、别名问题
1、parameterType或者resultType本该写对应类型的全限定名,比如java.lang.Long,但是好长哦。。。所以myBatis给一些常用类就取了别名:
在这里插入图片描述
别名是不区分大小写的,比如long、Long、lOnG,都是表示Long,所以为什么基本类型前面要加_
2、自己写的类也是可以起别名的,是要在配置文件mybatis-config.xml里添加typeAlias标签

<!-- 根标签 -->
<configuration>
	<!-- 获取到jdbc.properties中的数据(四大金刚) -->
	<properties resource="jdbc.properties" />
	
	 <!-- 别名的配置,这里注意,标签是有顺序的,百度叭~,或者写错顺序,xml文件会有错误提示;当有properties时,typeAliases必须在其后 -->
	 <typeAliases>
		<!-- 单个配置 -->
		<typeAlias type="cn.itsource.domain.Dept" alias="Dept" />
		
		<!-- 直接配置实体类的包:别名就是对应类名或类名首字母小写 -->
		<package name="cn.itsource.domain" />
	</typeAliases>
	
</configuration>

但是呢,并不提倡给自己写的类用别名,
因为项目是团队开发,可能多个包下面有相同的实体类名,这样容易造成混淆,
所以最好还是用类的全限定名

### MyBatis Mapper.xml 文件中的大小写敏感性解决方案 在 MyBatis 的 `mapper.xml` 文件中,处理字段名的大小写敏感问题是开发人员经常遇到的一个挑战。以下是针对该问题的具体分析和解决方案。 #### 1. 映射 MySQL 数据库表时的大小写一致性 当使用 `selectMap` 方法查询时,如果指定的 `mapKey` 参数与 `Mapper.xml` 中定义的结果集字段名称不匹配,则可能导致返回结果为空键值的情况[^1]。这是因为 MyBatis 默认情况下区分大小写,因此需要确保 SQL 查询语句中的列名与 Java 对象属性名严格对应。 可以通过以下方法来解决此问题: - **设置数据库字段为小写** 如果可能的话,在创建数据库表结构时统一采用小写的字段命名方式,并保持前后端的一致性。 - **配置 MyBatis 属性 `mapUnderscoreToCamelCase`** 在 MyBatis 配置文件 (`mybatis-config.xml`) 或 Spring Boot 应用程序中启用驼峰命名转换功能: ```xml <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> ``` 此选项可以自动将下划线分隔的字段名(如 `create_time`)映射到对应的驼峰命名风格的 Java 属性(如 `createTime`)。这有助于减少手动调整的工作量[^3]。 #### 2. 使用别名解决字段名差异 对于无法更改数据库设计或者希望保留原始字段名的情况下,可以在 SQL 查询语句中通过 AS 关键字为每列表达式提供别名。例如: ```sql <select id="findUserById" parameterType="int" resultType="com.example.User"> SELECT user_id as userId, USER_NAME as userName FROM users WHERE user_id = #{id} </select> ``` 上述代码片段展示了如何利用别名为实际列赋予新的逻辑名称以便更好地适配实体类成员变量的名字模式。 #### 3. XML 转义字符的应用注意事项 需要注意的是,在编写复杂的条件判断或涉及特殊符号的操作符表达式时,应当注意正确转义这些符号以免引起解析错误。比如小于号 `<`, 大于号 `>`, 单引号 `'`, 双引号 `"`, 等都需要按照标准方式进行编码替换[^4]: - 小于号:`<` 替换为 `<` - 大于号:`>` 替换为 `>` 另外也可以考虑使用 CDATA 块包裹复杂SQL字符串从而避免额外的手动转义操作[^2]: ```xml <if test="age != null and age > 0"> <![CDATA[ AND AGE >= #{age} ]]> </if> ``` 综上所述,通过对数据库字段命名规范、MyBatis 自身特性以及XML文档内部细节的理解应用,能够有效规避因大小写不同而引发的各种潜在隐患。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值