发表于: 2018-03-30 18:28:44
4 545
今天完成的事情
开始进行任务17——编写DAO,分别JdbcTemplate和Mybatis连接数据库,注意使用JDBCTemplate的时候分离Interface和Imple,使用Mybatis的时候注意理解为什么不需要Impl,注意遵守命名规范。
首先建立maven项目
建立maven项目的时候需要选择Archetype模版,我选择了maven-archetype-webapp,结果如下

Maven规定必须添加以下Source Folder:
src/main/resources
src/main/java
src/test/resources
src/test/java
默认建立的项目中提示缺少好几个文件夹如下图。
把上图中提示缺少的文件夹删除,然后点击add folder新建提示缺失的文件夹,最终效果如下

配置maven依赖
生成的pom.xml中默认添加了对junit的依赖,但是默认是3.8.1版本,需要修改成4以上版本,不然不支持注解。
在maven中配置了对Spring的依赖(使用4.3.9版本),maven就自动把需要的Spring相关jar包下载到maven配置的本地仓库中去。暂时依赖了如下jar包,当然下面的jar包也不是现在全都能用到,但够用了。后续用到其他Spring的模块再添加新的依赖即可。
1. spring核心依赖——spring-core、spring-beans、spring-context
2. spring dao依赖(提供JDBCTemplate)——spring-jdbc、spring-tx
3. spring web依赖——spring-web、spring-webmvc
4. spring test依赖——spring-test
然后配置Spring容器
首先配置Spring容器的xml文件,添加数据源、事务管理器等bean。Spring中有两种容器,ApplicationContext和BeanFactory,ApplicationContext 完全继承BeanFactory,而且他更加易用,所以使用ApplicationContext类型的Spring容器。该类型容器的配置文件一般命名为ApplicationContext.xml。把该文件放到maven中定义的专门用来存放配置文件的目录src/main/resources下。后面使用的使用直接使用ClassPathXmlApplicationContext来启动该Spring容器,编程如下
xml文件头配置如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
</beans>
因为下面使用了p命名空间来简化配置,所以上面文件头中需要添加
xmlns:p="http://www.springframework.org/schema/p"
添加mysql驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30-bin</version>
</dependency>
添加后貌似从远程仓库下载不下来,我单独下载jar包然后放到本地仓库的mysql\mysql-connector-java\5.1.30-bin目录下,就ok了。
配置数据源bean
有jdbc的不带连接池数据源DriverManagerDataSource,这里使用了带有连接池的dbcp数据源。配置方式如下
<bean id="dataSource" class=org.apache.commons.dbcp.BasicDataSource destroy-method="close"
p:driverClassName="com.mysql.jdbc.driver"
p:url="jdbc:mysql://localhost:3306/test"
p:username="root"
p:password="root" />
需要在maven中配置依赖,查看官网commons-dbcp最新版是2.2.0,我实验了下使用2.2.0版本报错,官网上看貌似跟使用的jdbc版本有关,暂时不管了,切换成1.2.2就好使了。
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
配置jdbcTemplate的bean
需要把datasource注入其中
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref="dataSource">
</bean>
关于事务管理
默认情况下,从数据源中获取的connection对象的事务是自动提交的,所以暂时不配置事务管理器,因为Spring的事务管理要学习的东西好多,自己还没学完所以暂时先不用了,以后再说。这里仅仅使用jdbctemplate对象执行sql语句操作,事务会自动提交。
mysql中的准备工作
mysql中test数据库中新建一个表student
create table student(
id int pramary key auto_increment,
name varchar(15),
address varchar(20)
);
明天计划的事情
明天要针对今天设计的表格建立领域对象,以及使用jdbctemplate的dao编程。
遇到的问题
由于今天主要就是做配置工作,还没有实际编程,所以很多问题还没暴露出来。今天层让自己困扰的问题就是关于事务管理的。以前思考过这个问题,现在又看以前的笔记才把思路捋顺了。
如果使用Spring中配置的事务管理器模版进行事务管理,他的实现原理就是Spring aop。具体分为编程式和声明式两种,具体细节还没去深究。其关键点就是实现了事务管理和具体的sql语句执行的分离。即事务管理定义在service层,而四强语句提交定义在dao层,所以关键问题就是保证在service层中进行的事务管理操作,还在servic层中调用dao层进行sql语句执行这两个过程,要保证使用的是同一个connection对象,这样才能让分开的两个过程在此时又重新合并起来。
如果不使用事务管理器,对于事务按照默认处理,今天对于这块重新查阅思考了一番,想明白了执行事务提交回滚等操作最本质的依然是通过connection对象,而mysql的connection对象默认是自动提交事务的,所以在当前任务中不用配置事务了,后续所有jdbctemplate执行的每个sql语句操作都会被当作单独的事务自动提交的。
收获
通过今天按照思路一步步配置并在将来执行,感觉到还是要实战才能发现问题,以及加深对知识点的理解啊。好久没写日报了,以后要天天报!我看师兄目前进度也是任务一,我以后要跟紧师兄不掉队,坚持到底!
评论