不屏蔽网站的浏览器,常州人才招聘网,wp做网站需要多久,网站建设招聘网前提说明#xff1a;
项目的springboot版本为#xff1a;version3.3.2/version
需要整合的mybatis-plus版本#xff1a;version3.5.7/version
废话不多说#xff0c;开始造吧
1.准备好数据库和表
2.配置全局文件application.properti…前提说明
项目的springboot版本为version3.3.2/version
需要整合的mybatis-plus版本version3.5.7/version
废话不多说开始造吧
1.准备好数据库和表
2.配置全局文件application.properties或者是application.yml配置mapper的映射文件路径
我这里是application.properties配置如下
#配置服务器端口号
server.port9090
#连接数据库
spring.application.namedormitory_backend
spring.datasource.urljdbc:mysql://localhost:3306/dormitory?allowPublicKeyRetrievaltrueserverTimezoneAsia/ShanghaiuseSSLfalse
spring.datasource.usernameroot
spring.datasource.passwordroot
spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver#mybatis-plus配置mapper文件路径
mybatis-plus.mapper-locationsclasspath:/mapper/*.xml
#打印sql日志
mybatis-plus.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.dormitory.dormitory_backend.mapperDEBUG
3.启动类配置包扫描注解和路径信息
配置之前先看下我这边的包结构 启动类造吧找到有SpringBootApplication注解的类就是了在其位置加上包扫描注解MapperScan(com.dormitory.dormitory_backend.mapper) 注意括号里面的内容需要根据自己的包结构来配置com.dormitory.dormitory_backend是我的包结构主要看java实在不懂那就任意打开一个XXXmapper.java文件看其包结构框起来的一整个复制粘贴上去就可以了 4.导入依赖
无效依赖---我尝试过导入网上的各种mybatis-plus的依赖
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.1/version
/dependency
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-annotation/artifactIdversion3.5.1/version
/dependency
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-core/artifactIdversion3.5.1/version
/dependency
至于为什么说是无效依赖导入以上的依赖无法使用mybatis-plus自带的方法
发送请求时后台产生以下报错
Invalid bound statement (not found): com.dormitory.dormitory_backend.mapper.AttendanceMapper.deleteById
AttendanceMapper的deleteById方法是无效的绑定语句也就是无法识别到mybatis-plus自带的删除方法但是可以识别自定义的mapper语句能正常进行增删改查也就是原mybatis的写法呗但是我想快速实现CRUD啊于是网上找了一个解决的方法配置一个类请看下文
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.MybatisXMLLanguageDriver;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.boot.autoconfigure.MybatisProperties;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;
import org.springframework.util.StringUtils;import javax.sql.DataSource;Configuration
public class MybatisPlusConfig {Autowiredprivate DataSource dataSource;Autowiredprivate MybatisProperties properties;Autowiredprivate ResourceLoader resourceLoader new DefaultResourceLoader();Autowired(required false)private Interceptor[] interceptors;Autowired(required false)private DatabaseIdProvider databaseIdProvider;/*** mybatis-plus分页插件*/Beanpublic PaginationInnerInterceptor paginationInnerInterceptor(){PaginationInnerInterceptor page new PaginationInnerInterceptor();return page;}/*** 这里全部使用mybatis-autoconfigure 已经自动加载的资源。不手动指定 p 配置文件和mybatis-boot的配置文件同步 return*/Beanpublic MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean() {MybatisSqlSessionFactoryBean mybatisPlus new MybatisSqlSessionFactoryBean();mybatisPlus.setDataSource(dataSource);mybatisPlus.setVfs(SpringBootVFS.class);if (StringUtils.hasText(this.properties.getConfigLocation()))mybatisPlus.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));if (!ObjectUtils.isEmpty(this.interceptors)) mybatisPlus.setPlugins(this.interceptors);MybatisConfiguration mc new MybatisConfiguration();mc.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);// 数据库字段设计为驼峰命名默认开启的驼峰转下划线会报错字段找不到mc.setMapUnderscoreToCamelCase(true);mybatisPlus.setConfiguration(mc);if (this.databaseIdProvider ! null) mybatisPlus.setDatabaseIdProvider(this.databaseIdProvider);if (StringUtils.hasLength(this.properties.getTypeAliasesPackage()))mybatisPlus.setTypeAliasesPackage(this.properties.getTypeAliasesPackage());if (StringUtils.hasLength(this.properties.getTypeHandlersPackage()))mybatisPlus.setTypeHandlersPackage(this.properties.getTypeHandlersPackage());if (!ObjectUtils.isEmpty(this.properties.resolveMapperLocations()))mybatisPlus.setMapperLocations(this.properties.resolveMapperLocations());return mybatisPlus;}
}配置了这个类确实是可以使用mybatis-plus自带的方法但是自己写的方法却无法实现了
实现配置类后请求自定义的新增方法 实现配置类后请求mybatis-plus自带的删除方法 几经辗转发现导入以下这个依赖可以实现同时使用自定义方法和mybatis-plus自带方法注意需要删除MybatisPlusConfig类以及将原先导入的三个依赖替换成新的依赖就可以了
有效依赖---导入mybatis-plus的依赖
---------------原依赖-----------------
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.1/version
/dependency
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-annotation/artifactIdversion3.5.1/version
/dependency
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-core/artifactIdversion3.5.1/version
/dependency--------------新依赖------------------
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-spring-boot3-starter/artifactIdversion3.5.7/version
/dependency
5.实现表对应的实体类
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;Data
AllArgsConstructor
NoArgsConstructor
TableName(t_attendance)
public class Attendance {ApiModelProperty(自增id)TableId(value id,type IdType.AUTO)private Integer id;ApiModelProperty(账号(学号))TableField(user_account)private String userAccount;ApiModelProperty(缺勤原因)TableField(reason)private String reason;
}
6.mapper和xml
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dormitory.dormitory_backend.entity.Attendance;
import org.apache.ibatis.annotations.Mapper;Mapper
public interface AttendanceMapper extends BaseMapperAttendance {int insertAttendance(Attendance attendance);int deleteAttendance(Integer id);
}
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttps://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.dormitory.dormitory_backend.mapper.AttendanceMapperinsert idinsertAttendance parameterTypecom.dormitory.dormitory_backend.entity.Attendanceinsert into t_attendance(user_account,reason) values(#{userAccount},#{reason})/insertdelete iddeleteAttendancedelete from t_attendance where id #{id}/delete/mapper
7.service和impl
public interface AttendanceService {int addAttendance(Attendance attendance);int deleteAttendance(Integer id);
}
import com.dormitory.dormitory_backend.entity.Attendance;
import com.dormitory.dormitory_backend.mapper.AttendanceMapper;
import com.dormitory.dormitory_backend.service.AttendanceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;Service
public class AttendanceServiceImpl implements AttendanceService {Autowiredprivate AttendanceMapper attendanceMapper;/*** 自定义的新增方法* param attendance* return*/Overridepublic int addAttendance(Attendance attendance) {int insert attendanceMapper.insertAttendance(attendance);return insert;}/*** plus自带的删除方法* param id* return*/Overridepublic int deleteAttendance(Integer id) {return attendanceMapper.deleteById(id);}
}
8.controller
import com.dormitory.dormitory_backend.entity.Attendance;
import com.dormitory.dormitory_backend.service.AttendanceService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;RestController
RequestMapping(/attendance)
Api(tags {考勤管理})
public class AttendanceController {Autowiredprivate AttendanceService attendanceService;PostMapping(/addAttendance)public int addAttendance(RequestBody Attendance attendance){int addAttendance attendanceService.addAttendance(attendance);return addAttendance;}DeleteMapping(/deleteAttendance)public int deleteAttendance(Integer id){int addAttendance attendanceService.deleteAttendance(id);return addAttendance;}
}9.实现 唠一唠出现Invalid bound statement (not found)问题的原因可能有哪些
1.全局配置文件没配好
检查全局配置文件application.properties或application.yml是否配置扫描mapper包的文件路径
#mybatis配置mapper文件路径
#mybatis.mapper-locationsclasspath:/mapper/*.xml
#mybatis-plus配置mapper文件路径
mybatis-plus.mapper-locationsclasspath:/mapper/*.xml
2.启动类没加包扫描注解
检查启动类上是否添加包扫描注解
SpringBootApplication
MapperScan(项目路径.mapper)
public class DormitoryBackendApplication {public static void main(String[] args) {SpringApplication.run(DormitoryBackendApplication.class, args);
}
3.没使用Mapper注解
XXXmapper.java类是否使用Mapper注解
Mapper
public interface AttendanceMapper extends BaseMapperAttendance {}
4.命名空间不正确
检查XXXmapper.xml的命名空间是否正确是否能跳转到对应的XXXmapper.java
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttps://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.dormitory.dormitory_backend.mapper.AttendanceMapper/mapper
正常能跳转会有箭头图标点击能跳转下载一个插件