要实现数据的永久存储,需要使用数据库。spring提供了统一的dao抽象。
要使用基于JDBC的DAO
1、首先需要有数据库,选择了mysql的gpl版本并安装
2、学习sql语法,基础语法自己去w3school找,要特定语句的语法可以在mysql的文档里找到http://dev.mysql.com/doc/refman/5.7/en/
3、根据编码目的,设计需要mysql数据库表结构,各个变量的类型等,并建立对应的表。
4、将建立好的数据库配置为spring的一个DataSource:
1>选择一个合适的DataSourceFactory,我是跟着spring教程看的,教程上使用DriverManagerDataSource,只用于测试用途,不支持Connection pool效率比较低,暂且用着有需要再自己选择合适的。
需要配置对应的Driver class。数据库选择的是mysql因此应该到mysql的官网中查找对应的Driver class是什么。在如下链接:
http://dev.mysql.com/doc/connector-j/en/connector-j-usagenotes-spring-config.html
<util:map id="dbProps">
<entry key="db.driver" value="com.mysql.jdbc.Driver"/>
<entry key="db.jdbcurl" value="jdbc:mysql://localhost/world"/>
<entry key="db.username" value="myuser"/>
<entry key="db.password" value="mypass"/>
</util:map>
可以找到需要的配置项,也找到了对应的Driver class,url相关的描述可以在mysql官网找到:
http://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html
2>配置好DataSource以后,就需要配置对应的DAO。个人理解,对统一的数据模型,如果要考虑后续的扩展,最好定义对应额DAO接口,然后再根据目前的实现来实现接口。这样以后可以方便扩展。
3>基于Jdbc的DAO接口实现
首先,在对应的xml中需要配置对应的bean,将配置好的DataSource注入到实现的DAO接口中。我选择了基于annotation的方式,
1.对应的类前加 @Repository annotation
2.要注入datasouce因此需要在对应类添加一个 void 类型的setDataSource函数,入参为DataSrouce,函数功能为根据传入的DataSource初始化本类的JdbcTemplate对象。在此函数前添加@Autowired annotation
为了深入了解,此处详解两个annotation的作用:
@Repository 从spring api中查看该annotation的描述
A class thus annotated is eligible for Spring DataAccessException
translation
this annotation also serves as a specialization of @Component
, allowing for implementation classes to be autodetected through classpath scanning.
可以看出此annotation有两个作用,使类具有数据访问异常的转换、允许被autodetect
@Autowired 用于构造、field、set*等,会自动匹配合适的spring bean并注入
完成这步以后,每次initial JdbcTemplate对象时,spring会根据配置的DataSource来初始化对应的JdbcTemplate。
即可达到用JdbcTemplate实例来操作我们事先配置好的数据库。
其次,需要实现DAO接口中定义的函数,将对应类的数据保存到数据库中。具体实现与类有较强的相关。需要根据要
保存的类和数据库表的字段之间的关联,调用JdbcTemplate的接口实现写入读取即可,
具体示例可以参见:https://github.com/itm94lj/note 用Jdbc存取简单的笔记信息。