了解MyBatis

官网啥都有:mybatis – MyBatis 3 | 简介

一,MyBatis

是一款优秀的持久层框架,用于简化JDBC开发

1、持久层

JavaEE三层架构:表现层、业务层、持久层。

持久层负责将数据保存到数据库的那一层代码

2、框架

就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
在框架的基础上构件软件编写更加高效、规范、通用、可拓展

MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作

二,Mapper代理开发

1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下(配置文件与相应的接口包名一样,而不是放在同一个目录下)
2.设置SQL映射文件的namespace属性为Mapper接口全限定名
3.在Mapper接口中定义方法,方法名就是SQl映射文件中sql语句的id,并保持参数类型和返回值类型一致

三,MyBatis核心配置文件

environments配置数据库连接环境信息
typeAliases取别名,通过包扫描,扫描后相当于给那个包的所有实体类取了别名,默认是类的名称(不用加包名),且不区分大小写

注意数据库表的名称与实体类要一样,否则无法自动封装
可以给字段取别名解决,但是如果需要多次使用会很麻烦
所以这时候,可以使用sql片段

<sql id="part">
    id,real_name as realName
</sql>
<select id="selectAll" resultType="student">
    select <include refid="part"/> from student;
</select>


但是这些SQL语句查询的字段未必一样,不灵活
这是可以用resultMap

<resultMap id="studentResult" resultType="student">
    <result column="real_name" property="realName"/>
</resultMap>
<select id="selectAll" resultMap="studentResult">
    select <include refid="part"/> from student;
</select>

四,动态条件查询

<if>:这个标签有个test属性,用来做条件判断,且它一般与<where>一起使用
<where>:可以代替where关键字,会对if标签里的内容进行处理
<choose>:类似于switch
<when>:类似于case,有test属性,用于条件判断
<otherwise>:类似于default
<set>:用来代替set关键字,也可以处理if标签里的内容
<foreach>:遍历,有collection属性是写集合名称(mybatis会将数组参数封装成一个map集合,默认key是array,如果不加任何处理,collection属性应填array,但是如果传参时使用了@param注解,他会把key修改为数组名),item属性是遍历的每个元素的名字,要与表中字段对应,separator属性是遍历后每个元素之间的分隔符,一般是逗号还有open与close属性,拼接开始与结束的,一般是个括号。

五,参数传递

参数传递就不能不提@Param注解,

1,当需要传多个参数时
系统会将每个参数封装成Map集合
不使用@Param,默认的key是:arg0,arg1...和param1,param2...
使用@Param会将key修改为参数名

2,当使用一个参数时

是自己定义的类的类型时不会封装成map集合,不用使用@param注解
是collection时,会封装成map集合,不使用@param注解默认key是arg0和collection(两个都可以),并且collection的各个子类还会加一个key,名字是相应的名字,如List默认的除了arg0,collection还有个list
数组则是arg0和array,这些都可以用@param注解修改默认key

其他类型则不必使用注解

对于注解,我的做法是,除了我自己创建的类的类型,否则都加

六,特殊字符处理

由于SQL语句写在了xml文件里,当使用一些特殊字符时会产生错误,比如<(标签也是从小于号开始的),可以使用转义字符

字符转义
单引号(')&#039;
双引号(")&quot;
小于号(<)&lt;
大于号(>)&gt;
与(&)&amp;
空格&nbsp;

也可以使用CDATA区

以小于号为例<![CDATA[<]]>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值