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都是
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
驼峰命名,自动转换: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 配置日志
配置参数常量:
log.level:日志级别,error最强,只显示比此时级别更强的信息
log.maxHistory:文件保留时间
log.filePath:日志存储的根目录
log.pattern:日志展现格式,定义时间格式,线程格式,级别,那个类,表示信息
控制台设置
appender: consoleAppender
encoder:转换成字符串,将日志输出到文件
DEBUG:
设置滚动
设置文件路径
设滚动策略
设文件名称
INFO
ERROR
设置3个级别的日志信息
13、mybatis的xml文件:
在更新中可以尽可能使用一些动态标签,判断是否满足要求再设置更新,当不是最后一个if的时候,要在前加,最后一个就不要:
还要写where语句
update tb_shop
where shop_id=#{shop_id}
写多个测试方法时,可在不用的测试方法前加@Ingnore标签,表示不用
14、Thumbnailator,一个google使用的开源的工具类,与图片处理相关。
maven路径: