一、关于JdbcTemplate

JdbcTemplate是最基本的Spring JDBC模板,这个模板支持简单的JDBC数据库访问功能以及基于索引参数的查询。

Spring数据访问模板:在数据库操作过程中,有很大一部分重复工作,比如事务控制、管理资源以及处理异常等,Spring的模板类处理这些固定部分。同时,应用程序相关的数据访问在回调的实现中处理,包括语句、绑定参数以及整理结果等。这样一来,我们只需关心自己的数据访问逻辑即可。

Spring的JDBC框架承担了资源管理和异常处理的工作,从而简化了JDBC代码,我们只需要编写从数据库读写数据的必需代码就万事大吉了。

二、Spring JdbcTemplate实例

我们的学习目标就是动手写一个demo,实现对Category的CRUD操作。

1.创建表

mysql新建数据库store,然后执行如下sql:

  1. create table Category (
  2. Id int not null,
  3. Name varchar(80) null,
  4. constraint pk_category primary key (Id)
  5. );
  6.  
  7. INSERT INTO category(id,Name) VALUES (1,'女装');
  8. INSERT INTO category(id,Name) VALUES (2,'美妆');
  9. INSERT INTO category(id,Name) VALUES (3,'书籍');

db_store.sql

2.我用的IDE是IdeaIU,通过maven构建项目,通过xml配置spring。完成后的代码结构为:

3.创建实体类Category

  1. public class Category{
  2. private int cateId;
  3.  
  4. private String cateName;
  5.  
  6. public int getCateId() {
  7. return cateId;
  8. }
  9.  
  10. public void setCateId(int cateId) {
  11. this.cateId = cateId;
  12. }
  13.  
  14. public String getCateName() {
  15. return cateName;
  16. }
  17.  
  18. public void setCateName(String cateName) {
  19. this.cateName = cateName;
  20. }
  21.  
  22. @Override
  23. public String toString() {
  24. return "id="+cateId+" name="+cateName;
  25. }
  26. }

  

4.修改pom.xml,引入相关依赖。

  1. <dependencies>
  2. <dependency>
  3. <groupId>junit</groupId>
  4. <artifactId>junit</artifactId>
  5. <version>4.12</version>
  6. </dependency>
  7.  
  8. <!-- Mysql数据库链接jar包 -->
  9. <dependency>
  10. <groupId>mysql</groupId>
  11. <artifactId>mysql-connector-java</artifactId>
  12. <version>5.1.21</version>
  13. <scope>runtime</scope>
  14. </dependency>
  15. </dependencies>

  

5.配置applicationContext.xml

需要配置dataSource作为jdbcTemplate的数据源。然后配置CategoryDao bean,构造注入了jdbcTemplate对象。完整的applicationContext.xml如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  6. <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
  7. <property name="url" value="jdbc:mysql://localhost:3306/store"></property>
  8. <property name="username" value="root"></property>
  9. <property name="password" value="root"></property>
  10. </bean>
  11.  
  12. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  13. <property name="dataSource" ref="dataSource"></property>
  14. </bean>
  15.  
  16. <bean id="categoryDao" class="CategoryDao">
  17. <constructor-arg ref="jdbcTemplate"></constructor-arg>
  18. </bean>
  19. </beans>

  

6.数据访问实现类CategoryDao

CategoryDao构造函数包含了参数jdbcTemplate,然后实现了常用的数据访问操作。可以看到,我们只要关注具体的sql语句就可以了。另外,在getById()和getAll()方法中使用了lambda语法。

  1. import org.springframework.jdbc.core.JdbcTemplate;
  2. import org.springframework.jdbc.core.RowMapper;
  3.  
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.util.List;
  7. import java.util.Map;
  8.  
  9. /**
  10. * Created by 陈敬 on 2017/6/6.
  11. */
  12. public class CategoryDao {
  13. private JdbcTemplate jdbcTemplate;
  14.  
  15. public CategoryDao(JdbcTemplate jdbcTemplate) {
  16. this.jdbcTemplate = jdbcTemplate;
  17. }
  18.  
  19. public int add(Category category) {
  20. String sql = "INSERT INTO category(id,name)VALUES(?,?)";
  21. return jdbcTemplate.update(sql, category.getCateId(), category.getCateName());
  22. }
  23.  
  24. public int update(Category category) {
  25. String sql = "UPDATE Category SET Name=? WHERE Id=?";
  26. return jdbcTemplate.update(sql, category.getCateName(), category.getCateId());
  27. }
  28.  
  29. public int delete(int id) {
  30. String sql = "DELETE FROM Category WHERE Id=?";
  31. return jdbcTemplate.update(sql, id);
  32. }
  33.  
  34. public int count(){
  35. String sql="SELECT COUNT(0) FROM Category";
  36. return jdbcTemplate.queryForObject(sql,Integer.class);
  37. }
  38.  
  39. public Category getById(int id) {
  40. String sql = "SELECT Id,Name FROM Category WHERE Id=?";
  41. return jdbcTemplate.queryForObject(sql, (ResultSet rs, int rowNumber) -> {
  42. Category category = new Category();
  43. category.setCateId(rs.getInt("Id"));
  44. category.setCateName(rs.getString("Name"));
  45. return category;
  46. }, id);
  47. }
  48.  
  49. public List<Category> getAll(){
  50. String sql="SELECT Id,Name FROM Category";
  51.  
  52. List<Category> result=jdbcTemplate.query(sql, (resultSet, i) -> {
  53. Category category = new Category();
  54. category.setCateId(resultSet.getInt("Id"));
  55. category.setCateName(resultSet.getString("Name"));
  56. return category;
  57. });
  58.  
  59. return result;
  60. }
  61. }

  

7.测试

  1. @ContextConfiguration(locations = "classpath:applicationContext.xml")
  2. @RunWith(SpringJUnit4ClassRunner.class)
  3. public class testCategoryDao {
  4. @Autowired
  5. private CategoryDao categoryDao;
  6.  
  7. @Test
  8. public void testAdd() {
  9. Category category = new Category();
  10. category.setCateId(4);
  11. category.setCateName("母婴");
  12.  
  13. int result = categoryDao.add(category);
  14. System.out.println(result);
  15. }
  16.  
  17. @Test
  18. public void testUpdate() {
  19. Category category = new Category();
  20. category.setCateId(4);
  21. category.setCateName("男装");
  22.  
  23. int result = categoryDao.update(category);
  24. System.out.println(result);
  25. }
  26.  
  27. @Test
  28. public void testGetById() {
  29. int id = 4;
  30. Category category = categoryDao.getById(id);
  31. System.out.println(category.toString());
  32. }
  33.  
  34. @Test
  35. public void testGetAll() {
  36. List<Category> categories = categoryDao.getAll();
  37. for (Category item : categories) {
  38. System.out.println(item);
  39. }
  40. }
  41.  
  42. @Test
  43. public void testCount() {
  44. int count = categoryDao.count();
  45. System.out.println(count);
  46. }
  47.  
  48. @Test
  49. public void testDelete() {
  50. int id = 4;
  51. int result = categoryDao.delete(id);
  52. System.out.println(result);
  53. }
  54. }

  

完整代码:https://github.com/cathychen00/learnjava/tree/master/DemoJdbcTemplate

JAVA入门[18]-JdbcTemplate简单实例的更多相关文章

  1. JAVA RMI远程方法调用简单实例[转]

    RMI的概念 RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一台计算机上的对象可以调用另外 一台 ...

  2. JAVA RMI远程方法调用简单实例(转载)

    来源:http://www.cnblogs.com/leslies2/archive/2011/05/20/2051844.html RMI的概念 RMI(Remote Method Invocati ...

  3. java中的反射简单实例

    package club.reflection.entity.User; /** * 实体类 * */ public class User { public String name; private ...

  4. 快速入门:Python简单实例100个(入门完整版)

    Python3 100例 文章目录 Python3 100例 实例001:数字组合 实例002:“个税计算” 实例003:完全平方数 实例004:这天第几天 实例005:三数排序 实例006:斐波那契 ...

  5. Java的Socket通信简单实例

    服务端 package testlxd; import java.io.BufferedReader; import java.io.IOException; import java.io.Input ...

  6. JAVA入门[19]-Hibernate简单示例

    一.Hibernate简介 在很多场景下,我们不需要使用JdbcTemplate直接操作SQL语句,这时候可以用ORM工具来节省数大量的的代码和开发时间.ORM工具能够把注意力从容易出错的SQL代码转 ...

  7. Java入门:绘制简单图形

    在上一节,我们学习了如何使用swing和awt工具创建一个空的窗口,本节学习如何绘制简单图形. 基本绘图介绍 Java中绘制基本图形,可以使用Java类库中的Graphics类,此类位于java.aw ...

  8. Map实现java缓存机制的简单实例

    缓存是Java中主要的内容,主要目的是缓解项目访问数据库的压力以及提升访问数据的效率,以下是通过Map实现java缓存的功能,并没有用cache相关框架. 一.缓存管理类 CacheMgr.java ...

  9. java 工厂方法模式简单实例

    工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象. 目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究 ...

随机推荐

  1. JavaScript系列-----对象基于哈希存储(<Key,Value>之Key篇) (1)

    1.Hash表的结构 首先,允许我们花一点时间来简单介绍hash表. 1.什么是hash表 hash表是一种二维结构,管理着一对对<Key,Value>这样的键值对,Hash表的结构如下图 ...

  2. JavaScript面向对象(收集整理)

    (1)封装 首先理解构造函数:所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上. f ...

  3. 网页静态化技术Freemarker的详细介绍

    网页静态化技术Freemarker 一.Freemarker的基本介绍 1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道 ...

  4. Hibernate开发文档

    hibernate配置 映射约束文件 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3. ...

  5. jQuery DataTables 获取选中行数据

    如题 想获取操作 DataTables 获取选中行数据 案1.主要是利用 js  getElementsByTagName 函数 然后对获取到的tr 进行操作  如下 function getChec ...

  6. 一:Spring Boot、Spring Cloud

    上次写了一篇文章叫Spring Cloud在国内中小型公司能用起来吗?介绍了Spring Cloud是否能在中小公司使用起来,这篇文章是它的姊妹篇.其实我们在这条路上已经走了一年多,从16年初到现在. ...

  7. SEO内链操作的技巧大家又知道多少

    关于一个优质的网站而言,一套优质的内部优化链接体系是必不可少的,简略来说杰出的内链体系能让网站页面之前彼此传递权重,协助搜索引擎快速辨认网站内容的中心,可是SEO内链操作的技巧我们又知道多少?下面齐鲁 ...

  8. js中的break,continue和return到底怎么用?

    为什么要说个?好像很简单,但是我也会迷糊,不懂有时候为什么要用return,然而break和continue也经常和他放在一起. 所以就一起来说一说,这三个看起来很简单,却常常会出错的关键词的具体用法 ...

  9. x01.AntWorld: An Python AI Game

    1. 学习了一下 AI 五子棋,顺手改作 19 路的棋盘,便于围棋通用.render.py 主要修改如下: # 常量部分: IMAGE_PATH = 'img/' StoneSize = 32 WID ...

  10. System.Transactions 事务超时属性

    最近遇到一个处理较多数据的大事务,当进行至10分钟左右时,爆出事务超时异常,如果Machine.config中不设置最大超时时间,则默认超时时间为10分钟 MachineSettingsSection ...