发表于: 2018-03-10 22:26:18
2 782
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了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中用到的一些基础知识向师兄请教了很多
收获:(通过今天的学习,学到了什么知识)
对项目有了大体上的感知
评论