java持久层mybatis设计_Java 持久层框架之 MyBatis

Spring 整合 Mybatis

引入依赖

在 pom.xml 引入 Mybatis 相关依赖。

org.mybatis

mybatis

3.2.8

org.mybatis

mybatis-spring

1.3.1

org.springframework

spring-jdbc

4.3.17.RELEASE

创建 Mybatis 配置文件

在 resource 目录下创建 mybatis-config 配置文件。

gt;

创建集成配置文件

在 resource 目录下创建一个 spring-context-mybatis.xml 的集成配置文件。

CRUD 案例

新增

INSERT INTO tb_user (

id,

username,

password,

phone,

email,

created,

updated

)

VALUES

(

#{id},

#{username},

#{password},

#{phone},

#{email},

#{created},

#{update}

)

删除

DELETE FROM tb_user WHERE id = #{id}

查询

SELECT

a.id,

a.username,

a.password,

a.phone,

a.email,

a.created,

a.updated AS "update"

FROM

tb_user AS a

WHERE

a.id = #{id}

更新

UPDATE

tb_user

SET

username = #{username},

password = #{password},

phone = #{phone},

email = #{email},

created = #{created},

updated = #{update}

WHERE id = #{id}

MyBatis 动态 SQL

动态 SQL 主要用于解决查询条件不确定的情况:在程序运行期间,根据用户提交的查询条件进行查询。提交的查询条件不同,执行的 SQL 语句不同。若将每种可能的情况均逐一列出,对所有条件进行排列组合,将会出现大量的 SQL 语句。此时,可使用动态 SQL 来解决这样的问题。这里的条件判断使用的表达式为 OGNL 表达式。常用的动态 SQL 标签有 、、、 等。

注意:在 mapper 的动态 SQL 中若出现 >、=,<= 等符号,最好将其转换为实体符号。否则,XML 可能会出现解析出错问题,特别是 < 在 XML 中是绝对不能出现的。

if 标签

对于该标签的执行,当 test 的值为 true 时,会将其包含的 SQL 片断拼接到其所在的 SQL 语句中。

案例

为了解决两个条件均未做设定的情况,在 where 后添加了一个“1=1”的条件。这样就不至于两个条件均未设定而出现只剩下一个 where,而没有任何可拼接的条件的不完整 SQL 语句。

gt;

SELECT

*

FROM

student

WHERE 1 = 1

AND name LIKE concat('%', #{name}, '%')

AND age > #{age}

where 标签

标签的中存在一个比较麻烦的地方:需要在 where 后手工添加 1=1 的子句。因为,若 where 后的所有 条件均为 false,而 where 后若又没有 1=1 子句,则 SQL 中就会只剩下一个空的 where,SQL 出错。所以,在 where 后,需要添加永为真子句 1=1,以防止这种情况的发生。但当数据量很大时,会严重影响查询效率。

案例

SELECT

*

FROM

student

AND name LIKE concat('%', #{name}, '%')

AND age > #{age}

choose 标签

该标签中只可以包含 、,可以包含多个 与一个 。它们联合使用,完成 Java 中的开关语句 switch case 功能。

案例

本例要完成的需求是,若姓名不空,则按照姓名查询;若姓名为空,则按照年龄查询;若没有查询条件,则没有查询结果。

SELECT

*

FROM

student

AND name LIKE concat('%', #{name}, '%')

AND age > #{age}

AND 1 != 1

foreach 标签

该标签用于实现对于数组与集合的遍历。对其使用,需要注意:collection 表示要遍历的集合类型,这里是数组,即 array。open、close、separator 为对遍历内容的 SQL 拼接。

遍历数组案例

SELECT

*

FROM

student

WHERE id IN

#{id}

遍历泛型为基本类型的集合案例

/**

使用 foreach 标签以 list 基本类型的形式查询

@param ids

@return

/

public List selectByForeachWithListBase(List ids);

SELECT

FROM

student

WHERE id IN

#{id}

遍历泛型为自定义类型的集合案例

/**

使用 foreach 标签以 list 自定义类型的形式查询

@param students

@return

/

public List selectByForeachWithListCustom(List students);

SELECT

FROM

student

WHERE id IN

#{student.id}

sql 标签

该标签用于定义 SQL 片断,以便其它 SQL 标签复用。而其它标签使用该 SQL 片断, 需要使用 子标签。该标签可以定义 SQL 语句中的任何部分,所以 子标签可以放在动态 SQL 的任何位置。

案例

SELECT

id,

name,

age,

score

FROM

student

使用 sql 标签

亚马逊测评 www.yisuping.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值