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">
select * from t_user
|
2.1.3 在核心配置文件中扫描接口
a) 扫描单个接口, 可以使用mapper标签的class属性
"com.bjsxt.mapper.UserMapper" />
|
b) 当扫描多个接口时, 为简化配置, 可以使用package标签, 表示扫描对应包下的所有接口.
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+数字}的方式.
select * from t_user where username=#{0} and password=#小贝
|
2.2.2 方式二
a) 接口中定义方法, 参数中使用@Param注解设定参数名用于在SQL语句中使用.
User selByUP(@Param("username") String username, @Param("password") String password);
|
b) 映射文件中提供对应的标签. 此时, SQL语句中获取方式有两种, 通过#{参数名称}或#{param+数字}的方式.
select * from t_user where username=#{username} and password=#{password}
|
2. 动态SQL
根据条件的不同, SQL语句也会随之动态的改变. MyBatis中, 提供了一组标签用于实现动态SQL.
3.1
用于进行条件判断, test属性用于指定判断条件. 为了拼接条件, 在SQL语句后强行添加1=1的恒成立条件.
select * from t_user where 1=1
"username != null and username != ''">
and username=#{username}
"password != null and password != ''">
and password=#{password}
|
3.2
用于管理where子句. 有如下功能:
a) 如果没有条件, 不会生成where关键字
b) 如果有条件, 会自动添加where关键字
c) 如果第一个条件中有and, 去除之
select * from t_user
"username != null and username != ''">
and username=#{username}
"password != null and password != ''">
and password=#{password}
|
3.3
这是一套标签, 功能类似于switch...case...
select * from t_user
"username != null and username != ''">
and username = #{username}
"password != null and password != ''">
and password = #{password}
and 1=1
|
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
用于对数据进行再加工, 用于模糊查询
select * from t_user
"username!=null and username!=''">
"username" value="'%' + username + '%'"/>
and username like #{username}
|
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">
select * from t_user
|
2.1.3 在核心配置文件中扫描接口
a) 扫描单个接口, 可以使用mapper标签的class属性
"com.bjsxt.mapper.UserMapper" />
|
b) 当扫描多个接口时, 为简化配置, 可以使用package标签, 表示扫描对应包下的所有接口.
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+数字}的方式.
select * from t_user where username=#{0} and password=#小贝
|
2.2.2 方式二
a) 接口中定义方法, 参数中使用@Param注解设定参数名用于在SQL语句中使用.
User selByUP(@Param("username") String username, @Param("password") String password);
|
b) 映射文件中提供对应的标签. 此时, SQL语句中获取方式有两种, 通过#{参数名称}或#{param+数字}的方式.
select * from t_user where username=#{username} and password=#{password}
|
2. 动态SQL
根据条件的不同, SQL语句也会随之动态的改变. MyBatis中, 提供了一组标签用于实现动态SQL.
3.1
用于进行条件判断, test属性用于指定判断条件. 为了拼接条件, 在SQL语句后强行添加1=1的恒成立条件.
select * from t_user where 1=1
"username != null and username != ''">
and username=#{username}
"password != null and password != ''">
and password=#{password}
|
3.2
用于管理where子句. 有如下功能:
a) 如果没有条件, 不会生成where关键字
b) 如果有条件, 会自动添加where关键字
c) 如果第一个条件中有and, 去除之
select * from t_user
"username != null and username != ''">
and username=#{username}
"password != null and password != ''">
and password=#{password}
|
3.3
这是一套标签, 功能类似于switch...case...
select * from t_user
"username != null and username != ''">
and username = #{username}
"password != null and password != ''">
and password = #{password}
and 1=1
|
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
用于对数据进行再加工, 用于模糊查询
select * from t_user
"username!=null and username!=''">
"username" value="'%' + username + '%'"/>
and username like #{username}
|
|