<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>属性:
然后我们将之前的自定义映射的相关配置文件注释一下并且再次运行代码,试试这次能不能顺利的读取出数据:
运行结果:
可以看到这次我们同样的顺利读取到了数据,说明我们的配置是正确的!
需要注意的是所有的配置项注意拼写一定不要错误