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引用如下

3.3 typeAliases(类型别名)

在 mapper.xml 中,定义很多的 statement,statement 需要 parameterType 指定输入参数的类型、需要 resultType 指定输出结果的映射类型。

自定义别名

3.4 mappers(映射器)

Mapper配置的几种方法:

第一种方式: <mapper resource=" " />

第二种方式: <mapper class="" />

注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

第三种方式: <package name=""/>(重点掌握)

若有多个映射文件使用包扫描比较方便

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

4.1 动态sql介绍

4.1.1 动态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.2.2 where标签使用

接口编写:

映射文件:

测试程序:

4.3 if标签

if标签简介

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

4.3.3 if标签使用
接口编写:

映射文件:

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

         and 代表的是: &&

         or 代表的是:||

测试程序:

4.4 sql片段

4.4.1 sql片段简介

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

Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的。

4.5 set标签

4.5.1 set标签简介

set标签用于更新语句中,代替set关键字,可以有效对指定字段进行更新,提升sql的执行效率。当set标签中有条件成立时就会附加set标签,set标签会去除无关的逗号

set标签中一般嵌套if标签进行使用

4.5.2 set标签使用

接口编写:

映射文件:

测试程序:

4.6 trim标签

4.6.1 trim标签简介

trim标签为万能标签,可用于set或where等(可用来代替set标签或where标签)。

 属性:

        prefix表示要附加的前缀关键字,

        suffix表示要附加的后缀关键字,

        prefixOverrides表示要忽略前置字符,

        suffixOverrides表示要忽略后置字符。

4.6.2 trim标签使用
4.6.2.1 代替set标签

接口编写:

映射文件:

测试程序:

4.6.2.2 代替where标签

接口编写:

映射文件:

测试程序:

4.7 choose标签

4.7.1 choose标签简介

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

4.7.2 choose标签使用

接口编写:

映射文件:

测试程序:

4.8 foreach标签

4.8.1 foreach标签简介

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

4.8.2 数据库连接url的配置

SQL批处理需要在你的数据库连接配置属性后面加上allowMultiQueries=true

“allowMultiQueries=true”的作用:

1.可以在sql语句后携带分号,实现多语句执行。

2.可以执行批处理,同时发出多个SQL语句

2.8.3 foreach标签使用

接口编写:

映射文件:

测试程序:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值