【MybatisPlus】条件构造器、自定义SQL、Service接口

简介: 【MybatisPlus】条件构造器、自定义SQL、Service接口

一、条件构造器

MybatisPlus支持各种复杂的where条件,可以满足日常开发的所有需求:






BaseMapper中的方法参数可以是一个条件构造器Wrapper,通过继承关系可以看出查询的条件构造器(QueryWrapper)和修改的条件构造器(UpdateWrapper)都继承自AbstractWrapper,在AbstractWrapper中有多个方法可以使用,如eq表示等于,ge表示大于等于等等,只要在where条件中用到的都可以在AbstractWrapper中对应的方法实现。

而QueryWrapper和UpdateWrapper处理继承父类AbstractWrapper的所有功能外,还拓展了自己的功能,QueryWrapper就是在父类的基础上拓展类select的功能,同理UpdateWrapper就是拓展了更新相关的功能,即setSql方法,通过字符串的形式把set的部分写出来,然后拼到sql语句中。



还有一个构造器是在构造条件时基于Lambda的语法实现上述功能的

1.1 基于QueryWrapper查询

@Test
void testQueryWrapper() {
    //1.构建查询条件
    QueryWrapper<User2> wrapper = new QueryWrapper<User2>()
            .select("id","username","password")
            .like("username","a");
    //2.查询
    List<User2> user2s = user2Mapper.selectList(wrapper);
    user2s.forEach(System.out::println);
}

1.2 基于QueryWrapper修改

@Test
void testUpdateByQueryWrapper() {
    //要更新的数据
    User2 user2 = new User2();
    user2.setPassword("000");
    //更新的条件
    QueryWrapper<User2> wrapper = new QueryWrapper<User2>()
            .eq("username","zhaoliu");
    //执行更新
    user2Mapper.update(user2,wrapper);
}

1.3 基于UpdateWrapper修改

@Test
void testUpdateWrapper() {
    UpdateWrapper<User2> wrapper = new UpdateWrapper<User2>()
            .setSql("password = '111'")
            .in("id",1,3,4);
    //执行更新
    user2Mapper.update(null,wrapper);
}

1.4 基于LambdaQueryWrapper查询

@Test
void testLambdaQueryWrapper() {
    //1.构建查询条件
    LambdaQueryWrapper<User2> wrapper = new LambdaQueryWrapper<User2>()
            .select(User2::getId,User2::getUsername,User2::getPassword)
            .like(User2::getUsername,"a");
    //2.查询
    List<User2> user2s = user2Mapper.selectList(wrapper);
    user2s.forEach(System.out::println);
}

二、自定义SQL

  • 我们可以利用MybatisPlus的Wrapper来构建复杂的where条件,然后自己定义SQL语句中剩下的部分

2.1 基于Wrapper来构建where条件

@Test
void testCustomSqlUpdate() {
    //更新条件
    String password = "333";
    //执行更新
    QueryWrapper<User2> wrapper = new QueryWrapper<User2>().in("id",2,5,6);
    //调用自定义方法
    user2Mapper.updatePwdByIds(wrapper,password);
}

2.2 在mapper>方法参数中用Param注解声明wrapper变量名称,必须是ew

void updatePwdByIds(@Param("ew") QueryWrapper<User2> wrapper,@Param("password") String password);

2.3 自定义SQL,并使用Wrapper条件

@Update("update tb_user2 set password = #{password} ${ew.customSqlSegment}")
void updatePwdByIds(@Param("ew") QueryWrapper<User2> wrapper,@Param("password") String password);

三、Service接口

3.1 Service接口基本用法

  • 自定义Service接口继承IService接口
public interface IUserService extends IService<User2> {
}
  • 自定义Service实现类,实现自定义接口并继承Servicelmpl类
public class UserServiceImpl extends ServiceImpl<User2Mapper,User2> implements IUserService {
}
  • Service新增:
@Test
void testSaveUser() {
    User2 user = new User2();
    user.setId(7);
    user.setUsername("老七");
    user.setPassword("777");
    userService.save(user);
}
  • Service查询:
@Test
void testQuery() {
    List<Integer> ids = new ArrayList<>();
    ids.add(1);
    ids.add(3);
    ids.add(5);
    List<User2> user2s = userService.listByIds(ids);
    user2s.forEach(System.out::println);
}


相关文章
|
3月前
|
SQL XML Java
8、Mybatis-Plus 分页插件、自定义分页
这篇文章介绍了Mybatis-Plus的分页功能,包括如何配置分页插件、使用Mybatis-Plus提供的Page对象进行分页查询,以及如何在XML中自定义分页SQL。文章通过具体的代码示例和测试结果,展示了分页插件的使用和自定义分页的方法。
8、Mybatis-Plus 分页插件、自定义分页
|
3月前
|
SQL Java 测试技术
3、Mybatis-Plus 自定义sql语句
这篇文章介绍了如何在Mybatis-Plus框架中使用自定义SQL语句进行数据库操作。内容包括文档结构、编写mapper文件、mapper.xml文件的解释说明、在mapper接口中定义方法、在mapper.xml文件中实现接口方法的SQL语句,以及如何在单元测试中测试自定义的SQL语句,并展示了测试结果。
3、Mybatis-Plus 自定义sql语句
|
12天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
1月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
30 10
|
2月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
3月前
|
SQL Java 数据库连接
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
文章讲述了在使用Mybatis时遇到的资源文件找不到的问题,并提供了通过修改Maven配置来解决资源文件编译到target目录下的方法。
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1
|
3月前
|
SQL Java 数据库连接
Mybatis系列之 动态SQL
文章详细介绍了Mybatis中的动态SQL用法,包括`<if>`、`<choose>`、`<when>`、`<otherwise>`、`<trim>`和`<foreach>`等元素的应用,并通过实际代码示例展示了如何根据不同条件动态生成SQL语句。
|
3月前
|
SQL Java 关系型数据库
SpringBoot 系列之 MyBatis输出SQL日志
这篇文章介绍了如何在SpringBoot项目中通过MyBatis配置输出SQL日志,具体方法是在`application.yml`或`application.properties`中设置MyBatis的日志实现为`org.apache.ibatis.logging.stdout.StdOutImpl`来直接在控制台打印SQL日志。
SpringBoot 系列之 MyBatis输出SQL日志
|
3月前
|
SQL 关系型数据库 MySQL
解决:Mybatis-plus向数据库插入数据的时候 报You have an error in your SQL syntax
该博客文章讨论了在使用Mybatis-Plus向数据库插入数据时遇到的一个常见问题:SQL语法错误。作者发现错误是由于数据库字段中使用了MySQL的关键字,导致SQL语句执行失败。解决方法是将这些关键字替换为其他字段名称,以避免语法错误。文章通过截图展示了具体的操作步骤。