MyBatis-Sql映射文件

1.1 SQL映射文件

MyBatis的强大之处在于其出色的SQL映射语句,其SQL映射文件的配置非常简单。相较于JDBL代码SQL映射文件的配置可减少50%以上的代码量。下面是关于SQL映射文件的几个顶级元素配置:
1、mapper:映射文件的根元素节点,只有一个属性namespace(命名空间),其作用如下。
(1)、用于区分不同的mapper,全局唯一。
(2)、绑定DAO接口,即面向接口编程。当namesapce绑定某一接口之后,可以不用写该接口的实现类,MyBatis会通过接口的完整限定名来查找到对应的mapper配置来执行SQL语句。因此namespace的命名必须跟接口同名。
2、cache:配置给定命名空间的缓存。
3、cache-ref:从其他命名空间引用过来的缓存。
4、resultMap:用来描述数据库结果集合对象的映射关系。
5、sql:可以重用的SQL块,也可以被其他语句引用。
6、insert:映射插入语句。
7、update:映射更新语句。
8、select:映射查询语句。
9、delete:映射删语句。

mapper.xml配置文件的抬头:

<?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">

查询语句:

   <select id="count" resultType="int" parameterType="java.lang.Integer">
        select count(1) from smbms_user where id = #{id};
    </select>

插入语句:

 <!--添加用户-->
    <insert id="addUser" parameterType="com.kgc.pojo.User">
        insert into smbms_user (userCode,userName,userPassword,gender,phone,address) values(#{userCode},#{userName},#{userPassword},#{gender},#{phone},#{address})
    </insert>

更新语句:

 <update id="upDateUserByid" resultType="User">
        //插入Sql
    </update>

删除语句:

  <delete id="delUser" parameterType="integer">
        delete from smbms_user where id = ${id}
    </delete>

注意:
MyBatis的SQL映射文件中的namesapce元素的namespace属性有如下要求:
(1)、namespace命名必须跟某口DAO接口同名,并且都习惯于以Mapper结尾(如UserMapper.xml).
(2)、在不同的mapper文件中,子元素id可以相同,Mybatis通过namespace和i子元素的id属性结合来区分不同的SQL映射,接口中的方法名与映射文件中的SQL语句中的id需要对应。
在这里插入图片描述
在这里插入图片描述
**

1.2单条件查询

**
在MyBatis中可以通过设置parameterType的属性值来设置该SQL语句的参数类型,可以通过设置resultType或resultMap来设置SQL映射语句执行后的返回映射对象类型
在这里插入图片描述
在这里插入图片描述
为了使数据库查询的结果和返回类型中的属性能够自动匹配以便于开发,对于MySql数据库和JavaBean都会采用同一套命名规则,即java的驼峰命名规则,这样就不需要再做映射(如果数据库表的字段名和属性名不一致,则需要进行手动映射)。参数的传递用#{参数名},它告诉MyBatis生成PreparedStatement参数。对于JDBC,该参数会被标识为“?”.
代码中属性的含义:
id:命名空间的唯一标识,可以用来引用这条SQL语句。
parameterType:表示查询语句入参时的类型的完全限定名或别名。它支持基本数据类型和复杂数据类型。可以通过起别名的方式来减少配置文件的代码。
resultType:查询语句返回结果类型的完全限定名或别名。

1.3多条件查询

通过传入多个参数来实现多条件查询
1、可以通过@Param注解来实现多个参数的传递;
在这里插入图片描述
在这里插入图片描述

2、使用JavaBean的封装来实现参数的传递;
在这里插入图片描述
在这里插入图片描述
3、将参数封装成Map结构进行传入,通过Map的key可以获取传入的值:
在这里插入图片描述在这里插入图片描述
MyBatis传入参数类型可以是Java基础数据类型,但是只适用于一个参数的情况,通过#{参数名}即可获取传入参数的值。若是多参数入参,则需要复杂数据类型来支持,包括Java实体类,Map通过
#{属性名}或#{Map的key}来获取传入的参数值。

1.4自定义查询结果映射

当查询结果的字段中出现JavaBean中没有的属性时可以:

1、修改POJO:增加该条字段的对应属性,使用resultType自动映射。
2、通过resultMap映射自定义结果集。

在这里插入图片描述
注意:MyBatis中使用resultType做自动映射时,要注意字段名和pojo的属性名必须一致。若不一致,则需要给字段起别名,保证别名与属性名一致。

resultMap元素用来描述如何将结果集映射到Java对象,此处使用resultMap对列表展示所需的必要字段进行自由映射,特别是当数据库的字段名和pojo中的属性名不一致的情况下,比如角色名称,字段名column时roleName,而User对象的属性名为userRoleName,此时就需要做映射。
resultMap元素包含以下属性:
id:唯一标识,此id值用于对select元素resultMap属性的引用。
type:标识该resultMap的映射结果类型。
result子节点属性:
column:表示从数据库查询的字段名,property则表示查询出来的字段对应的值赋给实体对象的哪个属性。
MyBatis中对查询结果的返回类型可以是resultType也可以是resultMap二者的区别和关联如下:
1、resultType表示返回结果类型,包括基础数据类型和复杂数据类型。
2、resultMap:是对外部定义的resultMap的引用,对应外部resultMap的id,表示返回结果映射到哪一个resultMap上。它的应用场景一般是:数据库字段信息与对象属性不一致或者其他的复杂联合查询,需要做自动映射。
关联:
Mybatis的查询结果返回类型都是resultMap,当我们指定返回结果类型属性为resultType时,MyBatis会自动的把对应的值赋给resultType所指定对象的属性:而当我们提供的返回结果类型属性是resultMap时,因为Map不能很好地表示领域模型,就需要通过进一步的定义把他转化为对应的实体对象。
4、resultMap的自动映射级别
在这里插入图片描述
映射级别的value属性:
1、NONE:禁止自动匹配,没有进行映射的字段不会被赋值,
2、 PARITIAL默认级别的映射,没有进行匹配的属性会被赋值,不包括内嵌,
3、 FULL:全映射,内嵌的属性也能被赋值。

1.5增删改的操作

对于(insert、 update、delete)这类数据库更新操作,需要注意一下两点:
(1)、该类型的操作默认返回的是执行SQL语句影响的行数,所以DAO层的接口方法返回类型一般都是设置为Int类型。最好不要设置成boolean类型。
(2)、insert、update、delete元素中没有resultType属性,只有查询操作需要对返回结果类型(resultType/resultMap)的指定。
在这里插入图片描述

1.6高级结果映射

1.6.1使用association处理一对一关联关系
association:映射到JavaBean的某个“复杂类型"属性,比如JavaBean类,即JavaBean内部嵌套一个复杂数据类型(JavaBean)属性。在这里插入图片描述
association的属性:
javaType : 完整Java类名或者别名,若映射到一个JavaBean,则MyBatis会自行检测其类型;若映射到一个HashMap,则应该明确指定javaType,来确保所需行为。
property:映射数据库的实体对象属性。
colunm:数据库列名或别名。
可在association添加id子元素来提高检索效率,若没有指定id ,MyBatis也能够正常工作,只是会影响性能,所以选择尽量少的属性来标识唯一结果,使用主键或者联合主键均可。
d
1.6.2使用collection来处理一对多的关联关系
collection的用法与association相似,都是用来处理“复杂类型”的属性映射,collection用来处理JavaBean属性是一个集合的情况.
在这里插入图片描述
collection的属性:
ofType:完整的类名或者别名,即集合所包含的类型。
property:映射到数据库列的实体对象的属性。
collection的子元素也包括:id 和 result.用法与association一致。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值