发表于: 2018-03-10 22:26:18

2 780


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)

在jdbctemplate中,String类型的sql语句可以用+拼接,而+运算符使用一种重载的方法不断拼接,可以通过定义ArrayList来先接收内容再用toString方法完成拼接。


对照了验收标准:

验收标准

1.DB的设计和命名符号规范

为了方便调试,没有设置非null,明明用下划线分隔。

2.除了CRUD的基本单元测试,加上根据学员名字,学号去查找报名贴的单元测试

名字查找

@Test
public void testFindStudentsByName() throws Exception {

StudentService studentService = new StudentService();

   System.out.println(studentService.findStudentsByName("刘伟").toString());
}

结果

学号查找

@Test
public void testFindStudentByNumber() throws Exception {

StudentService studentService = new StudentService();

   System.out.println(studentService.findStudentByNumber("pm-1041"));
}

结果

3.Java代码符合命名规范

getter setter constructor自动创建

public interface StudentsMapper {

   //根据id查询学员信息
   public List<Student> findStudentsById(Long id) throws Exception;
   //根据学员姓名模糊查询
   public List<Student> findStudentsByName(String name) throws Exception;
   //根据学号查询
   public List<Student> findStudentByNumber(String number) throws Exception;
   //添加学员信息
   public boolean insertStudents(Student student) throws Exception;
   //删除学员信息
   public boolean deleteStudents(Long id) throws Exception;
   //更新学员信息
   public boolean updateStudents(Student Student) throws Exception;
   //重置数据库(主要是主键自增重置
   public void resetStudents() throws Exception;

}

以dao层也就是mapper层举例,

类名用小驼峰(单词首字母大写其他小写)

类中的方法名用小驼峰(第一个单词首字母小写第二个单词开始首字母大写

4.Interface和ServiceImpl分开

mybatis-only version

spring-mybatis version

jdbctemplate version

5.分别使用Mybatis的配置文件和Annotation方式去配置数据库

mybatis configuration:

<environments default="development">
   <environment id="development">
       <!-- 使用jdbc事务管理,目前由mybatis来管理 -->
       <transactionManager type="JDBC" />
       <!-- 数据库连接-->
       <dataSource type="POOLED">
           <property name="driver" value="${jdbc.driver}" />
           <property name="url" value="${jdbc.url}" />
           <property name="username" value="${jdbc.username}" />
           <property name="password" value="${jdbc.password}" />
       </dataSource>
       
   </environment>
</environments>

在与spring整合后,environment甚至整个mybatis的configuration文件都可以架空,仅用于mybatis中settings的配置

下面是整合spring后连接池的配置

<!--有了这个,就不必要额外的mybatis.xml全局配置文件了-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
   <!-- 指定扫描的包名,如果扫描多个包,每个包中间使用半角逗号分隔-->
   <property name="basePackage" value="com.ev.dao"/>
   <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
<!-- myBatis文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
   <!--配置连接数据库数据源(必不可缺)-->
   <property name="dataSource" ref="dataSource"/>
   <!--告诉xml文件的路径去加载-->
   <property name="mapperLocations" value="classpath:mapper/StudentMapper.xml"/>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
   <property name="driverClassName" value="${jdbc.driver}"/>
   <property name="url" value="${jdbc.url}"/>
   <property name="username" value="${jdbc.username}"/>
   <property name="password" value="${jdbc.password}"/>
   <!-- 连接初始值,连接池启动时创建的连接数量的初始值  默认值是0 -->
   <property name="initialSize" value="${jdbc.initialSize}"/>
   <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请  默认值是0 -->
   <property name="minIdle" value="${jdbc.minIdle}"/>
   <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 ,0时无限制  默认值是8 -->
   <property name="maxIdle" value="${jdbc.maxIdle}"/>
   <!-- 连接池的最大值,同一时间可以从池分配的最多连接数量,0时无限制   默认值是8 -->
   <property name="maxTotal" value="${jdbc.maxTotal}"/>
</bean>

spring自动对mybatis进行生命周期管理,诸如sqlSessionFactory的获得,sqlSession的commit和close等操作都有spring来完成。

6.使得Log4j来记录日志

这是log4j.properties的配置内容

### 设置###
log4j.rootLogger = info,stdout, C, D, E

### 输出信息到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志 ###
log4j.appender.C = org.apache.log4j.DailyRollingFileAppender
log4j.appender.C.File = /log/log_task1/log.log
log4j.appender.C.Append = true
log4j.appender.C.Threshold = debug
log4j.appender.C.layout = org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /log/log_task1/error.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = error
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
info
### 输出INFO 级别的日志 ###info
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = /log/log_task1/.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = info
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

指定目录为服务器上的log路径

设置级别为三种debug、info、error

设置log格式

7.通过远程连接Mysql,使用自定义域名并通过配置本地Host来配置DB连接文件

远程连接时把url换成服务器地址,由于没有购买域名,hosts就没有修改,

8.添加数据返回ID,删除或更新数据返回True/False

mybatis-only的insert方法

public Long insertStudents(Student student) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
   //创建StudentsMapper对象,mybatis自动生成mapper代理对象
   try {
StudentsMapper studentsMapper = sqlSession.getMapper(StudentsMapper.class);
       student.setCreateAt(System.currentTimeMillis());
       studentsMapper.insertStudents(student);
       sqlSession.commit();
   } catch (Exception e) {
sqlSession.rollback();
       throw new RuntimeException(e);
   } finally {
sqlSession.close();
   }

return student.getId();

}

spring-mybatis的insert方法

//插入一个学员信息并且返回主键
public long addAStudent(Student student) throws Exception{
try {
student.setCreateAt(System.currentTimeMillis());
       studentMapper.insertStudent(student);
       return student.getId();
   } catch (DuplicateKeyException e){
//插入学员时可能发生的异常
   throw new DuplicateKeyException("Insert failed ,id exists.");
   }
}

这里根据师兄的提示加上了DunplicatKeyException,即防止并发时插入同一条数据。

9.访问数据的时候使用Try/Catch捕获异常,关闭DB之后测试异常代码可以正确执行

try/catch已使用,db的中断后打印catch块中的error信息

10.关闭连接

spring和mybatis都有数据源的管理来关闭连接

服务器运行结果:

 

排版比较乱

其他项目结果类似。

明天计划的事情:(一定要写非常细致的内容) 

深度思考

遇到的问题:(遇到什么困难,怎么解决的) 

jdbctemplate中用到的一些基础知识向师兄请教了很多
收获:(通过今天的学习,学到了什么知识)

对项目有了大体上的感知


返回列表 返回列表
评论

    分享到