首页 > 数据库 >JAVA+MySQL做一个图书信息管理系统【二次开发】【更新版2.0】【纯java】、Java技术分享

JAVA+MySQL做一个图书信息管理系统【二次开发】【更新版2.0】【纯java】、Java技术分享

时间:2023-04-28 14:04:35浏览次数:32  
标签:事务 JAVA String NPE 更新版 dialog 二次开发 total id


JAVA+MySQL做一个图书信息管理系统【二次开发】【更新版2.0】【纯java】


Java技术分享


Java技术er集合啦!大家可分享关于Java技术知识,包括但不限于微服务,分布式等前沿技术,快来沉淀自己的技术,一起写出未来吧!
你可以从以下几个方面着手(不强制),或者根据自己对话题主题的理解进行创作,参考如下:

java里的JSONObject作用是什么?什么时候用?


支付订单添加客服名字字段

支付订单添加客服名字字段

List<UserCustomerServiceRecord> customerServiceRecordList =
        userCustomerServiceRemoteService.listStaffName().getData();
Map<String, UserCustomerServiceRecord> customerServiceRecordMap = customerServiceRecordList.stream()
        .collect(Collectors.toMap(UserCustomerServiceRecord::getStaffId, i -> i));


String staffId = String.valueOf(item.getStaffId());
if (null != customerServiceRecordMap.get(staffId)) {
    adminPageOrderRes.setStaffName(customerServiceRecordMap.get(staffId).getStaffName());
}

-----说明书-----

JAVA8 lambda表达式中Collectors.toMap()方法
例:
Map<Long, VipEntity> vipMap = vipList.stream().collect(Collectors.toMap(VipEntity::getUserId, v -> v, (v1, v2) -> v1));
说明:
.collect(Collectors.toMap(VipEntity::getUserId, v -> v, (v1, v2) -> v1))

第一个参数 VipEntity::getUserId 表示选择 VipEntity 的 getUserId 作为map的key值;
第二个参数 v -> v 表示选择将原来的对象作为map的value值;
第三个参数 (v1, v2) -> v1 中,如果v1与v2的key值相同,选择v1作为那个key所对应的value值。

校验 OrderException

if (null == id) {
            throw new OrderException(OrderExceptionResult.ORDER_USER_CONFIG_ID_NOT_EXITS);
        }

OrderExceptionResult

public enum OrderExceptionResult implements IExceptionResult {

    /**
     * error
     */
    ERROR(1000, "系统繁忙,请稍后重试"),
    ORDER_USER_CONFIG_ID_NOT_EXITS(1029, "客服订单不存在"),
    ;

    private int code;
    private String msg;

    OrderExceptionResult(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    @Override
    public int getCode() {
        return code;
    }

    @Override
    public String getMsg() {
        return msg;
    }

    public IExceptionResult buildParamErrorMsg(String paramErrorMsg) {
        if (paramErrorMsg == null || "".equals(paramErrorMsg)) {
            paramErrorMsg = "";
        }

        if (this.code == PARAM_ERROR.code) {
            this.msg = "参数 " + paramErrorMsg + " 不能为空";
        }
        return this;
    }
}


## MySQL事务,串行化,索引
2、MySQL事务

什么?主要用来处理操作量大,复杂度高的数据

例子?在人员管理网站中,你要删除一个人员,不但要删除他的基本信息,而且也要删除他的相关信息,如他的文章,信箱等等



在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。----》 Innodb 数据库引擎



事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。-----》原子性



事务用来管理 insert,update,delete 语句----》增删改



事务要满足的4个条件:

原子性:要么全部执行,要么全部不执行。

一致性:在事务开始之前和事务结束以后,数据库的完整性没有改变—》一致

隔离性:包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

数据库允许多事务执行,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。隔离性保证了事务并发执行的互不干扰。

持久性:事务处理结束后,对数据库的改变必须是永久的,即便系统故障也不会丢失。—》持久

上面串行化(Serializable)

在这个事务没有被提交之前 其他的线程只能等到当前操作完成之后,才能进行操作,这样会非常耗时,而且,影响数据库的性能,通常情况下,不会使用这种隔离级别

3/索引

----》提高检索速度,高效运行

例子—》字典根据拼音来查询需要的字

## 查到部分数据处理为null处理方式

		select s.total_pv as total_pv, s.total_uv as total_uv from dialog d left join 
		(select dialog_id, sum(counts) as total_pv, user_id,count(DISTINCT(user_id)) as total_uv 
			from dialog_count GROUP BY dialog_id) s 		
							on d.id=s.dialog_id
			ORDER BY id desc

查到部分数据处理为null

1、数据库用函数查询

    SELECT d.*,**IFNULL(s.total_pv,0) as total_pv ,IFNULL(s.total_uv,0)** as total_uv
    FROM `dialog` d left join (select dialog_id,sum(counts) as total_pv,user_id,count(distinct(user_id)) as total_uv from dialog_count group by dialog_id) s
    ON d.id=s.dialog_id
			        order by id desc
2、后端业务逻辑处理
如实现类if else赋值

3、前端显示处理

			
## 事务隔离级别的解决方案1 方案一

在读取数据前,加锁,阻止其他事务对数据进行修改

Lock Based Concurrency Control (LBCC)

2 方案二

生成一个数据请求时间点的一致性数据快照,用这个快照提高一个事务及一致性的读取,Multi Version Concurrency Control(MVCC) 原理用undo log,中间有一个环节失败了,让前面的环节也失败。
## 自动类型转换正向过程与强制转换
1、自动类型转换正向过程
(byte、char、short)->int->long->float->double
2、强制转换
即逆向过程,可能丢失精度
int a=(int)3.1478932;
3、String不是基本数据类型—》final
强制转换—》包装类

    String a = "73874.48787548";      
      double b = Double.parseDouble(a);      
      System.out.println(b);

4、boolean不能转换为其它数据类型

![](/i/ll/?i=a73b3d27375649d0b153de90ef50028d.png)
## JavaScript对象输出
```内容

<!DOCTYPE html>

<html lang="en" xmlns:th="http://www.thymeleaf.org/">

<head>

    <meta charset="UTF-8">

    <title>Title</title>

    <base th:href="${#servletContext.getContextPath+'/'}">

</head>

<body>

<script>

    var username={

        id : 1,

        name : "xiaohong",

        age : 17

    };

    document.write(username.id+" "+username["name"]+" "+username.age);

</script>

 

 

</body>

</html>

结果

1 xiaohong 17

JavaScript 语句向浏览器发出的命令。语句的作用是告诉浏览器该做什么。

JavaScript 语句向浏览器发出的命令。语句的作用是告诉浏览器该做什么。

使用window.alert()弹出警告框。

使用document.write()方法将内容写到HTML文档中

使用innerHTML写入到HTML元素

使用console.log()写入到浏览器的控制台

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8">

    <title>菜鸟教程(runoob.com)</title>

</head>

<body>

<p id="demo">fdsjallll </p>

<script>

    window.alert(7+8);

    document.write(8+1);

    a = document.getElementById("demo");

    a.innerHTML="beijfin";

    console.log("hello world");

</script>

</body>

</html>

JAVA+MySQL做一个图书信息管理系统【二次开发】【更新版2.0】【纯java】、Java技术分享_数据库

代码规范-实用版包括方法命名

1、POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。
反例:定义为基本数据类型 Boolean isDeleted;的属性,它的方法也是 isDeleted(),RPC
框架在反向解析的时候,“以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异
常。
2、方法命名
1) 获取单个对象的方法用 get 做前缀。
2) 获取多个对象的方法用 list 做前缀。
3) 获取统计值的方法用 count 做前缀。
4) 插入的方法用 save/insert 做前缀。
5) 删除的方法用 remove/delete 做前缀。
6) 修改的方法用 update 做前缀。
7. 【强制】不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator
方式,如果并发操作,需要对 Iterator 对象加锁。
正例:

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (删除元素的条件) {
iterator.remove();
}
}

反例:

List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
for (String item : list) {
if ("1".equals(item)) {
list.remove(item);
}
}

说明:以上代码的执行结果肯定会出乎大家的意料,那么试一下把“1”换成“2”,会是同样的
结果吗?
10. 【推荐】防止 NPE(空指针异常),是程序员的基本修养,注意 NPE 产生的场景:
1)返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE。
反例:public int f() { return Integer 对象}, 如果为 null,自动解箱抛 NPE。
2) 数据库的查询结果可能为 null。
3) 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。
4) 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。
5) 对于 Session 中获取的数据,建议 NPE 检查,避免空指针。
6) 级联调用 obj.getA().getB().getC();一连串调用,易产生 NPE。
正例:使用 JDK8 的 Optional 类来防止 NPE 问题。

11.日志为了安全起见,可以不用注解日志,用自己的日志
private static final LegoLogger LOGGER = LegoLogger.getLogger(MemberServiceImpl.class);

12.接口规范
新建(saveXxx)
修改(updateXxx)
修改单个(updateXxxById)
查询(selectXxx)
查询单个(selectXxxById)
分页查询(xxxByPage)
删除(delete)
删除单个(deleteXxxById)


标签:事务,JAVA,String,NPE,更新版,dialog,二次开发,total,id
From: https://blog.51cto.com/u_14604401/6234001

相关文章

  • Java中>>、>>>、<<
    定义:右移动>>:带符号右移。正数右移高位补0,负数右移高位补1。左移动<<:带符号左移。正数左移低位补0,负数左移低位补1。无符号右移>>>:无论是正数还是负数,高位通通补0。 栗子:下面以32位表示2的二进制:00000000000000000000000000000010-2的二进制:11111111111111111111111......
  • Java ByteBuffer 使用实例
    packagefoo;importjava.io.IOException;importjava.nio.ByteBuffer;importjava.nio.CharBuffer;importjava.nio.charset.Charset;/**ByteBuffer并且这三个指针的关系是position<=limit<=capacity.position是当前读写的位置。limit是最大能读写的......
  • 轻松看懂Java字节码
     计算机只认识0和1。这意味着任何语言编写的程序最终都需要经过编译器编译成机器码才能被计算机执行。所以,我们所编写的程序在不同的平台上运行前都要经过重新编译才能被执行。而Java刚诞生的时候曾经提过一个非常著名的宣传口号: "一次编写,到处运行" 。WriteOnce,RunAnyw......
  • java jar 没有主清单属性_Spring Boot jar中没有主清单属性的解决方法「建议收藏」
    javajar没有主清单属性_SpringBootjar中没有主清单属性的解决方法「建议收藏」原文链接:https://cloud.tencent.com/developer/article/2133065大家好,又见面了,我是你们的朋友全栈君。使用SpringBoot微服务搭建框架,在eclipse和Idea下能正常运行,但是在打成jar包部署或者直接......
  • java 语言与 C语言端 AES (ECB)
    注:java为no-padding注释掉了padding部分(byte数组初始化时为0x00)c为padding0x00(byte数组初始化时为0x00)代码出自网上代码地址githubhttps://github.com/mountwater/AES-128-ECB-java_and_cJAVA代码//CopyrightPopaTiberiu2011//f......
  • Web开发神器,最智能的Javascript IDE——WebStorm
    我的开发很大一部分是和Javascript打交道,很久以来,我一直在Spket、Aptana、VisualStudio、IntelliJIDEA、notepad++、vim等选择中徘徊,因为发现他们都很好,但都缺少我想要的……直到我开始使用WebStorm。 什么是我对JavascriptIDE选择的标准?1、快速智能的代码提示(全项目的)和补全2......
  • Java数据类型
    1.数据类型注意:String是一个类,属于引用类型2.自动类型转换精度小的类型自动转换为精度大的数据类型......
  • 本地java监控远程Linux服务器-jconsole
    一、配置远程服务器需要监控的服务项目(本文以ps为例)需要监控的ps项目,此项目启动文件为ps.sh,编辑sh文件,找到JAVA_OPTS项,在后面添加JAVA_OPTS="-XX:+UseParallelGC-XX:+UseParallelOldGC$JVM_FLAGS$GC_LOG-Dfile.encoding=UTF-8-DLog4jContextSelector=org.apache.logging.......
  • jar包启动基础命令 java -jar common.jar cmd 命令行执行jar包
    jar包启动基础命令命令行执行jar包java-jarcommon.jar原文链接:https://blog.csdn.net/weixin_40483369/article/details/124392170一般情况下运行jar包,当前是可运行的jar包,直接命令java-jarcommon.jar1按下ctrl+C,关闭当前ssh或者直接关闭窗口,当前程序都会退出。......
  • java serice wrapper mac M2 入门
    先下载javasericewrapperhttps://download.tanukisoftware.com/wrapper/3.5.53/wrapper-macosx-universal-64-3.5.53.tar.gz解压设置arch-x86_64zshuname-mcdwrapper-macosx-universal-64-3.5.53/bin测试用例bin/testwrapperconsole新建项目packageo......