Spring in Action 5th 005使用JDBCTemplate与数据打交道

Web应用脱离了数据也是白费。

目前来说,Java与数据库打交道比较常用的是JDBC和JPA

 

JDBCTemplate

 

我们先来看看不使用JdbcTemplate进行数据库操作的方法:

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第1张图片

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第2张图片

 

使用JdbcTemplate替换掉:

 

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第3张图片

很明显,使用Template极大的简化了数据库操作。

 

设计Domain类

 

每个domain类最好包含id字段,这样便于建立索引,优化查询速度。当然,对于创建日期,可以选择性的使用该字段。

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第4张图片

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第5张图片

使用JdbcTemplate增删改查

 

在使用JdbcTemplate前,请添加相关依赖(数据库可以使用mysql):

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第6张图片

我们打算实现以下操作:

1. 查询所有的数据

2. 根据id查询指定的数据

3. 保存一个新的数据

 

接口先行:

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第7张图片

注入JdbcTemplate,实现上述接口:

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第8张图片

使用@Repository注解用于包扫描成为Bean

@AutoWired注入JdbcTemplate

 

查询操作具体接口方法的实现:

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第9张图片

注意,查询集合的时候使用的是Query方法,查询指定数据的时候使用QueryForObject方法

对象映射方法:

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第10张图片

 

写入数据具体实现:

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第11张图片

使用Update方法插入数据

 

完善Controller

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第12张图片

 

数据库定义语句

 

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第13张图片

将语句存储在schema.sql放置在src/main/resource目录下

 

数据库数据插入语句

 

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第14张图片

存储为data.sql保存在src/main/resource目录下

 

数据库创建语句及数据库插入语句会在程序启动的时候默认加载

 

高级插入语句

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第15张图片

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第16张图片

根据上文的依赖关系,保存Taco的时候需要向Taco_Ingredients插入数据,保存order的时候,需要同时保存到Taco_Order_Tacos表

 

使用PreparedStstementCreator插入数据

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第17张图片

在保存Taco之后,需要获取到Taco的id,根据id插入Ingredient到Taco_Ingredent表中。

这里使用的update与上文不同,需要两个参数:preparedStatementCreator及KeyHolder,其中,KeyHolder用于获取插入后产生的id,preparedStatementCreator用于生成sql语句。

 

接下来,注入两个service:

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第18张图片

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第19张图片

两个方法上的@ModelAttribute用于将对象添加到model中,但是对于订单来说,它需要存在整个会话中,而不是一次请求中,所以在类上添加了@SessionAttributes注解,将数据存到session中。

 

使用SimpleJdbcInsert插入数据

 

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第20张图片

使用注入的JdbcTemplate生成两个SimpleJdbcInsert对象,生成一个ObjectMapper对象。

使用上述SimpleJdbcInsert插入数据:

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第21张图片

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第22张图片

通过将对象转换成HashMap将数据存储到数据库中。

注入到Controller使用:

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第23张图片

Spring in Action 5th 005使用JDBCTemplate与数据打交道_第24张图片

方法中使用的SessionStatus的setComplete方法用于清除session中的order,因为订单已经完成,需要结算,如果不清空session的话,下一次使用order会包含脏数据。

 

你可能感兴趣的:(Spring,in,Action,5th)