发表于: 2017-12-27 23:34:19
4 727
今天完成的事情:
1、数据库连接池的原理
①装载数据库驱动程序; ②通过jdbc建立数据库连接; ③访问数据库,执行sql语句; ④断开数据库连接。
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。
synchronized关键字即可确保线程是同步的。使用方法为直接在类方法前面加上synchronized关键字,如:
publicsynchronized connection getconnection()
最大连接数(maxconn)
实现DataSource接口,并实现连接池功能的步骤:
- 在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中。
- 实现getConnection方法,让getConnection方法每次调用时,从LinkedList中取一个Connection返回给用户。
- 当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库。Collection保证将自己返回到LinkedList中是此处编程的难点。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.5</version>
</dependency>
2、
JUnit是Java中最有名的单元测试框架。然而,它仅适合于纯粹的单元测试,对于集成测试应该使用TestNG来代替。
<scope>test</scope> 依赖范围,只对test有效。
3. 远程的(remote)。开发者事先启动Web容器,Arquillian连接该容器并将测试部署到容器中运行。
http://blog.csdn.net/neosmith/article/details/19754703
@BeforeClass >>@Before>>@Test>>@After>>….>>@Before>>@Tess>>@After>>@Before>>@After>>@AfterClass
@Test public void method() | 测试注释指示该公共无效方法它所附着可以作为一个测试用例。 |
@Before public void method() | Before注释表示,该方法必须在类中的每个测试之前执行,以便执行测试某些必要的先决条件。 |
@BeforeClass public static void method() | BeforeClass注释指出这是附着在静态方法必须执行一次并在类的所有测试之前。发生这种情况时一般是测试计算共享配置方法(如连接到数据库)。 |
@After public void method() | After 注释指示,该方法在执行每项测试后执行(如执行每一个测试后重置某些变量,删除临时变量等) |
@AfterClass public static void method() | 当需要执行所有的测试在JUnit测试用例类后执行,AfterClass注解可以使用以清理建立方法,(从数据库如断开连接)。注意:附有此批注(类似于BeforeClass)的方法必须定义为静态。 |
3、学习log4j
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
### set log levels 配置根Logger ALL:打印所有的日志,OFF:关闭所有的日志输出。
# Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
#Log4j提供的appender有以下几种:
#org.apache.log4j.ConsoleAppender(控制台),
#org.apache.log4j.FileAppender(文件),
#org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
#org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
# 可通过log4j.appender.R.MaxFileSize=100KB设置文件大小,
# 还可通过log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件。#org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
#Log4j提供的layout有以下几种:
#org.apache.log4j.HTMLLayout(以HTML表格形式布局),
#org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
#org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
#org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
1、导入所有需的commons-logging类:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
2、在自己的类中定义一个org.apache.commons.logging.Log类的私有静态类成员:
private final Log log = LogFactory.getLog(getClass());
LogFactory.getLog()方法的参数使用的是当前类的class。
3、使用org.apache.commons.logging.Log类的成员方法输出日志信息:
if (log.isDebugEnabled()) { log.debug("111"); }
明天计划的事情:
回顾任务一的知识要点,做这个任务:现在重新写一个demo,分别使用JDBC,Spring Template和mybatis对数据库操增删改查的流程,用JUnit4为dao层方法写单元测试,用log4j打日志,最后直接在控制台使用maven命令执行打包,编译,自测等命令。
今天看到一个小伙伴也是在做任务一快收尾了,默默关注了,他从12月5日开始学的,预计1月5日收尾,而我感觉现在自己虽然任务快结束,但是心里一点都不踏实,详情见wiki。
遇到的问题:
1、如上图第二句,存在即出现下图错误,删掉则成功,这是自己在创建测试类把第一个方法也打上勾造成的错误
2、
左图想和右图一样输出删除中文字段,在错误处不知道怎么填。在看了师兄的代码,明天再测试进行理解,我的错误那里填ID也不对
annotation ano = sqlSession.getMapper(annotation.class);
int b = ano.deleteEnrollInfo(ID);
if (b > 0) {
log.debug("删除成功");
} else {
log.debug("删除失败");
}
经测试更新的方式如果注释掉// stu.setType("type");,会只剩下name,而原来的id 12 里type原有值变为null,想弄一个只改掉name的,这一点还没百度,等后续掌握。
收 获:
keyProperty | selectKey 语句结果应该被设置的目标属性。 |
resultType | 结果的类型。MyBatis 通常可以算出来,但是写上也没有问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。 |
order | 这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。 |
statementType | 和前面的相 同,MyBatis 支持 STATEMENT ,PREPARED 和CALLABLE 语句的映射类型,分别代表 PreparedStatement 和CallableStatement 类型。 |
看了师兄在wiki上的回复,试试自己的量化学习成果,现在感觉还算有点底,知道哪里确实不会,哪里是已经掌握的,后面就按照流程来吧,稳扎稳打做好任务一,迎接任务二,预计本周末之前结束任务一,就四天了,多补点基础。
wiki 地址 http://task.ptteng.com/zentao/project-task-498.html
评论