MyBatis配置文件之— Mapper映射配置文件中的各标签以及作用【笔记整理】

MyBatis配置文件之— Mapper映射配置文件中的各标签以及作用

Mapper映射配置文件:主要是配置sql语句 需要在核心配置文件中 通过Mapper标签引入

<?xml version="1.0" encoding="UTF-8" ?> xml文件的固定写法 必须要在第一行
    MyBatis的DTD约束:固定写法 记住即可
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
Mapper映射配置文件中的各标签以及作用
            1.<mapper根标签 namespace属性>
                    a.mapper映射根标签  mapper标签在映射配置文件中 有且仅有一个
                    a1.namespace属性:名称空间 分两种情况:
                        ① 正常情况【通过 数据访问层 接口实现类 实现功能】
                            namespace的值 一般定义成配置文件的文件名
                            功能仅仅是在核心配置文件中引入时作为映射文件的唯一标识
                        ② 企业常用情况【接口代理方式实现功能】
                            namespace的值 定义成 数据访问层的接口的路径(从src开始)
                            功能有两个:第一个是在核心配置文件中引入时作为映射文件的唯一标识,第二个是使核心配置文件可以找到 数据访问层 的接口
              2.<sql标签 id属性>
                    重复使用的sql语句    例:select * from student
                </sql>
                    a.sql标签
                        作用:当sql中有重复的sql语句组成部分 可以将这些sql语句中的重复部分进行抽取 放到sql标签中 类似于方法中的代码的共性抽取
                        注意事项:sql标签与对应的sql语句标签的顺序是随意的【但一般是放在所有的sql语句的最前面 可以增加代码的可读性】
                    b.id属性
                        作用:由于可能会有多条sql标签包裹的sql语句,所以 id属性是 sql标签的唯一标识
                        注意事项: id属性 在同一个映射文件中 必须是唯一的
              3.select标签
              3.1<select标签 id属性  resultType属性  parameterType属性>
                    <include标签 refid属性/> sql语句的其余部分  例:<include标签 refid属性/> where uname=#{uname}
                 </select>
              3.2<select标签 id属性  resultType属性  parameterType属性>
                      完整sql语句  例:select * from student where sid = #{sid} and uname=#{uname}
                 </select>
              3.3<select标签 id属性  resultType属性 >
                      完整sql语句 例: select * from student where sid= #{sid}
                 </select>
                    a.select标签:执行选择功能的sql语句标签
                            作用:配置sql语句中的查询功能的sql语句
                            注意事项:只能执行查询sql 不能执行增删改sql语句
                        a1.id属性:
                            作用:多条select标签的sql语句的唯一标识
                            注意事项:唯一标识 所以在同一个映射文件中 必须是唯一的
                        a2.resultType属性:
                            作用:查询方法的返回值类型的配置
                            注意事项:
                                ① 查询sql 一定会有一条或者多条数据返回 所以resultType属性一定会有
                                ② 值 代表的一般是依据该数据表创建的javaBean类 分两种情况:
                                    如果在核心配置文件中有<typeAliases>起别名标签 需要配合该标签的值来决定 resultType的值是什么
                                    如果没有<typeAliases>标签 :值为对应javaBean的路径(从src出发)
                                    返回值是list集合 而配置javaBean :框架底层做了转换
                        a3.parameterType属性:
                            作用:查询方法的参数类型的配置
                            注意事项:
                                ① 查询sql对应的方法的参数列表分两种情况:
                                    ①①:没有参数:
                                        情况:没有选择条件 即 查询所有 例:select * from student
                                        注意事项:不需要parameterType属性
                                    ①②:有参数:又分三种情况:
                                        第一种:
                                        例:
                                        * sql语句:select * from student where sid=#{sid}
                                        * 对应的方法:public Student selectById(Integer sid){方法体}
                                        情况:参数设置的是基本数据类型的包装类 可以将值写成基本数据类型:框架底层自动匹配
                                        第二种:
                                        例:
                                        * sql语句:select * from student where sid=#{sid}
                                        * 对应的方法:public Student selectById (Student student){方法体}
                                        情况:参数设置的对应的javaBean类的实例对象 parameterType属性的值 需要看核心配置文件中是否有<typeAliases>起别名标签
                                            如果有起别名标签:需要配合该标签的值来决定paramaterType的值是什么
                                            如果没有<typeAliases>标签 :值为对应javaBean的路径(从src出发)
                                        第三种:请参照foreach标签中的情况
                    b.include标签:将相应的sql标签中的共性sql语句引入该select标签中 组合成完整的sql语句
                        b1.refid属性:
                            作用:与sql标签中的id属性对应 用来找到响应的sql标签中的共性sql语句
                            注意事项:必须要有  且取值一定是与该映射文件中的某个sql标签的id属性对应
              4.<update标签 id属性 parameter属性>sql语句<update>
              5.<insert标签 id属性 parameter属性>sql语句<insert>
              6.<delete标签 id属性 parameter属性>sql语句<delete>
                    (4/5/6)修改、添加、删除的sql语句配置 标签 属性 参照select标签 完全一样
                    注意事项:
                        1.增删改 标签的 resultType属性的值 一定都是int 而int类型不需要配置 所以 这三个标签是没有resultType属性的

              </mapper>

特殊sql语句的整理【if标签和foreach标签】

特殊sql语句整理:
            1.可选择参数的实现:
                实现需求:重载方法的共性抽取(可变参数)【即 配置可以根据参数传递的是什么而自动匹配相应的sql语句】
        组成标签及写法:
            <select标签 id标签 resultType属性 parameterType属性>
                <include标签 refid属性/>
                <where标签>
                    <if标签 test属性="sid != null">
                        执行sql语句:sid = #{sid}
                    </if>
                    <if标签 test属性="name != null">
                        执行sql语句:AND uname = #{uname}
                    </if>
                    <if标签 test属性="age != null">
                        执行sql语句:AND age = #{age}
                    </if>
                </where>
            </select>
                a.<select标签 id标签 resultType属性 parameterType属性><include标签 refid属性/> 请遵循上面解释
                b.<where标签>
                    作用:用来包裹<if标签> 相当于sql语句中的where关键字
                    注意事项:注意在结构中的位置 相当于sql语句中 where的位置
                c.<if标签>
                        作用:相当于java中的if...else... 是用来做选择判断的
                        注意事项:
                        * 1.多个条件之间是并行关系 如果写在上面的if语句 包含写在下面的if语句的判断条件 可能会导致下面的if语句中的sql失效,无法执行
                        * 2.test属性必须要有 如果没有 相当于这个条件一直是true 那就失去意义了
                        * 3.除了第一个<if>标签之外 后面的每一个<if>标签包裹的sql语句的前面都需要 + and关键字
                   c1:test属性:
                        作用:相当于java中if判断的条件
                        注意事项:条件的设立等等【可以想一下java中 if条件的注意事项 基本类似】
                        *
            2.sql语句中 in 关键字的实现:
                实现需求:同字段多个值的sql语句 即:in关键字的作用的实现
            组成标签及写法:
                <select标签 id属性 resultType属性 patameterType属性=“list”>
                    <include标签 refid属性/>
                    <where标签>
                        <foreach标签 collection属性 open属性 close属性 item属性 separator属性>
                            #{随意的一个变量名:看下面的解释}
                        </foreach>
                    </where>
                </select>
                    a.<select标签 id标签 resultType属性 parameterType属性><include标签 refid属性/> 请遵循上面解释
                            需要提及一点:foreach标签存在的sql语句 其对应的方法的参数的类型一定是list!!!!!!!!!
                            原因是:同字段多个值的并集查询 正常情况下 只能用list集合作为容器【数组由于需要考虑的过多,这里不适用】
                    b.<where标签>请遵循上面解释
                    c.<foreach标签>
                            作用:相当于java中的for循环 用来循环遍历 参数list数组中的每一个值
                            注意事项:由于属性过多 需要注意每个属性的值 极容易出错 【要检查拼接之后是否是一个正确的sql语句】
                        c1.collection属性(String类型的值):
                            作用:表示的参数的容器类型【一般包含两种类型 list集合,array数组  但是由于 数组 实现起来比较麻烦 所以一般使用的是集合】
                        c2.open属性(String类型的值):
                            作用:where关键词后连接的sql语句部分
                        c3.close属性(String类型的值):
                            作用:结束的sql语句部分  即:是list循环遍历之后连接的sql语句部分
                        c4.item属性(String类型的值):
                            作用:参数变量名 即:list集合中对应的数据表中的字段名(列名)
                        c5.separator属性(String类型的值):
                            作用:分隔符 即:代表的是 in()括号中不同的值之前的分隔符   在Mysql中 固定是 , 
                        
                        整体串联起来:
                        <include标签代表的sql语句>  +  <where标签代表的where关键字>  +  <foreach标签 open属性的值>  +  <foreach标签 【遍历list集合获得的值 并且每一个值之间用 separator的值做分割】  +  <foreach标签 close属性的值>
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis 是一款使用 XML 或注解配置的持久层框架,它可以自动化地将数据库的数据映射Java 对象。在 MyBatis mappermapper.xml 是配对使用的,其 mapper 是接口,而 mapper.xml 是映射配置文件mapper 接口定义了数据库操作的方法,而 mapper.xml 则定义了这些方法的 SQL 语句以及参数映射规则、结果集映射规则等。 下面是一个简单的例子: 1. 定义 mapper 接口 ```java public interface UserMapper { User selectUserById(Integer id); } ``` 2. 定义 mapper.xml 映射配置文件 ```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"> <mapper namespace="com.example.UserMapper"> <resultMap id="userResultMap" type="com.example.User"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="password" property="password"/> </resultMap> <select id="selectUserById" resultMap="userResultMap"> SELECT * FROM user WHERE id = #{id} </select> </mapper> ``` 上述代码,namespace 属性指定了 mapper 接口的全限定名,resultMap 标签定义了一个结果集映射规则,select 标签定义了一个查询操作,其 id 属性指定了 mapper 接口的方法名,resultMap 属性指定了结果集映射规则的 id。 3. 在 MyBatis 配置文件引入 mapper.xml ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <mappers> <mapper resource="com/example/UserMapper.xml"/> </mappers> </configuration> ``` 上述代码mapper 标签指定了映射配置文件的位置。 这样就完成了 mappermapper.xml 的配置。在代码调用 selectUserById 方法时,MyBatis 会根据 mapper.xml 的配置自动生成 SQL 语句,并将查询结果映射到 User 对象

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值