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

建网站的每年有费用国外自助建站免费建站平台

建网站的每年有费用,国外自助建站免费建站平台,给网站做游戏视频怎么赚钱,2w网站2w网站建设建设文章目录简介问题复现依赖**建库建表**代码测试解决方案方案1#xff1a;将字段设置为id#xff08;推荐#xff09;建库建表修改Entity测试方案2#xff1a;将字段设置为当前时间#xff08;不推荐#xff09;建库建表修改Entity测试简介 说明 本文用示例介绍MyBatis-… 文章目录简介问题复现依赖**建库建表**代码测试解决方案方案1将字段设置为id推荐建库建表修改Entity测试方案2将字段设置为当前时间不推荐建库建表修改Entity测试简介 说明 本文用示例介绍MyBatis-Plus如何解决逻辑删除与唯一索引的问题。 物理删除与逻辑删除 ​ 数据是很重要的数据库里的数据在删除时一般不会用DELETE语句直接物理删除。 ​ 通常的做法是使用逻辑删除也就是新加一个标记是否删除的字段在删除时不是真的删除而是使用UPDATE语句将某个字段设置为删除状态。例如“deleted_flag”0表示未删除其他表示已删除。 MyBatis-Plus****默认的逻辑删除 MyBatis-Plus里可以将某个字段标记为逻辑删除字段方法是在字段上加TableLogic注解 TableLogic private Long deletedFlag;这样一来操作数据时会自动操作 查询时自动加AND deletedFlag 0删除时UPDATE SET deletedFlag 1 … WHERE … AND deleted_flag 0 其默认的全局配置为 mybatis-plus:global-config:db-config:logic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)MyBatis-Plus****默认逻辑删除的问题 ​ 假设有一张用户表有user_name和deleted_flag字段想给user_name加唯一索引提高查询速度、确保用户名不重复这时有如下两种方案 将user_name设置为唯一索引 这样是不行的比如有个用户名为“Tony”删除了又有一个用户注册注册为“Tony”这就会报错。报错的信息是这样的Duplicate entry ‘Tony’ for key ‘t_user.index_user_name’ 将user_name和deleted_flag设置为联合唯一索引 这样也是不行的比如 有个用户名为“Tony”删除了这样联合索引为“Tony-1”。又有一个用户注册注册为“Tony”这不会报错此时新用户联合索引为“Tony-0”新用户删除会报错因为此时新用户联合索引为“Tony-1”数据库已经有了。报错的信息是这样的Duplicate entry ‘Tony-1’ for key ‘t_user.index_user_name_deleted_flag’ 问题复现 依赖 pom.xml ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.1.RELEASE/version !-- version2.0.0.RELEASE/version--relativePath/ !-- lookup parent from repository --/parentgroupIdcom.example/groupIdartifactIdMyBatis-Plus_Simple/artifactIdversion0.0.1-SNAPSHOT/versionnameMyBatis-Plus_Simple/namedescriptionDemo project for Spring Boot/descriptionpropertiesjava.version1.8/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.3.2/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependencydependencygroupIdcom.github.xiaoymin/groupIdartifactIdknife4j-spring-boot-starter/artifactIdversion3.0.3/version/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project建库建表 DROP DATABASE IF EXISTS mp; CREATE DATABASE mp DEFAULT CHARACTER SET utf8; USE mp;DROP TABLE IF EXISTS t_user; SET NAMES utf8mb4;CREATE TABLE t_user (id BIGINT(0) NOT NULL AUTO_INCREMENT,user_name VARCHAR(64) NOT NULL COMMENT 用户名不能重复,nick_name VARCHAR(64) NULL COMMENT 昵称可以重复,email VARCHAR(64) COMMENT 邮箱,create_time DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,update_time DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 修改时间,deleted_flag BIGINT(0) NOT NULL DEFAULT 0 COMMENT 0未删除 其他已删除,PRIMARY KEY (id) USING BTREE,UNIQUE KEY index_user_name_deleted_flag (user_name, deleted_flag),KEY index_create_time(create_time) ) ENGINE InnoDB COMMENT 用户;INSERT INTO t_user VALUES (1, knife, 刀刃, abcqq.com, 2021-01-23 09:33:36, 2021-01-23 09:33:36, 0); INSERT INTO t_user VALUES (2, sky, 天蓝, 123qq.com, 2021-01-24 18:12:21, 2021-01-24 18:12:21, 0);代码 Entity import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; import lombok.Data;import java.time.LocalDateTime;Data TableName(value t_user) public class User {TableId(value id, type IdType.AUTO)private Long id;/*** 用户名不能重复*/private String userName;/*** 昵称可以重复*/private String nickName;/*** 邮箱*/private String email;/*** 创建时间*/private LocalDateTime createTime;/*** 修改时间*/private LocalDateTime updateTime;/*** 0未删除 其他已删除*/TableLogicprivate Long deletedFlag; }Service 接口 package com.example.demo.user.service;import com.baomidou.mybatisplus.extension.service.IService; import com.example.demo.user.entity.User;public interface UserService extends IServiceUser { }实现类 package com.example.demo.user.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.demo.user.entity.User; import com.example.demo.user.mapper.UserMapper; import com.example.demo.user.service.UserService; import org.springframework.stereotype.Service;Service public class UserServiceImpl extends ServiceImplUserMapper, User implements UserService { }Controller package com.example.demo.user.controller;import com.example.demo.user.entity.User; import com.example.demo.user.service.UserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;Api(tags 测试) RestController RequestMapping(test) public class TestController {Autowiredprivate UserService userService;ApiOperation(删除)PostMapping(delete)public String delete(Long id) {userService.removeById(id);return remove success;}ApiOperation(添加)PostMapping(add)public User add() {User user new User();user.setUserName(sky);userService.save(user);return user;} }测试 打开测试页面http://localhost:8080/doc.html 1. 查看原始数据 2. 删除user_name为“sky”的数据 数据库结果成功删除 后端结果 Preparing: UPDATE t_user SET deleted_flag1 WHERE id? AND deleted_flag0 Parameters: 2(Long)Updates: 13. 添加user_name为“sky”的数据 数据库结果添加成功 后端结果添加成功 Preparing: INSERT INTO t_user ( user_name ) VALUES ( ? ) Parameters: sky(String)Updates: 14. 删除user_name为“sky”的数据 数据库结果删除失败 后端结果删除失败 2022-03-20 16:46:09.895 ERROR 15904 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DuplicateKeyException: ### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry sky-1 for key t_user.index_user_name_deleted_flag ### The error may exist in com/example/demo/user/mapper/UserMapper.java (best guess) ### The error may involve com.example.demo.user.mapper.UserMapper.deleteById-Inline ### The error occurred while setting parameters ### SQL: UPDATE t_user SET deleted_flag1 WHERE id? AND deleted_flag0 ### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry sky-1 for key t_user.index_user_name_deleted_flag ; Duplicate entry sky-1 for key t_user.index_user_name_deleted_flag; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry sky-1 for key t_user.index_user_name_deleted_flag] with root causejava.sql.SQLIntegrityConstraintViolationException: Duplicate entry sky-1 for key t_user.index_user_name_deleted_flagat com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:117) ~[mysql-connector-java-8.0.20.jar:8.0.20]at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.20.jar:8.0.20]at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.20.jar:8.0.20] 解决方案 TableLogic注解的源码如下 // // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) //package com.baomidou.mybatisplus.annotation;import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE}) public interface TableLogic {String value() default ;String delval() default ; }value表示删除标记字段的正常的值未删除时的值 。默认为0delval表示删除标记字段的删除时的值删除后的值 。默认为1 所以方法就是将delval设置为一个不会冲突的值就可以了比如 将delval设置为“id” 这样在删除时会将deleted_flag设置为id的值 将delval设置为“NOW()” 这样在删除时会将deleted_flag设置为删除的时间 说明 ​ delval所指定的字符串将会直接作为UPDATE语句的SET值例如我将delval指定为“abc”那么删除时的语句就是UPDATE SET deleted_flag abc WHERE … 方案1将字段设置为id推荐 方案简介 在删除时会将逻辑删除字段设置为id的值。 建库建表 DROP DATABASE IF EXISTS mp; CREATE DATABASE mp DEFAULT CHARACTER SET utf8; USE mp;DROP TABLE IF EXISTS t_user; SET NAMES utf8mb4;CREATE TABLE t_user (id BIGINT(0) NOT NULL AUTO_INCREMENT,user_name VARCHAR(64) NOT NULL COMMENT 用户名不能重复,nick_name VARCHAR(64) NULL COMMENT 昵称可以重复,email VARCHAR(64) COMMENT 邮箱,create_time DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,update_time DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 修改时间,deleted_flag BIGINT(0) NOT NULL DEFAULT 0 COMMENT 0未删除 其他已删除,PRIMARY KEY (id) USING BTREE,UNIQUE KEY index_user_name_deleted_flag (user_name, deleted_flag),KEY index_create_time(create_time) ) ENGINE InnoDB COMMENT 用户;INSERT INTO t_user VALUES (1, knife, 刀刃, abcqq.com, 2021-01-23 09:33:36, 2021-01-23 09:33:36, 0); INSERT INTO t_user VALUES (2, sky, 天蓝, 123qq.com, 2021-01-24 18:12:21, 2021-01-24 18:12:21, 0);修改Entity package com.example.demo.user.entity;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; import lombok.Data;import java.time.LocalDateTime;Data TableName(value t_user) public class User {TableId(value id, type IdType.AUTO)private Long id;/*** 用户名不能重复*/private String userName;/*** 昵称可以重复*/private String nickName;/*** 邮箱*/private String email;/*** 创建时间*/private LocalDateTime createTime;/*** 修改时间*/private LocalDateTime updateTime;/*** 0未删除 其他已删除*/TableLogic(delval id)private Long deletedFlag; }测试 打开测试页面http://localhost:8080/doc.html 1. 查看原始数据 2. 删除user_name为“sky”的数据 数据库结果成功删除 后端结果成功删除 Preparing: UPDATE t_user SET deleted_flagid WHERE id? AND deleted_flag0 Parameters: 2(Long)Updates: 13. 添加user_name为“sky”的数据 数据库结果添加成功 后端结果添加成功 Preparing: INSERT INTO t_user ( user_name ) VALUES ( ? ) Parameters: sky(String)Updates: 14. 删除user_name为“sky”的数据 数据库结果删除成功 后端结果删除成功 Preparing: UPDATE t_user SET deleted_flagid WHERE id? AND deleted_flag0 Parameters: 3(Long)Updates: 1方案2将字段设置为当前时间不推荐 方案简介 在删除时会将逻辑删除字段设置为NOW()函数的值。 建库建表 DROP DATABASE IF EXISTS mp; CREATE DATABASE mp DEFAULT CHARACTER SET utf8; USE mp;DROP TABLE IF EXISTS t_user; SET NAMES utf8mb4;CREATE TABLE t_user (id BIGINT(0) NOT NULL AUTO_INCREMENT,user_name VARCHAR(64) NOT NULL COMMENT 用户名不能重复,nick_name VARCHAR(64) NULL COMMENT 昵称可以重复,email VARCHAR(64) COMMENT 邮箱,create_time DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,update_time DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 修改时间,deleted_flag DATETIME(0) NULL DEFAULT NULL COMMENT null未删除 其他已删除,PRIMARY KEY (id) USING BTREE,UNIQUE KEY index_user_name_deleted_flag (user_name, deleted_flag),KEY index_create_time(create_time) ) ENGINE InnoDB COMMENT 用户;INSERT INTO t_user VALUES (1, knife, 刀刃, abcqq.com, 2021-01-23 09:33:36, 2021-01-23 09:33:36, null); INSERT INTO t_user VALUES (2, sky, 天蓝, 123qq.com, 2021-01-24 18:12:21, 2021-01-24 18:12:21, null);修改Entity package com.example.demo.user.entity;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; import lombok.Data;import java.time.LocalDateTime;Data TableName(value t_user) public class User {TableId(value id, type IdType.AUTO)private Long id;/*** 用户名不能重复*/private String userName;/*** 昵称可以重复*/private String nickName;/*** 邮箱*/private String email;/*** 创建时间*/private LocalDateTime createTime;/*** 修改时间*/private LocalDateTime updateTime;/*** NULL未删除 其他已删除*/TableLogic(value NULL, delval NOW())private LocalDateTime deletedFlag; }测试 打开测试页面http://localhost:8080/doc.html 1. 查看原始数据 2. 删除user_name为“sky”的数据 数据库结果成功删除 后端结果成功删除 Preparing: UPDATE t_user SET deleted_flagNOW() WHERE id? AND deleted_flag IS NULL Parameters: 2(Long)Updates: 13. 添加user_name为“sky”的数据 数据库结果添加成功 后端结果添加成功 Preparing: INSERT INTO t_user ( user_name ) VALUES ( ? ) Parameters: sky(String)Updates: 14. 删除user_name为“sky”的数据 数据库结果删除成功 后端结果删除成功 Preparing: UPDATE t_user SET deleted_flagNOW() WHERE id? AND deleted_flag IS NULL Parameters: 3(Long)Updates: 1
http://www.yutouwan.com/news/348317/

相关文章:

  • django电影网站开发如何用ps做网站效果图
  • 怎样创建网站网站杭州市建设工程招标投标网
  • 网络营销做私活网站ui网页设计尺寸
  • 徐州在线制作网站wordpress同时登录
  • 网站交易平台建设广安网站建设服务
  • 静态网站站内搜索网站开发最强工具
  • 网站做成软件企业所得税什么时候申报缴纳
  • 合肥网站快速排名提升深圳分销网站设计价格
  • 做食品外贸选哪个网站好制作官网的公司性价比高
  • 站长工具seo综合查询网wordpress流量统计插件下载
  • 做外贸怎么在阿里云建网站网站营销最大的特点
  • 建站品牌大全拓者设计吧首页
  • 网站首页静态化代码怎么做网站免
  • 公考在哪个网站上做试题wordpress西瓜
  • 深圳网站建设需要多少费用乐清建设路小学校园网站
  • 网站界面设计内容邵阳市最新消息
  • 百度商桥在网站做企业官网哪家公司好
  • 工会网站建设方案如何制作橡皮泥 简单
  • 宁波做网站优化的公司怎么样做购物网站
  • 网站建设需要到哪些知识代运营
  • h5网站开发设计杭州网站的制作
  • 网站建设发专业人才培养方案家庭网络做网站
  • 汕头企业网站建设模板网站开发框架系统
  • 网站策划需求兰州网络推广昔年下拉博客
  • 网站建设服务多少钱学建设网站
  • 郑州代做网站网站推广的宣传途径
  • 如何做网站新手网站建设名字
  • 免费cms建站系统wordpress 评论框主题
  • 广州建立网站的公司网站app代理
  • 省建设厅网站安全生产标准化第三方商城网站建设