一、关于JdbcTemplate

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

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

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

二、Spring JdbcTemplate实例

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

1.创建表

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

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

db_store.sql

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

3.创建实体类Category

public class Category{
private int cateId; private String cateName; public int getCateId() {
return cateId;
} public void setCateId(int cateId) {
this.cateId = cateId;
} public String getCateName() {
return cateName;
} public void setCateName(String cateName) {
this.cateName = cateName;
} @Override
public String toString() {
return "id="+cateId+" name="+cateName;
}
}

  

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

    <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency> <!-- Mysql数据库链接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
<scope>runtime</scope>
</dependency>
</dependencies>

  

5.配置applicationContext.xml

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/store"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean> <bean id="categoryDao" class="CategoryDao">
<constructor-arg ref="jdbcTemplate"></constructor-arg>
</bean>
</beans>

  

6.数据访问实现类CategoryDao

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

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper; import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map; /**
* Created by 陈敬 on 2017/6/6.
*/
public class CategoryDao {
private JdbcTemplate jdbcTemplate; public CategoryDao(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
} public int add(Category category) {
String sql = "INSERT INTO category(id,name)VALUES(?,?)";
return jdbcTemplate.update(sql, category.getCateId(), category.getCateName());
} public int update(Category category) {
String sql = "UPDATE Category SET Name=? WHERE Id=?";
return jdbcTemplate.update(sql, category.getCateName(), category.getCateId());
} public int delete(int id) {
String sql = "DELETE FROM Category WHERE Id=?";
return jdbcTemplate.update(sql, id);
} public int count(){
String sql="SELECT COUNT(0) FROM Category";
return jdbcTemplate.queryForObject(sql,Integer.class);
} public Category getById(int id) {
String sql = "SELECT Id,Name FROM Category WHERE Id=?";
return jdbcTemplate.queryForObject(sql, (ResultSet rs, int rowNumber) -> {
Category category = new Category();
category.setCateId(rs.getInt("Id"));
category.setCateName(rs.getString("Name"));
return category;
}, id);
} public List<Category> getAll(){
String sql="SELECT Id,Name FROM Category"; List<Category> result=jdbcTemplate.query(sql, (resultSet, i) -> {
Category category = new Category();
category.setCateId(resultSet.getInt("Id"));
category.setCateName(resultSet.getString("Name"));
return category;
}); return result;
}
}

  

7.测试

@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class testCategoryDao {
@Autowired
private CategoryDao categoryDao; @Test
public void testAdd() {
Category category = new Category();
category.setCateId(4);
category.setCateName("母婴"); int result = categoryDao.add(category);
System.out.println(result);
} @Test
public void testUpdate() {
Category category = new Category();
category.setCateId(4);
category.setCateName("男装"); int result = categoryDao.update(category);
System.out.println(result);
} @Test
public void testGetById() {
int id = 4;
Category category = categoryDao.getById(id);
System.out.println(category.toString());
} @Test
public void testGetAll() {
List<Category> categories = categoryDao.getAll();
for (Category item : categories) {
System.out.println(item);
}
} @Test
public void testCount() {
int count = categoryDao.count();
System.out.println(count);
} @Test
public void testDelete() {
int id = 4;
int result = categoryDao.delete(id);
System.out.println(result);
}
}

  

完整代码: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. 利用C#来做ASP.NET的登陆页面

    一.新建一个数据库 新建一个access数据user.mdb. 新建一个user表,添加:UserId(文本类型)及Password(文本类型)两个字段.二.新建一个default.aspx文件. 在 ...

  2. Getting Started With setuptools and setup.py

    https://pythonhosted.org/an_example_pypi_project/setuptools.html http://www.ianbicking.org/docs/setu ...

  3. 使用apache进行域名绑定

    [背景] 项目需要搭建一套mysqlapi的开发环境,进行域名绑定 [方法] 主要方式通过修改apache的vhost配置文件,重启apache服务,以及最终在客户端绑定hosts. 1.查看apac ...

  4. 【O】VSS 2005上传PDF文件之后,打开提示文件损坏或者内容为空

    问题: VSS 2005上传PDF文件之后,打开提示文件损坏或者内容为空: 解决方式: 在vss的客户端的tools-option中,file type选项卡里,在binary file文本框中,加入 ...

  5. JSON Web Tokens(JWT)

    现在API越来越流行,如何安全保护这些API? JSON Web Tokens(JWT)能提供基于JSON格式的安全认证.它有以下特点: JWT是跨不同语言的,JWT可以在 .NET, Python, ...

  6. 1)C语言简介(C自考学习)

    C语言历史由来 世界上第一个高级语言是"ALFOL",而C的前身是ALGOL语言.1970年美国贝尔实验室的肯·汤普逊对BCPL(基本复合程序设计语言)进行了进一步的简化,突出了硬 ...

  7. FreeMarker 快速入门

    FreeMarker 快速入门 FreeMarker是一个很值得去学习的模版引擎.它是基于模板文件生成其他文本的通用工具.本章内容通过如何使用FreeMarker生成Html web 页面 和 代码自 ...

  8. 【MAVEN】maven系列--pom.xml标签详解

    pom文件作为MAVEN中重要的配置文件,对于它的配置是相当重要.文件中包含了开发者需遵循的规则.缺陷管理系统.组织.licenses.项目信息.项目依赖性等.下面将重点介绍一下该文件的基本组成与功能 ...

  9. JSP6(JSP 指令与JSP 动作元素)

    一.JSP指令用来设置整个JSP页面相关的属性 指令可以有很多个属性,它们以键值对的形式存在,并用逗号隔开. JSP中的三种指令标签: Page指令 Page指令为容器提供当前页面的使用说明.一个JS ...

  10. Mybatis分页插件PageHelper的配置和使用方法

     Mybatis分页插件PageHelper的配置和使用方法 前言 在web开发过程中涉及到表格时,例如dataTable,就会产生分页的需求,通常我们将分页方式分为两种:前端分页和后端分页. 前端分 ...