沈阳设计网站公司哪家好三亚市建设局官方网站
2026/1/16 20:08:52 网站建设 项目流程
沈阳设计网站公司哪家好,三亚市建设局官方网站,沙井做网站的公司,wordpress credits.php文章目录快速上手一、引入依赖 配置二、编码复杂操作一、常见注解1. TableName2. TableField3. TableId二、打印日志三、条件构造器1. QueryWrapper**查询****更新****删除**2. UpdateWrapper3. LambdaQueryWrapper4. LambdaUpdateWrapper四、自定义SQL**代码示例1*…文章目录快速上手一、引入依赖 配置二、编码复杂操作一、常见注解1. TableName2. TableField3. TableId二、打印日志三、条件构造器1. QueryWrapper**查询****更新****删除**2. UpdateWrapper3. LambdaQueryWrapper4. LambdaUpdateWrapper四、自定义SQL**代码示例1****代码示例2****代码示例3**官网地址 MyBatis-Plus为简化开发而生快速上手一、引入依赖 配置SpringBoot2dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.7/version/dependencySpringBoot3dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-spring-boot3-starter/artifactIdversion3.5.5/version/dependencyMySQLdependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependency配置数据库application.yml 文件# 数据库连接配置spring:datasource:url:jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncodingutf8useSSLfalseusername:rootpassword:rootdriver-class-name:com.mysql.cj.jdbc.Driver二、编码创建实体类 UserInfo实体类的属性名与表中的字段名一一对应importlombok.Data;importjava.util.Date;DatapublicclassUserInfo{privateIntegerid;privateStringusername;privateStringpassword;privateIntegerage;privateIntegergender;privateStringphone;privateIntegerdeleteFlag;privateDatecreateTime;privateDateupdateTime;}编写 Mapper 接口类MybatisPlus提供了一个基础的BaseMapper接口已经实现了单表的CRUD我们自定义的Mapper只需要继承这个BaseMapper就无需自己实现单表CRUD了如下所示MapperpublicinterfaceUserInfoMapperextendsBaseMapperUserInfo{}也可以在启动类上添加MapperScan扫描Mapper文件夹二选一即可。复杂操作一、常见注解在上面的程序中MyBatis是如何知道我们要操作的是哪张表表里有哪些字段呢我们来看下咱们Mapper的代码MapperpublicinterfaceUserInfoMapperextendsBaseMapperUserInfo{}UserInfoMapper在继承BaseMapper时指定了一个泛型这个UserInfo就是与数据库表相对应的实体类。MyBatis-Plus会根据这个实体类来推断表的信息。默认情况下表名实体类的驼峰表示法 - 蛇形表示法作为表名。比如UserInfo-user_info字段实体类的属性名 - 蛇形表示法作为字段名。比如deleteFlag-delete_flag主键默认为id那如果实体类和数据库不是按照上述规则定义的呢MyBatis-Plus也给我们提供了一下注解让我们标识表的信息。1.TableName通过TableName来标识实体类对应的表DataTableName(user_info)publicclassUserinfo{privateIntegerid;privateStringusername;privateStringpassword;privateIntegerage;privateIntegergender;privateStringphone;privateIntegerdeleteFlag;privateDatecreateTime;privateDateupdateTime;}2.TableField通过TableField来标识对应的字段名DatapublicclassUserinfo{privateIntegerid;privateStringusername;privateStringpassword;privateIntegerage;privateIntegergender;privateStringphone;TableField(delete_flag)// 定义和数据库字段名相同privateIntegerdeleteflag;privateDatecreateTime;privateDateupdateTime;}3.TableId通过TableId来指定对应的主键DatapublicclassUserinfo{TableId(id,typeIdType.AUTO)privateIntegeruserId;privateStringusername;privateStringpassword;privateIntegerage;privateIntegergender;privateStringphone;privateIntegerdeleteflag;privateDatecreateTime;privateDateupdateTime;}如果属性名和字段名一致直接加TableId注解就可以如果属性名和字段名不一致需要在TableId指明对应的字段名常见的IdType类型如下所示AUTO数据库自增 ID通常配合MySQL的AUTO_INCREMENT。由数据库生成插入时不需要自己赋值。NONE默认值不设置主键类型MyBatis-Plus 不会自动处理走数据库自身策略。INPUT主键由你自己传入手动 set。ASSIGN_IDMyBatis-Plus 内置的全局唯一 ID 生成器类似雪花算法适合分布式系统。插入前自动生成。ASSIGN_UUID自动生成一个UUID字符串作为主键。二、打印日志在配置文件中添加如下内容mybatis-plus:configuration:# 配置打印 MyBatis日志log-impl:org.apache.ibatis.logging.stdout.StdOutImpl三、条件构造器条件构造器MyBatis-Plus 提供了一套强大的条件构造器 Wrapper用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件无需编写繁琐的 SQL 语句从而提高开发效率并减少 SQL 注入的风险。以下是主要的 Wrapper 类及其功能AbstractWrapper这是一个抽象基类提供了所有Wrapper类共有的方法和属性。QueryWrapper用于构造查询条件在AbstractWrapper的基础上拓展了一个select方法允许指定查询字段。UpdateWrapper用于构造更新条件可以在更新数据时指定条件。LambdaQueryWrapper基于Lambda表达式的查询条件构造器它通过Lambda表达式来引用实体类的属性从而避免了硬编码字段名。LambdaUpdateWrapper基于Lambda表达式的更新条件构造器它允许你使用Lambda表达式来指定更新字段和条件同样避免了硬编码字段名的问题。1.QueryWrapper查询完成下述SQL查询SELECTid,username,password,ageFROMuser_infoWHEREage18ANDusernameLIKE%min%测试代码TestvoidtestQueryWrapper(){QueryWrapperUserInfouserInfoQueryWrappernewQueryWrapperUserInfo().select(id,username,password,age).eq(age,18).like(username,min);ListUserInfouserInfosuserInfoMapper.selectList(userInfoQueryWrapper);userInfos.forEach(System.out::println);}注意默认情况下 Mybatis-Plus 会根据TableFiled生成别名当指定了QueryWrapper的select属性后就仅仅是属性值而没有了别名。查询出来的结果会对应不上。更新完成下述SQL查询UPDATEuser_infoSETdelete_flag?WHEREage20测试代码TestvoidtestUpdateByQueryWrapper(){QueryWrapperUserInfouserInfoQueryWrappernewQueryWrapperUserInfo().lt(age,20);UserInfouserInfonewUserInfo();userInfo.setDeleteFlag(1);userInfoMapper.update(userInfo,userInfoQueryWrapper);}lt“less than” 的缩写表示小于le“less than or equal to” 的缩写表示小于等于ge“greater than or equal to” 的缩写表示大于等于gt“greater than” 的缩写表示大于eq“equals” 的缩写表示等于ne“not equals” 的缩写表示不等于删除完成下述SQL查询DELETEFROMuser_infoWHEREage18测试代码TestvoidtestDeleteByQueryWrapper(){QueryWrapperUserInfouserInfoQueryWrappernewQueryWrapperUserInfo().eq(age,18);userInfoMapper.delete(userInfoQueryWrapper);}2. UpdateWrapper对于更新可以直接使用UpdateWrapper在不创建实体对象的情况下直接设置更新字段和条件。完成下述SQL查询UPDATEuser_infoSETdelete_flag0,age5WHEREidIN(1,2,3)测试代码TestvoidtestUpdateByUpdateWrapper(){UpdateWrapperUserInfoupdateWrappernewUpdateWrapperUserInfo().set(delete_flag,0).set(age,5).in(id,List.of(1,2,3));userInfoMapper.update(updateWrapper);}完成下述SQL查询UPDATEuser_infoSETageage10WHEREidIN(1,2,3)测试代码TestvoidtestUpdateBySQLUpdateWrapper(){UpdateWrapperUserInfoupdateWrappernewUpdateWrapperUserInfo().setSql(age age10).in(id,List.of(1,2,3));userInfoMapper.update(updateWrapper);}3. LambdaQueryWrapperQueryWrapper和UpdateWrapper存在一个问题就是需要写死字段名如果字段名发生变更可能会因为测试不到位酿成事故。MyBatis-Plus 给我们提供了一种基于Lambda表达式的条件构造器它通过Lambda表达式来引用实体类的属性从而避免了硬编码字段名也提高了代码的可读性和可维护性。接下来我们看下具体使用TestvoidtestLambdaQueryWrapper(){QueryWrapperUserInfoqueryWrappernewQueryWrapperUserInfo();queryWrapper.lambda().select(UserInfo::getUsername,UserInfo::getPassword,UserInfo::getAge).eq(UserInfo::getUserId,1);userInfoMapper.selectList(queryWrapper).forEach(System.out::println);}4. LambdaUpdateWrapperTestvoidtestLambdUpdateByUpdateWrapper(){UpdateWrapperUserInfoupdateWrappernewUpdateWrapperUserInfo();updateWrapper.lambda().set(UserInfo::getDeleteFlag,0).set(UserInfo::getAge,5).in(UserInfo::getUserId,List.of(1,2,3));userInfoMapper.update(updateWrapper);}四、自定义SQL在实际的开发中MyBatis-Plus 提供的操作可能不能满足我们的实际需求MyBatis-Plus 也提供了自定义 SQL 的功能我们可以利用Wrapper构造查询条件再结合Mapper编写SQL。 为了使用这一功能mybatis-plus 版本不低于 3.0.7代码示例1完成下述SQL查询selectid,username,password,ageFROMuser_infoWHEREusernameadminMapper:MapperpublicinterfaceUserInfoMapperextendsBaseMapperUserInfo{Select(select id,username,password,age FROM user_info ${ew.customSqlSegment})ListUserInfoqueryUserByCustom(Param(Constants.WRAPPER)WrapperUserInfowrapper);}测试代码TestvoidtestQueryUserByCustom(){QueryWrapperUserInfoqueryWrappernewQueryWrapperUserInfo().eq(username,admin);userInfoMapper.queryUserByCustom(queryWrapper).forEach(System.out::println);}注意事项参数命名在自定义 SQL 传递 Wrapper 对象作为参数时参数名必须为ew或者使用注解Param(Constants.WRAPPER)明确指定参数为 Wrapper 对象。在SQL语句中使用${ew.customSqlSegment}来引用 Wrapper 对象生成的 SQL 片段。不支持基于 entity 的 where 语句自定义 SQL 时Wrapper 对象不会基于实体类自动生成 where 子句你需要手动编写完整的 SQL 语句。代码示例2MyBatis-Plus 在 MyBatis 的基础上只做增强不做改变所以也支持XML的实现方式。上述功能也可以使用XML的方式完成配置mapper路径mybatis-plus:mapper-locations:classpath*:/mapper/**.xml# Mapper.xml定义方法MapperpublicinterfaceUserInfoMapperextendsBaseMapperUserInfo{ListUserInfoqueryUserByCustom2(Param(Constants.WRAPPER)WrapperUserInfowrapper);}编写XML?xml version1.0 encodingUTF-8?!DOCTYPEmapperPUBLIC-//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmappernamespacecom.bite.mybatis.plus.mapper.UserInfoMapperselectidqueryUserByCustom2select id,username,password,age FROM user_info ${ew.customSqlSegment}/select/mapper测试TestvoidtestQueryUserByCustom2(){QueryWrapperUserInfoqueryWrappernewQueryWrapperUserInfo().eq(username,admin);userInfoMapper.queryUserByCustom2(queryWrapper).forEach(System.out::println);}代码示例3完成下述 SQL 查询UPDATEuser_infoSETageage10WHEREidIN(1,2,3)Mapper:Update(UPDATE user_info SET age age #{addAge} ${ew.customSqlSegment})voidupdateUserByCustom(Param(addAge)intaddAge,Param(ew)WrapperUserInfowrapper);测试代码TestvoidupdateUserByCustom(){QueryWrapperUserInfoqueryWrappernewQueryWrapperUserInfo().in(id,List.of(1,2,3));userInfoMapper.updateUserByCustom(10,queryWrapper);}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询