发表于: 2018-01-07 22:31:26

1 1414


今天完成的事情

1.使用mybatis的配置文件xml和注解方式配置数据库,对之前设计的学员报名表完成增删改查功能,并写了测试。

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
       <!DOCTYPE configuration
               PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
               "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--别名-->
<typeAliases>
   <package name="com.putteng"/>
</typeAliases>
<!--环境参数配置-->
<environments default="development">
   <environment id="development">
       <transactionManager type="JDBC"/>
       <dataSource type="POOLED">
           <property name="driver" value="com.mysql.jdbc.Driver"/>
           <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"/>
           <property name="username" value="root"/>
           <property name="password" value="root"/>
       </dataSource>
   </environment>
</environments>

<!--映射文件地址-->
<mappers>
   <!--mapper class="com.putteng.StudentMapper"/-->
   <mapper resource="com/putteng/StudentMapper.xml"/>
</mappers>
</configuration>

StudentMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
       PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.putteng.StudentMapper">
   <!-- 根据id获取学员信息 -->
   <select id="findStudentById" parameterType="int" resultType="Student">
       select * from student where id = #{id}
</select>
   <!-- 根据id名字查报名帖 -->
   <select id="fingdLinkById" parameterType="int" resultType="String">
       select link from student where id = #{id}
</select>
   <!-- 根据名字查报名帖 -->
   <select id="fingdLinkByName" parameterType="String" resultType="String">
       select link from student where name = #{name}
</select>


   <!-- 添加学员信息 -->
   <insert id="insertStuden" parameterType="Student" useGeneratedKeys="true"
           keyProperty="id">
       insert into student(name,qq,class_id,graduate_school,oline_number,link,wish,brother_id)
values(#{name},#{qq},#{class_id},#{graduate_school},#{oline_number},#{link},#{wish},#{brother_id})
</insert>
   <!-- 根据id删除信息 -->
   <delete id="deleteStudent" parameterType="int">
       delete from student where id = #{id}
</delete>
   <!--修改信息-->
   <update id="updateStudent" parameterType="Student">
       update student set
name=#{name},
qq=#{qq},
graduate_school=#{graduate_school},
oline_number=#{oline_number},
link=#{link},
wish=#{wish},
brother_id=#{brother_id}
where id = #{id}
</update>
</mapper>

3.学习了使用SVN并上传。

http://www.svnchina.com/svn/mybatistest/


4.深度思考问题.

1.maven是什么,和Ant有什么区别?

  1.      maven还没用熟,ant没用过,以后再答。

2.clean,install,package,deploy分别代表什么含义?

        clean:清除target中生成的文件  install 将打包文件安装到本地仓库  package 打包文件    deploy部署已打包文件到远程仓库

3.怎么样能让Maven跳过JUnit?

 在pom.xml文件中加入

<plugin>

       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <skip>true</skip>
       </configuration>
 </plugin

4.为什么要用Log4j来替代System.out.println?

        System.out.println只能单个使用,Log4j可以选择级别,输送日期、级别、线程等等,还可以输出到文件中,功能比简单的println强大很多

5.为什么DB的设计中要使用Long来替换掉Date类型?       


6.自增ID有什么坏处?什么样的场景下不使用自增ID?      

没有连续性, 如果有1,2,3条记录,我删除2,那么数据库中就只有1,3,如果再加入一条数据,那么就是1,3,4.。

不适合的场景,分布式。 大量数据同时写入的时候是写入分开的几个数据库,自增id不能保证主键的唯一性。

7.什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?

增加索引可以提高查询效率。

主键,外键,经常查询使用的字段建索引。

8.唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。

唯一索引,列中没有重复项,例如主键。

普通索引,可以有重复项.

唯一索引是普通索引加上唯一约束,插入数据时,唯一索引需要做重复判断,消耗更多时间。查询速度唯一索引大于普通索引。

唯一索引用于需要大量使用查询且不可重复的字段。

9.如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?

   如果设置了唯一索引,数据库会自动查重,如果存在则报错。

10.CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?

       CreateAT在创建的时候赋值,UpdateAt在此后每次更新此条数据的时候赋值;

11.修真类型应该是直接存储Varchar,还是应该存储int?

        修真类型数量有限,可以用int数据直接代替,调用时再使用接口还原。

12.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?

        varchar可变长度字符串,定义的长度只是限制最大长度,定义太长影响性能,尽量在满足需求的情况下小。

13.怎么进行分页数据的查询,如何判断是否有下一页?

       select * from userdetail where userid limit (pageNow-1)*pageSize,pageSize;

      例如要每页一百条数据,要查第五页数据,SQL语句就是

      select * from userdetail where userid limit (5-1)*100,100;

     下一页判断以后用到再解决。     

14.为什么不可以用Select * from table?

       需要得到哪些列就写那些列,否则会影响效率。

15.什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?

16.Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?

        控制反转;使用控制反转实现了对象之间的解绑,当我们需要重构代码的时候不需要整个更改代码,只需要更改我们想要更改的子类和xml文件就可以了

17.为什么要使用Interface,而不是直接使用一个实体类来完成任务?Interface和Impl这种方式的好处是什么?

        增强了代码的可维护性和扩展性,当他人阅读实现类时,可以直接观看interface要做什么,而不用关心它是怎么样实现的

18.为什么要处理异常,Try/Catch应该在什么样的场景下使用,在真实的系统中,会出现网络中断,DB连接不上的错误吗?多久会发 生一次?

        是异常不能被忽略,一定要去处理它。异常提供了从错误状态进行可靠恢复的途径,而不需要退出程序。在可能会异常的地方使用Try/Catch

19.日志应该怎么打,在什么位置,需要打印出来什么样的关键参数?

       

20.为什么需要单步调试?Debug的时候IDE是怎么找到源码的?

    根据单步调试的变量值,找到程序出错的地方

21.可否远程连接到线上直接调试?真实的项目中,遇到问题的排查方案是什么?


任务总结

1.学会了简单的数据表格设计及其数据类型的定义,主键,自增id。

2.JAVA基本语法,基本数据类型,面向对象,控制流程,try-catch-finally。

3.JDBC、JDBCTemplate、Mybatis的基本配置和对数据库的增删改查操作。

4.maven构建项目,打包,pom.ml配置。

5.Spring的初步了解,对控制反转(IOC)和注入(DI)有了基本的认识。

6.Junit写单元测试,注解方法。

7.Log4j的配置和简单使用。

8.连接远程linux服务器,学习了linux的简单操作,比如安装软件,vim。


明天的计划

开始任务2的学习。


任务1开始时间:12.23.

计划完成时间:1.10

禅道地址: http://task.ptteng.com/zentao/project-task.html









返回列表 返回列表
评论

    分享到