xml配置文档?🐕都不写。
我觉得我们应该学习一下,我们非常熟悉配置xml的那一套...
用注解配置bean
按照Spring的流程,现在应该学习如何使用注解来配置bean了。
使用前先在xml(逃不过的xml)中开启自动扫包。
- beans的属性里加上:
xmlns:context="http://www.springframework.org/schema/context"
; - 然后再在beans里面写一个标签:
<context:component-scan base-package="这里写要扫描的包名"></context:component-scan>
- 在需要实现类名前加上
@Component("studentDaoImpl")
注解就行了。这句话就在xml写的<bean id = "studentDaoImpl" class="com.yanqun.annotation.dao.StudentDaoImpl">
这里注解@Component
就相当于一个bean,但Component
代表的意思太广泛了,于是多出来了三个更细化的注解:@Repository、@Service、@Controller
。它们三个的底层实现都和@Component
是一样的,其实就只是换了个名字。
用注解实现JdbcTemplate
什么是事务?简单来说,一个事务里面一般有多条sql命令,而执行事务的特点就是 要么里面的sql命令全部执行成功,要么全部执行失败,存在执行到一半就不管了的情况。
具体步骤:
先导包 spring-tx-4.3.9.RELEASE.jar
(jdbc事务包);mysql-connector-java-8.0.12.jar
,mysql的驱动包;spring-jdbc-4.3.9.RELEASE.jar
,看名字就知道这是什么包。
配置xml
这个xml最好是从下往上看,最下面的studentDaoImplbean
有个字段叫jdbcInjection
,它依赖上面的jdbcTemp
;然后jdbcTemp
里面又有一个dataSource
字段,这个字段依赖名为datasss
的bean
,我们就需要在上面再配置一个bean
给dataSource
依赖。从下往上,多看几遍。
<!-- JdbcTemplate配置————开始-->
<!-- jdbc数据源配置,这个dataSource负责链接数据库 -->
<bean id="datasss" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8"></property>
<property name="username" value="root"></property>
<property name="password" value = "root"></property>
</bean>
<!-- jdbc模板配置,它有个dataSource字段依赖着datasss-->
<bean id="jdbcTemp" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="datasss"></property>
</bean>
<!--jdbc要注入的地方,它的字段依赖jdbcTemp的bean -->
<bean id="studentDaoImplbean" class="com.yanqun.annotation.dao.StudentDaoImpl">
<property name="jdbcInjection" ref="jdbcTemp"></property>
</bean>
<!-- JdbcTemplate配置————结束 -->
配置这个遇到了两个错误,其中一个还有点尴尬😅。
- mysql时区 一开始因为没有加上时区配置,再加上mysql驱动包版本有点高,就给我报时区错误。后面加上
?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
,就好了 - 空指针,这个纯粹是个人原因的失误。我发现我的bean名字只能是
studentDaoImplbean
,否则就会给我报空指针,开始还以为是jdbcTemplate
没有注入成功,后来发现结果是getBean("studentDaoImplbean")
这个方法原因。我传的字符串肯定需要和bean对应起来,不然肯定找不到那个bean啊。