JAVA - 数据库重点知识

行级锁 - 行级锁的竞争,减库存实际上是我们的核心;

秒杀接口暴露 - 人家可能会不停地访问你的接口

InnoDB - 支持事务

联合主键:seckillId和userPhone, 通过insert ignore into过滤重复;第1次返回值是1,第2次返回值是0;

MySQL常见命令:

mysql -uroot -p;

CREATE DATABASE seckill;

use seckill;

CREATE TABLE;

show tables;

show create table seckill\G;

SELECT * FROM seckill;

ALTER TABLE seckill

DROP INDEX

add index

source babasport_table.sql;

Table对应我们Java中的Entity概念;

Dao对应的就是我们相应实体的增删改查,而在Mybatis中它的实现靠的就是Mapper;

而且dao对应的bean会自动注入spring容器,即动态实现Dao接口;

通过jdbc可以直接getGeneratedKeys,就是自动生成的主键;

像SeckillDao.xml这种xml的作用:

为DAO接口方法提供sql语句配置;

id=接口名称,比如:id="reduceNumber"

parameterType可以自己识别参数属性,resultType对于update来讲,肯定是int

#{seckillId} 是占位符

inner join是取两者都有的吗?是为了命中最广?

不是,是为了映射,如果用left join,未满足条件的字段会保存下来,从而导致映射失败;

在写包名的时候,我们写的是Seckill,而不是org.seckill.entiry.Seckill,是因为package scan帮助我们完成了这件事情,就是下面这个配置;

classpath指的到底是什么?

java和resource下都是classpath.

给bean配置id的目的是?

方便其它地方引用。

@Param这个注解是Mybatis给我们提供的;@Param("seckillId"),但多于1个参数时,要加这个注解用于识别

为什么要把seckill返回呢?

DAO层工作演变为:接口设计+SQL编写;

DAO拼接逻辑:放在service层完成;(比如减库存+插入购买明细);data access object

事务回滚只针对运行期异常RuntimeException,非运行期异常是不会执行回滚的;

//可以把所有编译期异常,转化为运行期异常;

还要小心不当的try-catch

站在“使用者”的角度去设计我们的业务接口;

service的接口写得真好;

为什么返回seckill,因为秒杀成功的记录可能是1对多的,比如同时秒杀成功2个秒杀产品,所以都返回去;

queryByIdWithSeckill

使用枚举表述常量数据字段

为什么要使用单例?单例还是工厂?

xml实现注入,主要是针对:实现类来自第3方库或需要命名空间;

注解实现注入:项目开发中使用的类;

你可能感兴趣的:(JAVA - 数据库重点知识)