秒杀demo的总结

1、实体类的属性用包装类型而不用基本类型,因为基本类型会自动赋初始值,而用包装类型不用,我们可以让它为空。Date、Integer、Long、String

2、timestamp和datetime是常用数据库存储时间的类型,都是年月日时分秒。
但datetime的范围更大
timestamp不能小于1927和大于2037年,但timestamp可以自动适配当前插入数据的机器所在时区的

3、

create table 'tb_area'(
       'area_id'  int(2)  NOT NULL AUTO_INCREMENT,    //设置自动增长
       'area_name'  varchar(200)  NOT NULL,    //非空
       'priority'  int(2)  NOT NULL   DEFAULT '0',          //非空默认为0
       'create_time'  datetime DEFAULT NULL,            //默认为空
       'last_edit_time'  datetime DEFAULT NULL,      //默认为空
       primary key('area_id'),
       unique key 'UK_AREA'('area_name')
)ENGINE=InnoDB AUTO_INCREMENT=1   DEFAULT  CHARSET=utf8 //设置它的引擎,以及主键自动增长是从1开始的,规定字符集的字符格式是utf-8

myisam:表级锁,必须等第一个线程把整个表更新,第二个线程才能操作。读的性能更高。

innodb:行级锁,以行为单位锁。写的性能较高。

4、增加唯一索引给openid
因为在使用时需要它作为唯一的一个索引去进行搜索。
往已创建的表增加唯一索引:
alter table tb_wechat_auth add unique index (open_id);

但建立索引需要维护,如果只建立少量的索引其实是不好的。

5、表创建过程中觉得好的属性:
private Date createTime;
private Date lastEditTime; //最新修改时间
private String picture_address;//图片地址(在数据库中存储单位是 picture_address varchar(1024)

权重:priority //决定在显示页面排序,权重越大,排名越靠前
private Integer priority;

区域ID:
类别ID:
用户类型:0,1,2(超级管理员)
用户审核:-1不可用,0审核中,1可用(private Integer enableStatus)
【-1:不显示,店家也不可修改】

管理员给店家的提醒:private String advice;

6、maven的架构配置:
src/main/java :项目的业务代码
【src/main/java/entity:存放实体类
src/main/java/web:controller层,存放controller控制器,相当于struts中的action
src/main/java/service:业务逻辑层,
src/main/java/service/impl
src/main/java/dao:存放与数据库的操作,与数据相关的操作,比如存放mybatis的那些访问接口
src/main/java/dto:弥补entity的不足,有product_list
src/main/java/enums:
src/main/java/interceptor:拦截器
src/main/java/util:通用工具类

src/main/resources:项目的配置文件,spring,mybatis
【src/main/resources/spring:spring的配置文件
src/main/resources/mapper:mybatis的Mapper文件 xml文件 】
src/test/java:项目的单元测试文件
src/test/resources:单元测试的配置文件,但一般没有东西
Maven Dependencies:存储的依赖的maven管理的jar包,一般是根据pom.xml中声明的
Apache Tomcat v8.0:存储的是tomcat所依赖的jar包
JRE System Library:存放java运行时所需的jar包

src/main/webapp:存放前端的静态资源 html,js,css,jsp
src/main/webapp/resources:存放项目静态资源,js,css,图片
src/main/webapp/WEB-INF:外部浏览器无法访问其文件下的内容。
src/main/webapp/WEB-INF/web.xml:初始化配置信息,初始化servlet,启动加载级别
和WEB-INF平级的,外部浏览器可以访问到

target:不重要,存放项目构建后的目录,如编译后的class文件

7、pom.xml:
junit: 4.12
logback:直接去官网搜,然后粘贴到配置文件
spring相关配置: version都是${spring.version}
8个与spring相关的包:
【spring-core:spring的核心,为spring各个类提供支持
spring-beans:基础类,动态创建,类似反射机制,包含访问配置类....
如果项目只需要基本的IOC和DI支持, 只需要以上两个spring jar
spring-context:为spring核心提供大量扩展,JDNI、校验相关的类
spring-jdbc:支持spring对jdbc数据访问
spring-tx:与事务相关的
spring-web:用spring做web开发
spring-webmvc:springmvc核心,有重要的类DispatcherServlet类
spring-test:测试封装,只有它的scope是test】

三个其他包:
【javax.servlet-api:servlet web 提供servlet服务
jackson-databind:解析json
commons-collectios:map工具类,对java的collection做扩展】

mybatis相关包:
【mybatis:mybatis基础包
mybatis-spring:与spring衔接融合】

mysql相关
【mysql-connector-java:与jdbc相关
c3p0:连接池】

8、SSM的配置:
数据库的配置:
src/main/resources中jdbc.properties
jdbc.driver
jdbc.url:需要开通unicode
jdbc.username
jdbc.password

配置Mybatis:
src/main/resources中jmybatis-config.xml


秒杀demo的总结_第1张图片
image.png

驼峰命名,自动转换:c_name --> cname

配置spring相关配置:
src/main/resources/spring中spring-dao.xml:
beans命名空间,避免冲突
配置数据库相关参数 jdbc.properties
数据库连接池 bean【连接池属性,c3p0私有属性,配置sqlsessionfactory对象,扫描Dao接口包】

src/main/resources/spring中spring-service.xml:
扫描service包下所有使用注解的类型
配置事务管理器
配置基于注解的声明式事务

src/main/resources/spring中spring-web.xml:
开启springmvc注解模式
静态资源默认servlet配置(js png gif),允许/做整体映射
定义视图解析器

web.xml中将3个配置文件整合

整合配置:
pom.xml
jdbc.properties
mybatis-config.xml
spring-dao.xml:mybatis与数据库交互
spring-service.xml:做事务管理
spring-web.xml:定义DispatcherServlet如何响应controller的行为
web.xml:注册整合

9、关于注解:
一般SSM分为Dao层(数据交互层)、Service层和Controller层

Dao层的测试:
接口的方法名称和具体xml文件中标签的id值相等;
接口的名称与具体xml的名称相等;
接口的地址与具体xml的namespace地址空间的值相等。
如实体类是Area,访问接口AreaDao,mybatis文件AreaDao.xml(与接口文件同名),比如写了个queryArea()的方法。
Dao层要写Mybatis的访问接口,mybatis的文件xml。
以及一个Dao测试类,用Junit进行测试,使用到的注解写在类前@RunWith(SpringJUnit4ClassRunner)、@ContextConfiguration("xxxx写Mysql代码的xml文件.xml");

Sevice层的测试:
如实体类是Area,service接口为:AreaService(接口口中有getAreaList()方法)

public interface  AreaService{
     public abstract List  getAreaList();
}

接口实现类

@Service
public  class  AreaServiceImpl  implements  AreaService{
      @Autowired
      private AreaDao areaDao;
      @Override
       public List getAreaList(){
             return areaDao.queryArea();
      }
}
首先Service层需要Service接口(写数据动作)和 实现该接口的实现类、实现方法
需要的注解@Autowired(告诉Spring属性注入),@Service(标注Service类)
这里的属性是一个dao接口的实体

另外单独测试service层时可使用@Test标注在测试方法前。

**Controller层:**
@Controller:声明在类前,这是一个控制类
@RequestMapping(url):在类和方法前,声明访问的地址
@Autowired:声明在属性前,创建一个service类实例,areaService实例
@ResponseBody:声明返回对象会自动转换成JSON返回前端

@Controller
@RequstMapping("/admin",method=RequestMethod.GET);
@ResponseBody
public class AreaController{
@Autowired
private AreaService areaService;
private ...
....
}

Get方法:少量数据,明文,显示在地址栏
Post方法:较大量数据,不显示

在测试时,可写一句 assertEquals(a,b):这里就是简单判断a,b是相等,常用于测试

10、面试常考SSM:
SpringMVC:流程、DispatcherServlet源码
Spring:IOC   AOP(动态代理,在spring中使用,比如增删改查操作之前要进行权限验证,不希望验证代码夹杂在操作代码中,动态地将权限加入到增删改查之前)
Mybatis:ORM

11、POSTMAN:
一个chrome插件,是一个接口测试工具

12、日志记录:
用于定位和显示程序运行状态

Loback日志配置:
主要模块:
logback-access:与servlet容器集成,提供通过http访问
logback-classic:可方便更换成其他日志系统
logback-core:基础服务
主要标签:
logger:日志记录器,存放日志对象,配置日志类型,级别
appender:指定日志输出的目的地,控制台、文件等
layout:格式化日志信息输出

设置logback.xml 配置日志

scan=true时配置文件发生改变就会重新修改 scanPeriod="60 seconds" 修改间隔时间.=false,默认毫秒 debug=false

配置参数常量:
log.level:日志级别,error最强,只显示比此时级别更强的信息
log.maxHistory:文件保留时间
log.filePath:日志存储的根目录
log.pattern:日志展现格式,定义时间格式,线程格式,级别,那个类,表示信息

控制台设置
appender: consoleAppender
encoder:转换成字符串,将日志输出到文件

DEBUG:
设置滚动
设置文件路径
设滚动策略
设文件名称

INFO
ERROR
设置3个级别的日志信息


13、mybatis的xml文件:

在更新中可以尽可能使用一些动态标签,判断是否满足要求再设置更新,当不是最后一个if的时候,要在前加,最后一个就不要:
还要写where语句


update tb_shop

name=#{name},
addr=#{addr}

where shop_id=#{shop_id}


写多个测试方法时,可在不用的测试方法前加@Ingnore标签,表示不用
    
14、Thumbnailator,一个google使用的开源的工具类,与图片处理相关。
maven路径:


net.coobird
thumbnailator
0.4.8

你可能感兴趣的:(秒杀demo的总结)