查看: 777|回复: 0

[Mysql数据库] 接口的绑定方案和动态SQL

发表于 2018-4-28 08:00:00

1. 接口绑定方案

MyBatis中, 提供了一套接口绑定方案. 程序员可以提供一个接口, 然后提供对应接口的一个mapper.xml文件. MyBatis会自动将接口和xml文件进行绑定. 实际上就是MyBatis会根据接口和对应的xml文件创建接口的实现类. 换言之, 就是可以得到接口类型的对象, 方便方法的调用.

2.1 实现方式 2.1.1 定义接口

package com.bjsxt.mapper;

import java.util.List;

import com.bjsxt.pojo.User;

public interface UserMapper {

List selAll();

}

2.1.2 编写对应接口的映射文件

注意:

a) xml文件名要和接口名一致

b) namespace属性必须为接口的全限定路径

c) id属性必须和接口对应的方法名一致

"com.bjsxt.mapper.UserMapper">

2.1.3 在核心配置文件中扫描接口

a) 扫描单个接口, 可以使用mapper标签的class属性

"com.bjsxt.mapper.UserMapper" />

b) 当扫描多个接口时, 为简化配置, 可以使用package标签, 表示扫描对应包下的所有接口.

"com.bjsxt.mapper" />

2.1.4 应用

在使用时, 可以通过SqlSession对象的getMapper方法, 得到接口的代理对象, 从而可以调用定义好的方法.

@Test

public void testBind() {

SqlSession session = MyBatisUtil.getSession();

UserMapper mapper = session.getMapper(UserMapper.class);

List list = mapper.selAll();

for (User user : list) {

System.out.println(user);

}

session.close();

}

2.2 通过接口绑定解决多参数的传递 2.2.1 方式一

a) 接口中定义方法

User selByUP(String username, String password);

b) 映射文件中提供对应的标签. 此时, SQL语句中获取方式有两种, 通过#{index}或#{param+数字}的方式.

2.2.2 方式二

a) 接口中定义方法, 参数中使用@Param注解设定参数名用于在SQL语句中使用.

User selByUP(@Param("username") String username, @Param("password") String password);

b) 映射文件中提供对应的标签. 此时, SQL语句中获取方式有两种, 通过#{参数名称}或#{param+数字}的方式.

2. 动态SQL

根据条件的不同, SQL语句也会随之动态的改变. MyBatis中, 提供了一组标签用于实现动态SQL.

3.1

用于进行条件判断, test属性用于指定判断条件. 为了拼接条件, 在SQL语句后强行添加1=1的恒成立条件.

3.2

用于管理where子句. 有如下功能:

a) 如果没有条件, 不会生成where关键字

b) 如果有条件, 会自动添加where关键字

c) 如果第一个条件中有and, 去除之

3.3

这是一套标签, 功能类似于switch...case...

3.4

用于维护update语句中的set子句. 功能如下:

a) 满足条件时, 会自动添加set关键字

b) 会去除set子句中多余的逗号

c) 不满足条件时, 不会生成set关键字

int updUser(User user);

"updUser" parameterType="user">

update t_user

id=#{id},

"username != null and username != ''">

username=#{username},

"password != null and password != ''">

password=#{password},

where id=#{id}

3.5 <trim>

用于在前后添加或删除一些内容

a) prefix, 在前面添加内容

b) prefixOverrides, 从前面去除内容

c) suffix, 向后面添加内容

d) suffixOverrides, 从后面去除内容

"updUser" parameterType="user">

update t_user

"set" prefixOverrides="user" suffix="hahaha" suffixOverrides=",">

username=#{username},

where id=#{id}

3.6

用于对数据进行再加工, 用于模糊查询

1. 接口绑定方案

MyBatis中, 提供了一套接口绑定方案. 程序员可以提供一个接口, 然后提供对应接口的一个mapper.xml文件. MyBatis会自动将接口和xml文件进行绑定. 实际上就是MyBatis会根据接口和对应的xml文件创建接口的实现类. 换言之, 就是可以得到接口类型的对象, 方便方法的调用.

2.1 实现方式 2.1.1 定义接口

package com.bjsxt.mapper;

import java.util.List;

import com.bjsxt.pojo.User;

public interface UserMapper {

List selAll();

}

2.1.2 编写对应接口的映射文件

注意:

a) xml文件名要和接口名一致

b) namespace属性必须为接口的全限定路径

c) id属性必须和接口对应的方法名一致

"com.bjsxt.mapper.UserMapper">

2.1.3 在核心配置文件中扫描接口

a) 扫描单个接口, 可以使用mapper标签的class属性

"com.bjsxt.mapper.UserMapper" />

b) 当扫描多个接口时, 为简化配置, 可以使用package标签, 表示扫描对应包下的所有接口.

"com.bjsxt.mapper" />

2.1.4 应用

在使用时, 可以通过SqlSession对象的getMapper方法, 得到接口的代理对象, 从而可以调用定义好的方法.

@Test

public void testBind() {

SqlSession session = MyBatisUtil.getSession();

UserMapper mapper = session.getMapper(UserMapper.class);

List list = mapper.selAll();

for (User user : list) {

System.out.println(user);

}

session.close();

}

2.2 通过接口绑定解决多参数的传递 2.2.1 方式一

a) 接口中定义方法

User selByUP(String username, String password);

b) 映射文件中提供对应的标签. 此时, SQL语句中获取方式有两种, 通过#{index}或#{param+数字}的方式.

2.2.2 方式二

a) 接口中定义方法, 参数中使用@Param注解设定参数名用于在SQL语句中使用.

User selByUP(@Param("username") String username, @Param("password") String password);

b) 映射文件中提供对应的标签. 此时, SQL语句中获取方式有两种, 通过#{参数名称}或#{param+数字}的方式.

2. 动态SQL

根据条件的不同, SQL语句也会随之动态的改变. MyBatis中, 提供了一组标签用于实现动态SQL.

3.1

用于进行条件判断, test属性用于指定判断条件. 为了拼接条件, 在SQL语句后强行添加1=1的恒成立条件.

3.2

用于管理where子句. 有如下功能:

a) 如果没有条件, 不会生成where关键字

b) 如果有条件, 会自动添加where关键字

c) 如果第一个条件中有and, 去除之

3.3

这是一套标签, 功能类似于switch...case...

3.4

用于维护update语句中的set子句. 功能如下:

a) 满足条件时, 会自动添加set关键字

b) 会去除set子句中多余的逗号

c) 不满足条件时, 不会生成set关键字

int updUser(User user);

"updUser" parameterType="user">

update t_user

id=#{id},

"username != null and username != ''">

username=#{username},

"password != null and password != ''">

password=#{password},

where id=#{id}

3.5 <trim>

用于在前后添加或删除一些内容

a) prefix, 在前面添加内容

b) prefixOverrides, 从前面去除内容

c) suffix, 向后面添加内容

d) suffixOverrides, 从后面去除内容

"updUser" parameterType="user">

update t_user

"set" prefixOverrides="user" suffix="hahaha" suffixOverrides=",">

username=#{username},

where id=#{id}

3.6

用于对数据进行再加工, 用于模糊查询



回复

使用道具 举报