发表于: 2017-07-23 23:17:05
1 1047
今天完成的事情:
1.Annotation配置
2. 配置本地的hosts文件,链接数据库
3.关闭数据库让trycatch抓取异常
4.收尾任务一
明天计划的事情:
1.学习Git上传任务一代码
2.写一下任务小结
3.审核过后开始任务二
遇到的问题:
1. 不使用SELECT * 而是用列名,发现报错,因为SELECT (列名,列名)是不应该加括号的
收获:
1.Annotation配置
大体不变,在接口上加入标签:
@Select("SELECT user_id,name,study_type,qq,entry_data,graduated,url,wish,know_from,create_at,update_at " +
"FROM student WHERE user_id = #{user_id}")
StudentMod studySelect(StudentMod studentMod);
@Insert(" INSERT INTO student (user_id,name,study_type,qq,entry_data,graduated,url,wish,know_from,create_at,update_at)" +
" VALUES (#{user_id},#{name},#{study_type},#{qq},#{entry_data},#{graduated},#{url},#{wish},#{know_from},#{create_at},#{update_at})")
int studyInsert(StudentMod studentMod);
@Update("UPDATE student SET name=#{name} ,update_at=#{update_at} WHERE user_id=#{user_id}")
int studyUpdate(StudentMod studentMod);
@Delete("DELETE FROM student WHERE user_id=#{user_id}")
int studyDelete(String user_id);
@Select("SELECT (user_id,name,study_type,qq,entry_data,graduated,url,wish,know_from,create_at,update_at)" +
"FROM student")
List<StudentMod> studentName();
2. 配置本地的hosts文件,链接数据库
3.关闭数据库让trycatch抓取异常
JDBC没有连接上数据库,但是程序正常结束。
4. 深度思考
自增ID有什么坏处?什么样的场景下不使用自增ID?
数据没有连续性例如:id列下为:1,2,3,6
数据库会在6的基础上进行自增id
如果有其他列能表示该条数据的唯一性就可以不使用自增ID
什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息
当经常性地根据某个列进行数据库操作时应该对该字段建立索引
唯一索引和普通索引的区别是什么,什么时候需要建唯一索引
唯一索引比普通索引更有约束,唯一索引要求该字段的内容不能有重复
如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
当经常性地根据某个列进行数据库操作时应该对该字段建立索引
CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
当新插入数据时给create_at和update_at赋值,当修改数据时对update_at覆盖赋值,不应该开放外部的接口
修真类型应该是直接存储Varchar,还是应该存储int?
应该存储int型,可以约定1为JAVA,2为CSS,3为PM等
varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
varchar的长度为存储字段的长度加存储长度信息
完全确定长度的,如邮编、股票代码、手机号码号段(前3位或前7位)、等等,可以用char。除此之外都用varchar。
即,char类型用来表示各种已知定义的code,而varchar类型用来表示各种string。
varchar的长度,最好是在够用(需要适当预测未来需求)且方便管理的前提下尽可能短。因为SQLServer的最大索引键是900字节,在一个varchar(1000)或两个varchar(500)的字段上建索引,可能会导致数据异常。严格约束长度,则能避免这种可能性。
为什么不可以用Select * from table?
数据库需要把 * 转化为表中的属性,查数据字典会增大开销
不需要的字段会增加数据传输的时间
大字段,例如很长的 text,当长度超过 728 字节的时候,会另外找地方存储数据
select * 数据库需要解析更多的 对象,字段,权限,属性,索引相关等
什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?
贫血模型:是指领域对象里只有get和set方法,或者包含少量的CRUD方法,所有的业务逻辑都不包含在内而是放在Business Logic层。
充血模型: 层次结构和上面的差不多,不过大多业务逻辑和持久化放在Domain Object里面,Business Logic只是简单封装部分业务逻辑以及控制事务、权限等
Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?
IoC将设计好的类交给系统去控制
对象和对象之间发生严重的依赖关系,耦合度非常高而且依赖关系都在代码里,项目不易修改和维护
为什么要使用Interface,而不是直接使用一个实体类来完成任务?Interface和Impl这种方式的好处是什么?
接口可以有多个实现而实体类不能多重继承,好处是封装,隐藏细节,减少接口和实现直接的相互依赖.
为什么要处理异常,Try/Catch应该在什么样的场景下使用,在真实的系统中,会出现网络中断,DB连接不上的错误吗?多久会发 生一次?
会发生链接不上的错误。
当连接池没有空闲连接,或者一次请求的连接数据库大大超过数据域连接池中最大连接数量时
日志应该怎么打,在什么位置,需要打印出来什么样的关键参数?
例如任务一可以打印正要执行的SQL语句,打印位置在项目下自定义位置
为什么需要单步调试?Debug的时候IDE是怎么找到源码的?
可以擦看当执行到当前的关键参数,是否符合自己的预期标准
可否远程连接到线上直接调试?真实的项目中,遇到问题的排查方案是什么?
不能,看日志-->重现BUG-->解决BUG
PS:有点乏了。。。
参考资料:
评论