一、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标签属性表。

958

被折叠的 条评论
为什么被折叠?



