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

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

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

 

JDBCTemplate

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

使用JdbcTemplate替换掉:

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

设计Domain类

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

使用JdbcTemplate增删改查

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

我们打算实现以下操作:

1. 查询所有的数据

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

3. 保存一个新的数据

接口先行:

注入JdbcTemplate,实现上述接口:

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

@AutoWired注入JdbcTemplate

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

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

对象映射方法:

写入数据具体实现:

使用Update方法插入数据

完善Controller

数据库定义语句

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

数据库数据插入语句

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

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

高级插入语句

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

使用PreparedStstementCreator插入数据

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

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

接下来,注入两个service:

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

使用SimpleJdbcInsert插入数据

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

使用上述SimpleJdbcInsert插入数据:

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

注入到Controller使用:

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

猜你喜欢

转载自blog.csdn.net/Day_and_Night_2017/article/details/89213030