JAVA入门[18]-JdbcTemplate简单实例

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介:

一、关于JdbcTemplate

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

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

Image(6)

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

二、Spring JdbcTemplate实例

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

1.创建表

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

  db_store.sql

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

Image(7)

3.创建实体类Category

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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,引入相关依赖。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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语法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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.测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
@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

 


    本文转自 陈敬(Cathy) 博客园博客,原文链接http://www.cnblogs.com/janes/p/6971839.html:,如需转载请自行联系原作者



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
2月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
325 0
|
3月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
426 0
|
4月前
|
安全 Java 数据库连接
2025 年最新 Java 学习路线图含实操指南助你高效入门 Java 编程掌握核心技能
2025年最新Java学习路线图,涵盖基础环境搭建、核心特性(如密封类、虚拟线程)、模块化开发、响应式编程、主流框架(Spring Boot 3、Spring Security 6)、数据库操作(JPA + Hibernate 6)及微服务实战,助你掌握企业级开发技能。
706 3
|
3月前
|
前端开发 Java 数据库连接
帮助新手快速上手的 JAVA 学习路线最详细版涵盖从入门到进阶的 JAVA 学习路线
本Java学习路线涵盖从基础语法、面向对象、异常处理到高级框架、微服务、JVM调优等内容,适合新手入门到进阶,助力掌握企业级开发技能,快速成为合格Java开发者。
588 3
|
4月前
|
NoSQL Java 关系型数据库
Java 从入门到进阶完整学习路线图规划与实战开发最佳实践指南
本文为Java开发者提供从入门到进阶的完整学习路线图,涵盖基础语法、面向对象、数据结构与算法、并发编程、JVM调优、主流框架(如Spring Boot)、数据库操作(MySQL、Redis)、微服务架构及云原生开发等内容,并结合实战案例与最佳实践,助力高效掌握Java核心技术。
457 1
|
4月前
|
Java 测试技术 API
Java IO流(二):文件操作与NIO入门
本文详解Java NIO与传统IO的区别与优势,涵盖Path、Files类、Channel、Buffer、Selector等核心概念,深入讲解文件操作、目录遍历、NIO实战及性能优化技巧,适合处理大文件与高并发场景,助力高效IO编程与面试准备。
|
4月前
|
Java 编译器 API
Java Lambda表达式与函数式编程入门
Lambda表达式是Java 8引入的重要特性,简化了函数式编程的实现方式。它通过简洁的语法替代传统的匿名内部类,使代码更清晰、易读。本文深入讲解Lambda表达式的基本语法、函数式接口、方法引用等核心概念,并结合集合操作、线程处理、事件回调等实战案例,帮助开发者掌握现代Java编程技巧。同时,还解析了面试中高频出现的相关问题,助你深入理解其原理与应用场景。
|
3月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
164 0
|
3月前
|
Java API 数据库
2025 年最新 Java 实操学习路线,从入门到高级应用详细指南
2025年Java最新实操学习路线,涵盖从环境搭建到微服务、容器化部署的全流程实战内容,助你掌握Java 21核心特性、Spring Boot 3.2开发、云原生与微服务架构,提升企业级项目开发能力,适合从入门到高级应用的学习需求。
855 0
|
4月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
379 1