JavaEE——MyBatis核心配置文件中的<SQL>和<resultMap>元素

<SQL>元素:

简单介绍:

<SQL>元素的主要作用是定义重复的SQL语句,它可以被包含在其他语句中,<SQL>语句可以被静态的(在加载参数时)参数化,<SQL>元素不同的属性值通过被包含的对象发生变化。

使用方法:

定义SQL语句片段:

<sql id=”sql片段唯一标识“ >SQL语句 />

使用SQL语句片段:

<include refid="sql片段唯一标识” />

代码实现:

除了直接使用<sql>片段,在<sql>片段中也可以引用另一个<sql>片段:

 

 使用<sql>片段也可以完成套娃操作,但是<sql>元素的主要作用还是将重复的sql语句提取出来,方便我们的减少重复代码的编写。

<resultMap>:自定义映射规则

简单介绍:

使用MyBatis可以自动帮我们把查询结果和POJO实体类映射在一起,是因为我们在创建数据表和实体类的时候遵守了一定的规则,即数据库的字段名和POJO的属性名是相同的,这样MyBatis才知道数据的对应方法,但是在很多时候,数据库的命名方法是不一样的,比如在使用数据库的时候,我们喜欢使用下划线连接两个单词,而在我们的Java中,我们习惯使用驼峰命名法。而且当数据表的创建者和Java实体类的创建者不是一个人,这样命名就会有更大的区别,当这种时候,MyBatis是无法帮我们进行自动映射的,这时候就需要我们手动进行配置

使用方法:

定义自定义映射规则:

<resultMap resultMap=“映射的实体类类名” id = “唯一标识”>

        <id property="实体类属性名“ column=”数据表字段名“ />

        <resalt properyu="实体类属性名“ column=”数据表字段名“ />

</resultMap>

使用自定义映射规则:
<select resultType="自定义映射规则唯一标识" id="SQL语句唯一标识">
    select * from user;
</select>

 就是将之前的resultType改成resultMap,并将resultMap的值从JOPO实体类改成自定义映射规则的唯一标识即可。

代码实现:

比如此时的数据表中有一个列名为phone_number,而我的POJO实体类中与之对应的属性为phoneNumber:

此时如果直接运行代码自动映射肯定是不行的:

 可以看到这里的数据是0,而我的是有数据的,此时就说明MyBatis并没有帮我们自动映射,需要我们自己手动进行配置:

其中要保证蓝色框里面的内容一致,红色框中的column的值是POJO类中的属性,property的指就是数据表中的字段名。

保证自己的配置完成之后再次运行代码,如果配置正确的话,就可以正常的显示出数据库中的信息:

驼峰映射:使用<setting>标签中的mapUnderscorecameLcase属性

因为驼峰命名和下划线命名比较常用,所以MyBatis可以单独为这种情况设置了一个简单的设置方法,就是在MyBatis的核心配置文件中使用我们之前提到过的<settings>属性:

然后我们将之前的自定义映射的相关配置文件注释一下并且再次运行代码,试试这次能不能顺利的读取出数据:

运行结果:

 

可以看到这次我们同样的顺利读取到了数据,说明我们的配置是正确的!

需要注意的是所有的配置项注意拼写一定不要错误

由于没有直接针对 `mapper/BookMapper.xml` 文件中 `com.javaee.dao.BookMapper.findBookByid` 方法处理结果出错的引用,但可以从相关引用中获得一些思路。 ### 1. 检查 XML 文件是否被正确编译 若存在 `java.io.IOException: Could not find resource` 类似问题,可能是 IDEA 未编译 `src` 的 `java` 目录的 `xml` 文件。可将 `mapper` 文件放到 `resources` 目录下,或在 `pom.xml` 里添加资源过滤配置: ```xml <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> </build> ``` 这样能保证 `xml` 文件被正确编译打包。 ### 2. 检查 Mapper 扫描配置 要保证 `Mapper` 被正确扫描到。若使用全局配置 `mapper` 文件,可采用如下配置: ```xml <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <property name="basePackage" value="com.javaee.dao"/> </bean> ``` 确保 `basePackage` 包含 `com.javaee.dao` 包。 ### 3. 检查 SQL 语句结果映射 查看 `mapper/BookMapper.xml` 文件里 `findBookByid` 方法的 SQL 语句结果映射是否正确。示例如下: ```xml <mapper namespace="com.javaee.dao.BookMapper"> <select id="findBookByid" parameterType="int" resultType="com.javaee.entity.Book"> SELECT * FROM books WHERE id = #{id} </select> </mapper> ``` 要保证 `resultType` 或 `resultMap` 配置正确,且 SQL 语句语法无误。 ### 4. 检查依赖问题 若存在依赖问题,可在 `Setting.xml` 中添加阿里云仓库镜像: ```xml <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <mirrors> <mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> </mirror> </mirrors> </settings> ``` 以此保证依赖能正常下载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值