当前位置: 首页 > news >正文

做网站售后好的公司求有颜色的公众号

做网站售后好的公司,求有颜色的公众号,网站建设与维护1997年,网站开发合同样本目录 一#xff0c;简介 1. 什么是mybatis-plus2.mybatis-plus特点 二#xff0c;搭建基本环境 1. 导入基本依赖#xff1a;2. 编写配置文件3. 创建实体类4. 编写controller层5. 编写service接口6. 编写service层7. 编写mapper层 三#xff0c;基本知识介绍 1. 基本注解 T…目录 一简介 1. 什么是mybatis-plus2.mybatis-plus特点 二搭建基本环境 1. 导入基本依赖2. 编写配置文件3. 创建实体类4. 编写controller层5. 编写service接口6. 编写service层7. 编写mapper层 三基本知识介绍 1. 基本注解 TableNameTableIdTableFiledTableLogicVersionTransient 2. Wrapper的介绍* QueryWrapperUpdateWrapperLambdaQueryWrapperLambdaUpdateWrapperWrappers 3. 分页查询 1. 配置相应的拦截器2. 实现分页逻辑 四结语 一简介 1. 什么是mybatis-plus MyBatis-Plus简称MP是一个MyBatis的增强工具旨在在MyBatis的基础上只做增强不做改变以简化开发、提高效率。MyBatis-Plus保持了MyBatis原有的所有特性同时增加了一些实用的功能使得开发者能够更加便捷地进行数据库操作。以下是MyBatis-Plus的一些主要特点和功能2.mybatis-plus特点 无侵入引入MyBatis-Plus不会对现有的MyBatis工程产生影响可以无缝集成到现有的项目中。 损耗小启动时自动注入基本的CRUD操作几乎不消耗额外的性能可以直接面向对象操作数据库。强大的CRUD操作内置通用Mapper、通用Service通过少量配置即可实现单表的大部分CRUD操作。同时MyBatis-Plus提供了强大的条件构造器满足复杂的查询需求。支持Lambda形式调用利用Lambda表达式方便地编写查询条件避免了字段名称错误的问题。支持主键自动生成提供了多种主键生成策略包括分布式唯一ID生成器解决了主键问题。支持ActiveRecord模式通过继承特定的基类可以像操作对象一样操作数据库。支持自定义全局通用操作允许开发者注入自己的通用方法。内置分页插件基于MyBatis的物理分页开发者可以轻松实现分页查询。支持多种数据库兼容MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、PostgreSQL、SQL Server等多种数据库。内置性能分析插件可以输出SQL语句及其执行时间有助于快速定位慢查询。内置全局拦截插件提供全表删除、更新操作的智能分析阻断防止误操作。 二搭建基本环境 1. 导入基本依赖 !--mybatis-plus依赖--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.7/version/dependency!--mysql连接依赖--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/version/dependency!--连接池依赖--dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.1.18/version/dependency2. 编写配置文件 spring:data:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatis_study?serverTimezoneAsia/ShanghaiuseUnicodetruecharacterEncodingutf-8useSSLfalseusername: rootpassword: roottype: com.alibaba.druid.pool.DruidDataSource3. 创建实体类 package org.example.pojo;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName;import java.util.Date; TableName(student) public class Student {TableId(type IdType.AUTO)private int id;private String studentNumber;private String name;private int gender; // 0 表示女性1 表示男性private Date dateOfBirth;// Getters and Setters}4. 编写controller层 package org.example.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController RequestMapping(/students) public class StudentController {}5. 编写service接口 package org.example.service;import com.baomidou.mybatisplus.extension.service.IService; import org.example.pojo.Student;public interface StudentService extends IServiceStudent { }6. 编写service层 package org.example.service.serviceImpl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.example.mapper.StudentMapper; import org.example.pojo.Student; import org.example.service.StudentService; import org.springframework.stereotype.Service;Service public class StudentServiceImpl extends ServiceImplStudentMapper, Student implements StudentService {}7. 编写mapper层 package org.example.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.example.pojo.Student;Mapper public interface StudentMapper extends BaseMapperStudent { }三基本知识介绍 1. 基本注解 TableName 主要用于指定表名实现实体类与表名的绑定作用于类上适用于表名与实体类名称不统一的情况统一的情况可以不用写。 import com.baomidou.mybatisplus.annotation.TableName; //此处表名称为t_user实体类名称为User不统一 TableName(t_user) public class User {private Long id;private String name;private Integer age;private String email;// Getters and Setters }如果所有的表结构与实体类只是多了一个前缀可以直接在配置文件里面配置全局的前缀就可以不使用注解了两种方式都可以根据具体场景选择配置如下 mybatis-plus:global-config:db-config:table-prefix: t_TableId 作用于主键上指明主键字段并设置主键的生成方式。 import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType;TableName(user_info) // 指定该实体类对应的数据表名 public class UserInfo { //此处value也可以作用于映射当实体类中 //的id字段名和数据库中的字段名不相同时可以使用其属性做增强TableId(value id, type IdType.AUTO) // 标记为主键并指定主键生成策略为自增private Long id;private String username;private String password;// Getters and Setterspublic Long getId() {return id;}public void setId(Long id) {this.id id;}public String getUsername() {return username;}public void setUsername(String username) {this.username username;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;} }注解属性value指定表中主键字段多用于主键字段和实体类字段不同意typeid生成策略对于IdType做出如下说明 属性 说明 适用场景 AUTO 数据库自增主键 适用于 MySQL、SQL Server 等支持自增主键的数据库 NONE 不使用任何主键生成策略 通常用于主键已经存在的情况 ASSIGN_ID 全局唯一ID默认基于Snowflake算法生成 适用于分布式系统确保全局唯一性 ASSIGN_UUID 全局唯一UUID生成32位的字符串 适用于需要字符串主键的场景 INPUT 自定义输入主键值 适用于某些特殊场景如导入数据时需要手动指定主键 TableFiled 改注解作用众多多用于表字段和实体类字段名称不统一做映射处理也可用于零时字段不存入数据库或者是一些字段的填充处理此处需要编写填充处理器。 import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;import java.util.Date;TableName(user_info) public class UserInfo {TableId(value id, type IdType.AUTO)private Long id;TableField(username)private String username;//此字段不参与查询TableField(password, selectfalse )private String password;TableField(email)private String email;//注意此处应该编写相应的填充逻辑TableField(value create_time, fill FieldFill.INSERT)private Date createTime;TableField(value update_time, fill FieldFill.UPDATE)private Date updateTime;TableField(exist false)private String tempField; // 临时字段不在数据库中// Getters and Setterspublic Long getId() {return id;}public void setId(Long id) {this.id id;}public String getUsername() {return username;}public void setUsername(String username) {this.username username;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;}public String getEmail() {return email;}public void setEmail(String email) {this.email email;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime createTime;}public Date getUpdateTime() {return updateTime;}public void setUpdateTime(Date updateTime) {this.updateTime updateTime;}public String getTempField() {return tempField;}public void setTempField(String tempField) {this.tempField tempField;} }属性说明value:同上面注解一样用于字段绑定单个属性的时候可以不写select在值为false的情况下用于设置不参查询查询之后不会返回回来exist 用于类中的零时变量数据库中没有该字段只在java中使用fill用于自动填充比如create_time,update_time这一类但需要编写相应的处理器对应处理器代码 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component;import java.util.Date;Component public class MyMetaObjectHandler implements MetaObjectHandler {Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, createTime, Date.class, new Date());this.strictInsertFill(metaObject, updateTime, Date.class, new Date());}Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, updateTime, Date.class, new Date());} }TableLogic 该字段用于指定逻辑删除的字段当执行删除语句时做更新操作只改变当前字段的值设置为删除状态数据不做真实处理查询时也只查询状态为未删除的数据此过程不需要手动实现mybatis-plus已经帮忙实现了我们只需要添加字段设置相应的状态值注该字段也需要加入到对应的表里 import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType;TableName(user_info) public class UserInfo {TableId(value id, type IdType.AUTO)private Long id;private String username;private String password;private String email;TableLogicprivate Integer isDeleted;// Getters and Setterspublic Long getId() {return id;}public void setId(Long id) {this.id id;}public String getUsername() {return username;}public void setUsername(String username) {this.username username;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;}public String getEmail() {return email;}public void setEmail(String email) {this.email email;}public Integer getIsDeleted() {return isDeleted;}public void setIsDeleted(Integer isDeleted) {this.isDeleted isDeleted;} }在配置文件中添加如下配置 mybatis-plus:global-config:db-config:# 逻辑删除字段名logic-delete-field: deleted# 逻辑删除字面值未删除为0logic-not-delete-value: 0# 逻辑删除字面值删除为1logic-delete-value: 1Version 用于配置乐观锁字段配置之后的更新操作都会先去比较版本然后在去操作整体采用cas机制实现。注该字段也需要加入到对应的表里 import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.Version;TableName(order_info) public class OrderInfo {TableId(value id, type IdType.AUTO)private Long id;private String orderNo;private Double amount;Versionprivate Integer version;// Getters and Setterspublic Long getId() {return id;}public void setId(Long id) {this.id id;}public String getOrderNo() {return orderNo;}public void setOrderNo(String orderNo) {this.orderNo orderNo;}public Double getAmount() {return amount;}public void setAmount(Double amount) {this.amount amount;}public Integer getVersion() {return version;}public void setVersion(Integer version) {this.version version;} }此处需加相关的拦截器 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class MyBatisPlusConfig {Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return interceptor;} }乐观锁的作用乐观锁假设在并发环境中冲突较少因此在操作数据时不立即获取锁而是等到提交更新时才检查是否有其他事务修改过数据。如果发现数据已被修改则更新失败通常会抛出异常。特点在提交更新时检查版本号如果版本号匹配则更新成功否则更新失败。效果多个事务可以同时读取和处理数据但在提交更新时会检查版本号确保数据的一致性。Transient 作用于实体类字段使其不参与数据库的操作其中包括InsertUpdateSelectTableField(existfalse)作用相同充当零时变量。 TableName(user) public class User {TableId(type IdType.AUTO)private Long id;private String name;Transientprivate String tempField;// getters and setters } 2. Wrapper的介绍* 概念MyBatisPlus提供了QueryWrapper、LambdaQueryWrapper、UpdateWrapper和LambdaUpdateWrapper等条件类大大简化了我们的开发可以使代码更加清晰和易于管理其中包括多条件查询、排序、条件优先级以及有条件时才加入条件的场景并提供了示例代码展示如何进行数据库查询和更新操作。大致的条件此处粗略列举 方法 描述 eq 等于 ne 不等于 gt 大于 ge 大于等于 lt 小于 le 小于等于 like 模糊查询 notLike 反向模糊查询 in 在某集合内 notIn 不在某集合内 isNull 为空 isNotNull 不为空 between 在某个区间内 notBetween 不在某个区间内 set 设置字段值 QueryWrapper 作用于查询设置查询条件。 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers;public class UserService {private UserMapper userMapper;public ListUser getUsersByConditions() {// 创建 QueryWrapper 对象QueryWrapperUser queryWrapper new QueryWrapper();// 添加查询条件queryWrapper.eq(name, 张三).ge(age, 18).orderByDesc(create_time);// 执行查询return userMapper.selectList(queryWrapper);} }此处执行的sql语句 SELECT * FROM user WHERE name 张三 AND age 18 ORDER BY create_time DESC;UpdateWrapper 作用于更新设置条件。 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers;public class UserService {private UserMapper userMapper;public int updateUserById() {// 创建 UpdateWrapper 对象UpdateWrapperUser updateWrapper new UpdateWrapper();// 添加更新条件updateWrapper.eq(id, 1);// 创建要更新的对象User user new User();user.setName(李四);// 执行更新return userMapper.update(user, updateWrapper);} }此处执行的sql语句 UPDATE user SET name 李四 WHERE id 1;LambdaQueryWrapper 在QueryWrapper做了增强作用一样用于设置查询条件。 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers;public class UserService {private UserMapper userMapper;public ListUser getUsersByLambdaConditions() {// 创建 LambdaQueryWrapper 对象LambdaQueryWrapperUser lambdaQueryWrapper new LambdaQueryWrapper();// 添加查询条件lambdaQueryWrapper.eq(User::getName, 张三).ge(User::getAge, 18).orderByDesc(User::getCreateTime);// 执行查询return userMapper.selectList(lambdaQueryWrapper);} }此处执行的sql语句 SELECT * FROM user WHERE name 张三 AND age 18 ORDER BY create_time DESC;LambdaUpdateWrapper 在UpdateWrapper做了增强作用一样用于设置跟新条件。 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers;public class UserService {private UserMapper userMapper;public int updateUserByIdWithLambda() {// 创建 LambdaUpdateWrapper 对象LambdaUpdateWrapperUser lambdaUpdateWrapper new LambdaUpdateWrapper();// 添加更新条件lambdaUpdateWrapper.eq(User::getId, 1);// 创建要更新的对象User user new User();user.setName(李四);// 执行更新return userMapper.update(user, lambdaUpdateWrapper);} }此处执行的sql语句 UPDATE user SET name 李四 WHERE id 1;Wrappers 用于更简便的条件设置 import com.baomidou.mybatisplus.core.toolkit.Wrappers;public class UserService {private UserMapper userMapper;public ListUser getUsersByConditionsUsingWrappers() {// 创建 QueryWrapper 对象QueryWrapperUser queryWrapper Wrappers.Userquery().eq(name, 张三).ge(age, 18).orderByDesc(create_time);// 执行查询return userMapper.selectList(queryWrapper);} }此处执行的sql语句 SELECT * FROM user WHERE name 张三 AND age 18 ORDER BY create_time DESC;3. 分页查询 1. 配置相应的拦截器 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class MyBatisPlusConfig {Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;} }2. 实现分页逻辑 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.entity.User; import com.example.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;Service public class UserService {Autowiredprivate UserMapper userMapper;public IPageUser getUserPage(int current, int size) {// 创建 Page 对象传入当前页码和每页大小PageUser page new Page(current, size);// 创建 QueryWrapper 对象添加查询条件QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.eq(status, 1).orderByDesc(create_time);// 执行分页查询IPageUser userPage userMapper.selectPage(page, queryWrapper);// 获取分页数据ListUser users userPage.getRecords();// 获取总记录数long total userPage.getTotal();// 获取当前页码int current userPage.getCurrent();// 获取每页大小int size userPage.getSize();// 获取总页数int pages userPage.getPages();return userPage;} }执行对应的sql语句是 -- 分页查询 SELECT * FROM user WHERE status 1 ORDER BY create_time DESC LIMIT 0, 10; -- 当前页码为1每页大小为10四结语 在本文中我们详细介绍了 MyBatis-Plus 的核心功能和使用方法包括如何配置分页插件、编写分页查询代码、使用各种 Wrapper 构建复杂查询条件等。通过这些内容相信你已经对 MyBatis-Plus 有了更深入的了解并能够在实际项目中灵活应用这些功能。 MyBatis-Plus 作为一个强大的 MyBatis 增强工具不仅简化了数据访问层的开发工作还提供了许多便捷的功能如分页查询、链式编程、乐观锁等。它能够显著提升开发效率减少重复代码使你的项目更加简洁和高效。 如果你在阅读本文后对 MyBatis-Plus 感兴趣不妨在自己的项目中尝试一下。实践是最好的老师通过实际操作你会更加深刻地理解这些功能的奥妙。同时也欢迎你在评论区分享你的使用经验和遇到的问题我们一起探讨和解决。 最后感谢你花时间阅读本文希望本文能为你带来帮助。如果你觉得本文对你有帮助别忘了点赞和分享让更多的人受益。让我们一起在技术的道路上不断前行共同成长
http://www.zqtcl.cn/news/825206/

相关文章:

  • 网站建设实训个人深圳做营销网站的公司哪家好
  • 广州seo网站策划wordpress关闭主题提示
  • 做门票售卖网站怎么制作自己的水印
  • 网站绑定两个域名怎么做跳转asp 网站后台
  • 百度网站怎么做的赚钱吗郑州资助app下载
  • 成都成华区网站建设天津网站优
  • 大朗网站制作商城网站建设相关费用
  • 付费阅读网站代码搜索引擎推广方式有哪些
  • 企业网站搭建介绍一个电影的网站模板下载
  • wordpress网站插件下载郑州专业网站制作
  • 佛山南海区建网站的公司dw怎么做购物网站
  • 杭州网站关键词排名优化响应式网站好还是自适应网站好
  • 潍坊作风建设网站什么是网站建设技术
  • 网站后台图片不显示东莞市企业招聘信息网
  • 网站发布平台商业网站的网址
  • 免费的培训网站建设门户网站建设管理工作方案
  • 企业网站建设实验感想企业网络推广哪家公司好
  • 网站建设和维护视频如何入侵网站服务器
  • 怎样建设网站空间成都网站设公司
  • 百度文库账号登录入口百度seo规则最新
  • 服务器可以自己的网站吗网络营销策划与创意
  • 广州市招投标网站个人网站可以做论坛
  • 易语言做购物网站春节网站怎么做
  • 建公司网站设计网站公司做网上夫妻去哪个网站
  • 稷山网站建设wordpress单本小说采集
  • 凡客网站规划与建设ppt网站做跳转教程
  • 怎么看网站空间多大做网站旅游销售
  • 天津做手机网站建设旅游网站的目的
  • 飞机查询网站开发的创新点注册公司流程和费用大概多少钱
  • 高质量的邯郸网站建设厦门网页制作厦门小程序app