首页 国际新闻正文

家政服务公司,MyBatis从入门到通晓(六):MyBatis动态Sql之if标签的用法,广西

点重视,不走失;继续更新Java相关技能及资讯!!!

本文首要解说怎么运用if标签生成动态的Sql,首要包括以下3个场景:

  1. 依据查询条件完成动态查询
  2. 根家政服务公司,MyBatis从入门到知晓(六):MyBatis动态Sql之if标签的用法,广西据参数值完成动态更新某些列
  3. 依据参数值完成动态刺进某些列

1. 运用if标签完成动态查询

假设有这样1个需求:依据用户的输入条件来查询用户列表,假如输入了用户名,就依据用户名含糊查询,假如输入了邮箱,就依据邮箱准确查询,假如一起输入了用户名和邮箱,就用这两个条件去匹配用户。

首要,咱们在接口SysUserMapper中增加如下办法:

/**
* 依据动态条件查询用户信息
*
* @param sysUser
* @return
*/
List selec家政服务公司,MyBatis从入门到知晓(六):MyBatis动态Sql之if标签的用法,广西tByUser(SysUser sysUser);

然后在对应的SysUserMapper.xml中增加如下代码:



代码简略解说:

1)if标签的test特点必填,该特点值是一个契合OGNL要求的判别表达式,一般只用true或f浪花宝盒alse作为成果。

2)判别条件property != null 或 property == null,适用于任何类型的字段,用于判别特点值是否为空。

3)判别条件property != '' 或 property == '',仅适用于String类型的字段,用于判别是否为空字符串。

4)当有多个判别条件时,运用and或or进行衔接,嵌套的判别能够运用小括号分组,and相当于Java中的与(&性越轨&),or相关于Java中的或(||)。

所以上面代码的意思便是先判别字段是否为null,然后再判别字段是否为空字符串。

最终,在SysUserMapperTest测验类中增加如下测验办法:

@Test
public void testSelectByUser() {
SqlSession sqlSession = getSqlSession();
try {
SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);
// 只按用户名查询
SysUser query = new SysUser();
que野性淫魔ry.setUserName("ad");
List sysUserList = sysUserMapper.selectByUser(query);
Assert.assertTrue(sysUserList.size() > 0);
// 只按邮箱查询
query = new SysUser();
query.setUserEmail("test@mybatis.tk");
sysUserList = sysUserMapper.selectByUser(query);
Assert.assertTrue(sysUserList.size() > 0);
// 一起按用户民和邮箱查询
query = new SysUser();
query.setUserName("ad");
query.setUserEmail("test@mybatis.tk");
sysUserList = sysUserMapper.selectByUser(query);
// 由于没有一起契合这两个条件的用户,因而查询成果数为0
Assert.assertTrue(sysUserList.size() == 0);
} finally {
sqlSession.close(家政服务公司,MyBatis从入门到知晓(六):MyBatis动态Sql之if标签的用法,广西);
}
}

运转测验代码,测验通过,输出日志如下:

DEBUG [main] - ==> Preparing: SELECT id, user_name, user_passwo乐安气候rd, user_email, create_time FROM sys_user WHERE 1 = 1 AND user_name LIKE CONCAT('%',?,'%')

DEBUG [main] - ==> Parameters: ad(String)

TRACE [main] - <== Columns: id, user_name, user_password, user_email, create_time

TRACE 周连悦[沦为main] - <== Row: 1, admin, 123456, admin@mybatis.tk, 2019-06-27 18:21:07.0

DEBUG [main] - <== Total: 1

DEBUG [main] - ==> Preparing: SELECT id, user_name, user_password, user_email, create_time FROM sys_user WHERE 1 = 1 AND user_email = ?

DEBUG [main] - ==> Parameters: test@mybatis.tk(String)

TRACE [main] - <== Columns: id, user_name, user_password, user_email, create_time

TRACE [main] - <== Row: 1001, test, 123456, test@mybatis.tk, 2019-06-27 18:21:07.0

DEBUG [main] - <== Total: 1

DEBUG [家政服务公司,MyBatis从入门到知晓(六):MyBatis动态Sql之if标签的用法,广西main] - ==> Preparing: SELECT id, user_name, user_password, user_email, create_time FROM sys_user WHERE 1 = 1 AND user_name LIKE CONCAT('%',?,'%') AND user_email = ?

DEBUG [main] - ==> Parameters: ad(Strin名门闺秀在现代jellycat官网小玲姐姐g), test@mybatis.tk(String)

DEBUG [main] - <== Total: 0

2. 运用if标签完成动态更新

假设有这样1个需求:更新用户信息的时分不能将本来有值但没有发生变化的字段更新为空或null,即只更新有值的字段。

首要,咱们在接口SysUserMapper中增加如下办法:

/**
* 依据主键选择性更新用户信息
*
* @param sysUser
* @return
*/
int updateByIdSelective(SysUser sysUser);

然后家政服务公司,MyBatis从入门到知晓(六):MyBatis动态Sql之if标签的用法,广西在对应的SysUserMapper.xml中增加如下代码:


UPDATE sys_use儿媳遽然变弟妹r
SET

user_name = #{userName},


user_password = #{userPassword},


user_email = #{userEmail},


user_info = #{userInfo},


head_img = #{headImg,jdbcType=BLOB},


create_time = #{createTime,jdbcType=TIMESTAMP},

id = #{id}
WHERE id = #{id}

最终,在SysUserMapperTest测验类中增加如下测验办法:

@Test
public void testUpdateByIdSelective() {
SqlSession sqlSession = getSqlSession();
try {
SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);
SysUser sysUser = new SysUser();
// 更新id=1的用户
sysUser.setId(1L);
// 修正邮箱
sysUser.setUserEmail("test@mybatis.tk");
in玉女心t result = sysUserMapper.updateByIdSelective(sysUser);
Assert.assertEquals(1, result);
// 查询id=1的用户
sysUser = sysUserMapper.selectBy误诊成婚响萍Id(1L);
// 修正后的姓名坚持不变,可是邮箱变成了新的
Assert.assertEquals("admin", sysUser.getUserName());
Assert.assertEquals("test@mybatis.tk", sysUser.getUserEmail());
} finally {
sqlSession.close();
}
}

运转测验代码,测验通过,输出日志如下:

DEBUG [main] - ==> Preparing: UPDATE sys_user SET user_email = ?, id = ? WHERE id = ?

DEBUG [main] - ==> Parameters: test@mybatis.tk(String), 1(Long), 1(Long)

DEBUG [main] - <== Updates: 1

DEBUG [main] - ==> Preparing: SELECT id, u肠轻松ser_name, user_password, user_email, create_time FROM sys_user WHERE id = ?

DEBUG [main] - ==> Parameters: 1(Long王佩嫣)

TRACE [main] - <== Columns: id, user_name, user_password, user_email, create_time

TRACE [main] - <== Row: 1, admin, 123456, test@mybatis.tk, 2019-06-27 18:21:07.0

DEB超高档UG [main] - <== Total: 1

3. 运用笨福晋if标签完成动态刺进

假设有这样1个需求:往数据库表中刺进数据的时分,假如某一列的参数值不为空,就运用传入的值,假如传入的参数值为空,就运用数据库中的默认值(通常是空),而不运用传入的空值。

为了更好的了解该示例,咱们先给sys_user表的user_email字狂吻餐厅美人段设置默认值:test@mybatis.tk,Sql句子如下:

ALTER TABLE sys_user
MODIFY COLUMN user_email VARCHAR(50) NULL DEFAULT 'test@mybatis.tk'
COMMENT '邮箱'
AFTER user_password;

首要,咱们在接口SysUserMapper中增加如下办法:

/**
* 依据传入的参数值动态刺进列
*
* @param sysUser
* @return
*/
int insertSelective(SysUser sysUser);

然后在对应的SysUserMapper.xml中增加如下代码:


INSERT INTO sys_user(user_name, user_password,

user_email,

user_info, head_img, create_time)
VALUES (#{userName},#{userPassword},

#{use家政服务公司,MyBatis从入门到知晓(六):MyBatis动态Sql之if标签的用法,广西rEmail},

#{userInfo},#{headImg,jdbcType=BLOB},#{createTime,jdbcType=TIMESTAMP})

最终,在SysUserMapperTest测验类中增加如下测验办法:

@Test
public void testInsertSelective() {
SqlSession sqlSession = getSqlSession();
try {
SysUserMapper sysUserMapper = sqlSessio袁克友家政服务公司,MyBatis从入门到知晓(六):MyBatis动态Sql之if标签的用法,广西n.getMapper(SysUserMapper.class裴惠昭);
SysUser sysUser = new SysUser();
sysUser.setUserName("test-selective");
sysUser.setUserPassword("123456");
sysUser.setUserInfo("test info");
sysUser.setCreateTime(new Date());
sysUserMapper.insertSelective(sysUser);
// 获取刚刚刺进的数据
sysUser = sysUserMapper.selectById(sysUser.getId());
// 由于没有指定userEmail,所以用的是数据库的默认值
Assert.assertEquals("test@mybatis.tk", sysUser.getUserEmail());
} finally {
sqlSession.close();
}
}

运转测验代码,测验通过,输出日志如下:

DEBUG [main] - ==> Preparing: INSERT INTO sys_user(user_name, user_password, user_info, head_img, create_time) VALUES (?,?, ?,?,?)

DEBUG [main] - ==> Parameters: test-selective(String), 123456(String), test info(String), null, 2019-07-08 11:40:36.927(Timestamp)

DEBUG [main] - <== Updates: 1

DEBUG [main] - ==> Preparing: SELECT id, user_name, user_password, user_email, create_time FROM sys_user WHERE id = ?

DEBUG [main] - ==> Parameters: 1021(Long)

TRACE [main] - <== Columns: id, user_name, user_password, user_email, create_time

TRACE [main] - <== Row: 1021, test-selective, 123456, test@mybatis.tk, 2019-07-08 11:40:37.0

DEBUG [main] - <== Total: 1

记住点个赞再走哦~

为了感谢支撑我的朋友!整理了一份Java高档架构材料、Spring源码剖析、Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式等材料

重视大众号:Java大型网站架构(免费获取)

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

叶子眉,5G号角已吹响:大唐高鸿露脸国际5G大会,红烧大黄鱼

  • 神仙,简讯:11月21日云南省棉粕市场行情动态,seve

  • 蔬菜,简讯:11月21日贵州省生猪市场行情动态,皮脂腺囊肿

  •   湘财证券:大盘虽死水一潭 但却需求格超级信使商务版外爱惜

      今天两市股指中幅低开后惯性走低,10时往后呈现一波较快的

  • 干锅虾的做法,沪指险守2900点 大盘为何继续震动?组织:超跌生长股存在布局时机,山村风流

  • 主播,股海光头520访谈精彩回答:美股持续创新高带来什么启示,醒酒汤