文章目录
前言增加操作\
前言
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。具体的定义大家可以参考官方文档MyBatis动态SQL。这篇文章我们将结合动态SQL完成更加复杂的 SQL 操作。
增加操作
想必大家肯定遇到过注册某个账号的时候需要输入自己的相关信息,其中这些信息包括:必填信息和非必填信息,对于这些必填信息,我们只需要在创建表的时候将这个字段设置为非 null 就可以了,而对于那些非必选的选项,我们又该如何定义呢?
这时就需要我们使用动态标签来判断了,对于这些可以传递值和可以不传递值的字段,我们可以使用
@Insert("insert into userinfo(username,`password`,age," +
"
"phone)" +
"values(#{username},#{password},#{age}," +
"
"#{phone})")
public Integer insertByCondition(UserInfo userInfo);
@Test
void insertByCondition() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("彭于晏");
userInfo.setPassword("123456");
userInfo.setAge(18);
userInfo.setPhone("132131231");
int ret = userInfoMapper.insertByCondition(userInfo);
log.info(ret + "被更新");
}
然后我们调用这个方法的时候,可以不为 gender 字段传递值,如果不传递值,那么这个字段的值就为创建表时定义的默认值,也可以传递值。然后我们运行一下看能达到效果吗?
这里为什么会报错呢?因为
public Integer insertByCondition(UserInfo userInfo);
有人会问了,使用
上面是使用注解的方式来实现 MyBatis 的,实现 MyBatis 不仅可以通过注解来实现,也可以通过 XML 的格式实现。我们看看 XML 如何实现动态 SQL。
首先我们需要告诉 MyBatis 我们的 xml 文件在哪里:
mybatis:
mapper-locations: classpath:mapper/**Mapper.xml
然后在 XML 文件中写入下面代码,SQL 语句写在
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
这里 namespace 的值是我们是使用了 MyBatis 框架操作数据库的类的全限定类名称。
insert into userinfo(username,`password`,age,
gender,
phone)
values(#{username},#{password},#{age},
#{gender},
#{phone})
因为 XML 文件本身就支持 JavaScript,所以我们这里不需要添加
发表评论