mybatis-plus使用selectById查询时表的主键不是id字段的解决办法

一、背景
项目:Springboot mybatis-plus mysql
今天项目中新建了一张表,表的主键是area_code,在程序中直接使用mybatis-plus内置的selectById方法进行表数据查询,查询时直接报错: 运行时异常: Invalid bound statement (not found): com.huanong.avatar.shuidi.mapper.SdWeatherThresholdMapper.selectById
二、原因
mybatis的selectById方法默认使用的主键名是id,而数据库中表的id是area_code,所以查询时会报错
三、解决
使用注解的方式,更改mybatis的selectById方法查询主键的名称即可,不多说,直接上代码
@TableId("area_code")
private String areaCode;

注:@TableId里面的字段需要同数据库的字段保持一致,不能同程序一致,

比如数据库的表字段area_code,程序是areaCdoe,注解中则需要写area_code,不然执行sql还会报错
org.springframework.jdbc.BadSqlGrammarException:
### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'areacode' in 'field list'
 
四、补充
@TableId(value = "area_code", type = IdType.INPUT)
@TableId 注解存在两个属性 value 和 IdType 
value 是 主键的名称 
IdType 代表 主键的属性,如果是自定义的Id,需要把该属性定义为INOUT-用户输入ID,不然在使用mybatis insert语句的时候会报错,java.sql.SQLException: Field 'id' doesn't have a default value
 
 
 
  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: MyBatis-Plus可以通过多种方式进行多表查询,以下是其中的一些方法: 1.使用注解方式 可以使用MyBatis-Plus提供的@Sql注解来自定义SQL语句进行多表查询,例如: ``` @Sql("select u.*, a.* from user u left join article a on u.id = a.user_id where u.id = #{userId}") UserAndArticle selectUserAndArticle(@Param("userId") Long userId); ``` 2.使用Wrapper Wrapper是MyBatis-Plus提供的一个查询构造器,可以用于多表查询,例如: ``` QueryWrapper<User> userWrapper = new QueryWrapper<>(); userWrapper.eq("id", userId); QueryWrapper<Article> articleWrapper = new QueryWrapper<>(); articleWrapper.eq("user_id", userId); List<User> userList = userMapper.selectList(userWrapper); List<Article> articleList = articleMapper.selectList(articleWrapper); ``` 3.使用LambdaWrapper LambdaWrapper是Wrapper的一种简化写法,可以通过Lambda表达式进行查询条件的构造,例如: ``` List<User> userList = userMapper.selectList(Wrappers.<User>lambdaQuery() .eq(User::getId, userId)); List<Article> articleList = articleMapper.selectList(Wrappers.<Article>lambdaQuery() .eq(Article::getUserId, userId)); ``` 以上是一些MyBatis-Plus进行多表查询的常见方法,可以根据实际情况选择合适的方式。 ### 回答2: mybatis-plus是一款支持多表查询Java持久层框架。在使用mybatis-plus进行多表查询时,可以通过以下方式实现: 1. 使用@TableName注解指定实体类对应的数据库表名,并使用@TableId注解指定主键字段。这样,mybatis-plus将会自动根据实体类的属性与数据库表的字段进行映射。 2. 创建相应的Mapper接口,并继承BaseMapper类。这个BaseMapper类包含了一系列常用的数据库操作方法,如selectByIdselectList等。同时,可以在Mapper接口中定义自定义的查询方法。 3. 在Mapper接口中定义多表查询方法,可以使用@Select注解,并在该方法中编写SQL语句进行多表查询。SQL语句可以使用JOIN、LEFT JOIN等关键字进行多表连接查询。 4. 在Service层或Controller层调用Mapper接口中定义的多表查询方法,获取多表查询结果。 需要注意的是,mybatis-plus对于多表查询的支持并不局限于以上几点。还可以使用Wrapper对象进行动态查询条件的组装,使用EntityWrapper对象设置条件,使用selectMaps方法返回多表查询结果的Map对象等。 总之,使用mybatis-plus进行多表查询需要定义相应的Mapper接口,并在该接口中编写多表查询的SQL语句,最后在Service或Controller层调用Mapper接口中定义的多表查询方法,即可实现多表查询。 ### 回答3: MyBatis-Plus 是一款基于 MyBatis 的增强工具,它提供了一系列的查询方法用于处理多表查询的场景。 在 MyBatis-Plus 中,我们可以使用 Wrapper(条件构造器)来实现多表查询。Wrapper 类是一个用于封装条件的对象,它可以通过链式调用的方式添加查询条件。我们可以通过创建一个 Wrapper 对象,并且在其上添加需要的查询条件来实现多表查询。 以查询用户表和订单表中的数据为例,首先我们需要定义一个 Wrapper 对象: Wrapper<User> wrapper = new QueryWrapper<>(); 在这个例子中,我们创建了一个 QueryWrapper 对象,表示查询条件是一个查询包装器。然后我们可以使用这个包装器对象来添加查询条件: wrapper.eq("username", "张三") .like("phone", "123"); 这里的 eq 和 like 方法用于添加相等和模糊匹配的条件,其中参数分别是字段名和字段值。这个例子表示查询用户名为"张三"且电话号码包含"123"的记录。 接下来,我们可以使用 MyBatis-Plus 提供的查询方法进行多表查询,如 selectJoinPage 方法: IPage<User> userPage = userMapper.selectJoinPage(new Page<>(1, 10), wrapper); 这里的 selectJoinPage 方法表示查询的是多个表,参数中的第一个 Page 对象表示分页信息,第二个参数 wrapper 表示查询条件。这个例子表示查询满足条件的结果,并进行分页。 总的来说,使用 MyBatis-Plus 进行多表查询的步骤可以概括为以下几个步骤:创建一个 Wrapper 对象,使用这个对象添加查询条件,然后使用查询方法进行查询。 通过使用 MyBatis-Plus 提供的条件构造器进行多表查询,我们可以更加灵活地处理复杂的查询场景,并且简化了查询代码的编写。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值