MyBatis(2)预习内容

一、MyBatis 基于接口代理方式实现 Dao 层开发

1.1 介绍

采用 Mybatis 的基于接口代理方式实现 持久层 的开发,这种方式是我们后面进入企业的主流。 基于接口代理方式的开发只需要程序员编写 Mapper 接口,Mybatis 框架会为我们动态生成实现类的对象。

1.2 开发规范

Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象。

Mapper接口开发需要遵循以下规范:
1、Mapper.xml文件中的namespace与mapper接口的类路径相同。
2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同 
3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

1.3 创建UserMapper接口

1.4 创建UserMapper接口对应的配置文件

1.5 加载UserMapper.xml文件

1.6 测试程序

二、@Param方式解决多参数处理

2.1UserMapper接口文件

2.2UserMapper映射文件

2.3测试程序

三、mybatis-config.xml配置文件

3.1 配置内容

mybatis-config.xml 中配置的内容和顺序如下:

(1). properties(属性)
(2). settings(全局配置参数)
(3). typeAliases(类型别名)
(4). plugins(插件)

(5). environments(环境集合属性对象)
   --environment(环境子属性对象)
   -----transactionManager(事务管理)
   ---------dataSource(数据源)

(6). mappers(映射器)

3.2 properties(属性)

作用:
    将数据连接单独配置在db.properties中,只需要在mybatis-config.xml中加载db.properties的属性值,在mybatis-config.xml.xml中就不需要对数据库连接参数进行硬编码。数据库连接参数只配置在db.properties中,方便对参数进行统一管理,其它xml可以引用该db.properties,从而提高了效率。mybatis-config.xml可以引用java属性文件中的配置信息如下:

创建db.properties文件(在resources目录下)

mybatis-config.xml引用如下

四、MyBatis映射文件的Sql深入(即动态Sql语句)

4.1 动态sql介绍

4.1.1 动态sql的概念

顾名思义,SQL 是动态拼接成的,根据传入的变量值进行逻辑操作,并动态拼接,方便实现多条件下的数据库操作。 在业务逻辑复杂,即简单 SQL 无法完成时,需要拼接时就要使用动态 SQL。

4.1.2 动态sql主要解决的问题

动态sql主要解决根据条件判断附加动态sql主要解决多条件变化查询,实现自动判断记录字段是否需要更新,根据条件判断附加条sql条件,实现批量添加数据、批量修改数据、批量修删除数据等,优化sql语句,提高执行效率。

4.2 where标签

 where标签简介

where标签用于代替sql中的where关键字,可以根据条件判断是否附加where关键字。如果where标签中有条件成立就会附加where关键字,如果没有成立的条件就不会附加where关键字. 可以自动去掉离他最近一个无关的and 或or关键字.where标签的书写格式为: <where>添写附加条件</where>

4.3 if标签

if标签简介

if标签表示逻辑条件判断,如果条件成立就附加<if></if>之间的sql语句,如果条件不成立就不附加<if></if>之间的sql语句。
书写格式为:
    <if test="表达式">sql语句</if>

注意: 字符串类型的数据需要做不等于空字符串校验。

4.4 sql片段

 sql片段简介

在实际开发中会遇到许多相同的SQL,比如根据某个条件筛选,这个筛选很多地方都能用到,我们可以将其抽取出来成为一个公用的部分,这样修改也方便,一旦出现了错误,只需要改这一处便能处处生效了,此时就用到了<sql>这个标签了。
Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的。

注意:

引用sql片段使用include标签,refid指向sql片段的id,如果共享其他mapper文件当中的sql片段,只需要refid前面加上另外一个mapper映射文件的namespace即可

4.5 set标签

4.5.1 set标签简介

set标签用于更新语句中,代替set关键字,可以有效对指定字段进行更新,提升sql的执行效率。当set标签中有条件成立时就会附加set标签,set标签会去除无关的逗号。set标签中一般嵌套if标签进行使用其格式为:
<set>
    <if test="username != null and username != ''">
        `username` = #{uname},
    </if>
    <if test="sex != null and sex != ''">
        `sex` = #{sex},
    </if>
    <if test="email != null and email != ''">
        `email` = #{email},
    </if>
</set>

4.5.2 set标签使用

int updateUserById02(@Param("uname") String username, @Param("sex") String sex,
                     @Param("email") String email, @Param("uid") int id);

<!--根据id同时修改多个字段信息-->
<!--
    用户的修改,增删改默认的返回值类型都是int,所以可以不写
    在方法中使用注解的方式设置参数,可以不用写parameterType属性
-->
<update id="updateUserById02">
    UPDATE `t_user`
    <!--使用set标签会自动去除要修改数据中的最后一个逗号-->
    <set>
        <if test="username != null and username != ''">
            `username` = #{uname},
        </if>
        <if test="sex != null and sex != ''">
            `sex` = #{sex},
        </if>
        <if test="email != null and email != ''">
            `email` = #{email},
        </if>
    </set>
    <where>
        `id` = #{uid}
    </where>
</update>

4.6 trim标签

trim标签为万能标签,可用于set或where等。
属性:
    prefix表示要附加的前缀关键字,
    suffix表示要附加的后缀关键字,
    prefixOverrides表示要忽略前置字符,
    suffixOverrides表示要忽略后置字符。

4.7 choose标签

 choose标签简介

choose标签作用条件判断来拼接指定的条件,它和if不太相同,choose似类于java中的switch语句用法,只要有条件成立,其它判断将得不到执行,如果所有条件都不成立则执行otherwise标签中的内容。

4.8 foreach标签

foreach标签简介

foreach标签表示循环,对sql中有重复的部分可以使用此循环来动态拼接sql语句。可以实现批量添加、批量删除、批量更新操作。foreach标签中有很多的属性,请参考下面的Foreach标签属性表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值