新建springboot项目 开发工具:idea2019。2,maven3 pom。xmldependencygroupIdorg。springframework。bootgroupIdspringbootstarterartifactIddependencydependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebartifactIddependencydependencygroupIdmysqlgroupIdmysqlconnectorjavaartifactIdscoperuntimescopedependencydependencygroupIdorg。projectlombokgroupIdlombokartifactIdoptionaltrueoptionaldependency!mybatisplus代码生成器dependencygroupIdcom。baomidougroupIdmybatisplusbootstarterartifactIdversion3。2。0versiondependencydependencygroupIdcom。baomidougroupIdmybatisplusgeneratorartifactIdversion3。2。0versiondependencydependencygroupIdorg。freemarkergroupIdfreemarkerartifactIdversion2。3。28versiondependencydependencygroupIdcom。alibabagroupIdfastjsonartifactIdversion1。2。47versiondependencyapplication。yml:server:port:8081servlet:contextpath:spring:datasource:driverclassname:com。mysql。cj。jdbc。Driverurl:jdbc:mysql:127。0。0。1:3306demo?serverTimezoneAsiaShanghaiuseUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLfalseallowPublicKeyRetrievaltrueusername:rootpassword:lyjajackson:dateformat:yyyyMMddHH:mm:sstimezone:GMT8serialization:writedatesastimestamps:falsemybatisplus:configuration:mapunderscoretocamelcase:trueautomappingbehavior:fulllogimpl:org。apache。ibatis。logging。stdout。StdOutImplmapperlocations:classpath:mapperMapper。xmlglobalconfig:逻辑删除配置dbconfig:删除前logicnotdeletevalue:1删除后logicdeletevalue:0mybatisplus分页插件MybatisPlusConfig:packagecom。example。conf;importcom。baomidou。mybatisplus。extension。plugins。PaginationInterceptor;importorg。springframework。context。annotation。Bean;importorg。springframework。context。annotation。Configuration;配置分页插件ConfigurationpublicclassMybatisPlusConfig{分页插件BeanpublicPaginationInterceptorpaginationInterceptor(){returnnewPaginationInterceptor();}}mybatisplus自动生成代码GeneratorCodeConfig。java:packagecom。example。conf;importcom。baomidou。mybatisplus。core。exceptions。MybatisPlusException;importcom。baomidou。mybatisplus。core。toolkit。StringUtils;importcom。baomidou。mybatisplus。generator。AutoGenerator;importcom。baomidou。mybatisplus。generator。config。;importcom。baomidou。mybatisplus。generator。config。rules。NamingStrategy;importcom。baomidou。mybatisplus。generator。engine。FreemarkerTemplateEngine;importjava。util。Scanner;自动生成mybatisplus的相关代码publicclassGeneratorCodeConfig{publicstaticStringscanner(Stringtip){ScannerscannernewScanner(System。in);StringBuilderhelpnewStringBuilder();help。append(请输入tip:);System。out。println(help。toString());if(scanner。hasNext()){Stringiptscanner。next();if(StringUtils。isNotEmpty(ipt)){returnipt;}}thrownewMybatisPlusException(请输入正确的tip!);}publicstaticvoidmain(String〔〕args){代码生成器AutoGeneratormpgnewAutoGenerator();全局配置GlobalConfiggcnewGlobalConfig();StringprojectPathSystem。getProperty(user。dir);gc。setOutputDir(projectPathsrcmainjava);gc。setAuthor(astupidcoder);gc。setOpen(false);实体属性Swagger2注解gc。setSwagger2(false);mpg。setGlobalConfig(gc);数据源配置DataSourceConfigdscnewDataSourceConfig();dsc。setUrl(jdbc:mysql:127。0。0。1:3306demo?serverTimezoneUTCuseUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLfalseallowPublicKeyRetrievaltrue);dsc。setDriverName(com。mysql。cj。jdbc。Driver);dsc。setUsername(root);dsc。setPassword(lyja);mpg。setDataSource(dsc);包配置PackageConfigpcnewPackageConfig();pc。setModuleName(scanner(模块名));pc。setParent(com。example);pc。setEntity(model。auto);pc。setMapper(mapper。auto);pc。setService(service);pc。setServiceImpl(service。impl);mpg。setPackageInfo(pc);自定义配置InjectionConfigcfgnewInjectionConfig(){OverridepublicvoidinitMap(){todonothing}};如果模板引擎是freemarkerStringtemplatePathtemplatesmapper。xml。ftl;如果模板引擎是velocityStringtemplatePathtemplatesmapper。xml。vm;自定义输出配置ListFileOutConfigfocListnewArrayList();自定义配置会被优先输出focList。add(newFileOutConfig(templatePath){OverridepublicStringoutputFile(TableInfotableInfo){自定义输出文件名,如果你Entity设置了前后缀、此处注意xml的名称会跟着发生变化!!returnprojectPathsrcmainresourcesmapperpc。getModuleName()tableInfo。getEntityName()MapperStringPool。DOTXML;}});cfg。setFileCreate(newIFileCreate(){OverridepublicbooleanisCreate(ConfigBuilderconfigBuilder,FileTypefileType,StringfilePath){判断自定义文件夹是否需要创建checkDir(调用默认方法创建的目录);returnfalse;}});cfg。setFileOutConfigList(focList);mpg。setCfg(cfg);配置模板TemplateConfigtemplateConfignewTemplateConfig();配置自定义输出模板指定自定义模板路径,注意不要带上。ftl。vm,会根据使用的模板引擎自动识别templateConfig。setEntity(templatesentity2。java);templateConfig。setService();templateConfig。setController();templateConfig。setXml(null);mpg。setTemplate(templateConfig);策略配置StrategyConfigstrategynewStrategyConfig();strategy。setNaming(NamingStrategy。underlinetocamel);strategy。setColumnNaming(NamingStrategy。underlinetocamel);strategy。setSuperEntityClass(com。baomidou。mybatisplus。extension。activerecord。Model);strategy。setEntityLombokModel(true);strategy。setRestControllerStyle(true);strategy。setEntityLombokModel(true);公共父类strategy。setSuperControllerClass(com。baomidou。ant。common。BaseController);写于父类中的公共字段strategy。setSuperEntityColumns(id);strategy。setInclude(scanner(表名,多个英文逗号分割)。split(,));strategy。setControllerMappingHyphenStyle(true);strategy。setTablePrefix(pc。getModuleName());mpg。setStrategy(strategy);mpg。setTemplateEngine(newFreemarkerTemplateEngine());mpg。execute();}}测试 建表: 执行GeneratorCodeConfig。java文件,输入表名user: 解决方法:在数据库连接中配置添加allowPublicKeyRetrievaltrue 查看生成的文件; 添加扫描mapper注解 启动springboot的application启动类:会报错,提示找不到mapper文件,我们需要在springboot启动类上添加扫描mapper的注解:packagecom。example;importorg。mybatis。spring。annotation。MapperScan;importorg。springframework。boot。SpringApplication;importorg。springframework。boot。autoconfigure。SpringBootApplication;SpringBootApplicationMapperScan(com。example。mapper)publicclassDemoApplication{publicstaticvoidmain(String〔〕args){SpringApplication。run(DemoApplication。class,args);}} UserController。java中新增接口:AutowiredprivateIUserServiceuserService;PostMapping(getUser)publicUsergetUser(){returnuserService。getById(1);} postman测试: 没问题。 上面是mybatisplus测试成功,下面我们继续测试我们自己写的sql是否成功。 在resources目录下新建mapper文件夹,新建UserMapper。xml文件:lt;?xmlversion1。0encodingUTF8?!DOCTYPEmapperPUBLICmybatis。orgDTDMapper3。0ENhttp:mybatis。orgdtdmybatis3mapper。dtdmappernamespacecom。example。mapper。auto。UserMapper!查找用户信息selectidfindAllUserresultTypecom。example。model。auto。Userselectfromuserselectmapper UserMapper。javapackagecom。example。mapper。auto;importcom。baomidou。mybatisplus。core。mapper。BaseMapper;importcom。example。model。auto。User;importjava。util。List;pMapper接口authorastupidcodersince20200513publicinterfaceUserMapperextendsBaseMapperUser{publicListUserfindAllUser();} IUserService:packagecom。example。service;importcom。baomidou。mybatisplus。extension。service。IService;importcom。example。model。auto。User;importjava。util。List;p服务类authorastupidcodersince20200513publicinterfaceIUserServiceextendsIServiceUser{publicListUserfindAllUser();} UseServiceImpl。java:packagecom。example。service。impl;importcom。example。model。auto。User;importcom。example。mapper。auto。UserMapper;importcom。example。service。IUserService;importcom。baomidou。mybatisplus。extension。service。impl。ServiceImpl;importorg。springframework。beans。factory。annotation。Autowired;importorg。springframework。stereotype。Service;importjava。util。List;p服务实现类authorastupidcodersince20200513ServicepublicclassUserServiceImplextendsServiceImplUserMapper,UserimplementsIUserService{AutowiredprivateUserMapperuserMapper;OverridepublicListUserfindAllUser(){returnuserMapper。findAllUser();}} UserController。java:packagecom。example。controller;importcom。example。model。auto。User;importcom。example。service。IUserService;importorg。springframework。beans。factory。annotation。Autowired;importorg。springframework。web。bind。annotation。PostMapping;importorg。springframework。web。bind。annotation。RequestMapping;importorg。springframework。web。bind。annotation。RestController;importjava。util。List;p前端控制器authorastupidcodersince20200513RestControllerRequestMapping(user)publicclassUserController{AutowiredprivateIUserServiceuserService;PostMapping(getUser)publicUsergetUser(){returnuserService。getById(1);}PostMapping(findAllUser)publicListUserfindAllUser(){returnuserService。findAllUser();}} 测试findAllUser接口: 常用的工具类: ResultInfo。javapackagecom。example。conf;importlombok。Data;importjava。io。Serializable;返回结果类统一封装DatapublicclassResultInfoimplementsSerializable{状态码privateIntegercode;消息privateStringmessage;数据对象privateObjectresult;privateIntegertotal;无参构造器publicResultInfo(){super();}publicResultInfo(Statusstatus){super();this。codestatus。code;this。messagestatus。message;}publicResultInforesult(Objectresult){this。resultresult;returnthis;}publicResultInfomessage(Stringmessage){this。messagemessage;returnthis;}publicResultInfototal(Integertotal){this。totaltotal;returnthis;}只返回状态,状态码,消息paramcodeparammessagepublicResultInfo(Integercode,Stringmessage){super();this。codecode;this。messagemessage;}只返回状态,状态码,数据对象paramcodeparamresultpublicResultInfo(Integercode,Objectresult){super();this。codecode;this。resultresult;}返回全部信息即状态,状态码,消息,数据对象paramcodeparammessageparamresultpublicResultInfo(Integercode,Stringmessage,Objectresult){super();this。codecode;this。messagemessage;this。resultresult;}} Status。javapackagecom。example。conf;枚举类对象publicenumStatus{公共SUCCESS(2000,成功),UNKNOWNERROR(9998,未知异常),SYSTEMERROR(9999,系统异常),INSUFFICIENTPERMISSION(4003,权限不足),WARN(9000,失败),REQUESTPARAMETERERROR(1002,请求参数错误),登录LOGINEXPIRE(2001,未登录或者登录失效),LOGINCODEERROR(2002,登录验证码错误),LOGINERROR(2003,用户名不存在或密码错误),LOGINUSERSTATUSERROR(2004,用户状态不正确),LOGOUTERROR(2005,退出失败,token不存在),LOGINUSERNOTEXIST(2006,该用户不存在),LOGINUSEREXIST(2007,该用户已存在);publicintcode;publicStringmessage;Status(intcode,Stringmessage){this。codecode;this。messagemessage;}}附录: 一份详尽的yml配置文件(关于数据源的配置比较详尽):server:port:8085servlet:contextpath:testspring:redis集群redis:host:127。0。0。1port:6379timeout:20000集群环境打开下面注释,单机不需要打开cluster:集群信息nodes:xxx。xxx。xxx。xxx:xxxx,xxx。xxx。xxx。xxx:xxxx,xxx。xxx。xxx。xxx:xxxx默认值是5一般当此值设置过大时,容易报:ToomanyClusterredirectionsmaxRedirects:3password:lyjaapplication:name:testjedis:pool:maxactive:8minidle:0maxidle:8maxwait:1database:0autoconfigure:exclude:com。alibaba。druid。spring。boot。autoconfigure。DruidDataSourceAutoConfiguredatasource:dynamic:设置默认的数据源或者数据源组,默认值即为masterprimary:masterstrict:falsedatasource:master:driverclassname:com。mysql。cj。jdbc。Driverurl:jdbc:mysql:127。0。0。1:3306test?serverTimezoneAsiaShanghaiuseUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLfalseusername:rootpassword:lyja数据源配置druid:druid连接池监控statviewservlet:enabled:trueurlpattern:druidloginusername:adminloginpassword:admin初始化时建立物理连接的个数initialsize:5最大连接池数量maxactive:30最小连接池数量minidle:5获取连接时最大等待时间,单位毫秒maxwait:60000配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒timebetweenevictionrunsmillis:60000连接保持空闲而不被驱逐的最小时间minevictableidletimemillis:300000用来检测连接是否有效的sql,要求是一个查询语句validationquery:selectcount()fromdual建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。testwhileidle:true申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。testonborrow:false归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。testonreturn:false是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。poolpreparedstatements:false要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。maxpoolpreparedstatementperconnectionsize:50配置监控统计拦截的filters,去掉后监控界面sql无法统计filters:stat,wall通过connectProperties属性来打开mergeSql功能;慢SQL记录connectionproperties:druid。stat。mergeSql:truedruid。stat。slowSqlMillis:500合并多个DruidDataSource的监控数据useglobaldatasourcestat:truefilter:stat:logslowsql:trueslowsqlmillis:1000mergesql:truewall:config:multistatementallow:trueservlet:multipart:开启multipart上传功能enabled:true文件写入磁盘的阈值filesizethreshold:2KB最大文件大小maxfilesize:200MB最大请求大小maxrequestsize:215MBmybatisplus:configuration:mapunderscoretocamelcase:trueautomappingbehavior:fulllogimpl:org。apache。ibatis。logging。stdout。StdOutImplmapperlocations:classpath:mapperMapper。xmlglobalconfig:逻辑删除配置dbconfig:删除前logicnotdeletevalue:1删除后logicdeletevalue:0logging:level:root:infocom。example:debug 总结: 所有的面试题目都不是一成不变的,特别是像一线大厂,上面的资料只是给大家一个借鉴作用,最主要的是给自己增加知识的储备,有备无患。最后给大家分享Spring系列的学习笔记和面试题,包含spring面试题、springcloud面试题、springboot面试题、spring教程笔记、springboot教程笔记、最新阿里巴巴开发手册(63页PDF总结)、2022年Java面试手册。一共整理了1184页PDF文档。私信博主(777)领取,祝大家更上一层楼!!! 原文作者:易水寒 原文出处:https:www。cnblogs。comliuyjtopp12976396。html