Spring JDBCTemplate原理及使用实例
作者:.长卿 发布时间:2023-03-11 09:47:19
一:JDBCTemplate简介
Spring为各种持久化技术提供了简单操作的模板和回调API:
ORM持久化技术 | 模板类 |
原生JDBC | org.springframework.jdbc.core.JdbcTemplate |
Hibernate5.0 | org.springframework.orm.hibernate5.HibernateTemplate |
IBatis(MyBatis) | org.springframework.orm.ibatis.SqlMapClientTemplate |
JPA | org.springfrmaework.orm.jpa.JpaTemplate |
其中,对于原生的JDBC编程,Spring提供了JDBCTemplate,对jdbc操作进行了一系列封装,使得jdbc编程更加简单。
二:引入jar包或添加依赖
数据库驱动包则按需引入。
三:创建数据库连接配置文件
jdbc.user=root
jdbc.password=123456
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc\:......
四:Spring托管
在Spring配置文件中,注入dataSource,从配置文件中获取内容进行bean的初始化。
<context:property-placeholder location="classpath:db.properties"/> //指定数据库连接配置文件
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> //托管dataSource bean
<property name="user" value="${jdbc.user}"></property> //获取配置文件内容对dataSource进行初始化
<property name="password" value="${jdbc.password}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> //托管jdbcTemplate,引用dataSource
<property name="dataSource" ref="dataSource"></property>
</bean>
五:在代码中使用
1:通过Spring配置文件启动IOC容器
//启动IoC容器
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
2:在IOC容器获取jdbcTemplate实例
//获取IoC容器中JdbcTemplate实例
JdbcTemplate jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate");
3:使用jdbcTemplate调用方法执行数据库操作
JdbcTemplate主要提供以下五大方法:
execute方法:可以用于执行任何SQL语句。
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
query方法及queryForXXX方法:用于执行查询相关语句;
call方法:用于执行存储过程、函数相关语句。
3.1)通过 update 进行插入
String sql="insert into user (name,deptid) values (?,?)";
int count= jdbcTemplate.update(sql, new Object[]{"caoyc",3});
3.2)通过 update 进行修改
String sql="update user set name=?,deptid=? where id=?";
jdbcTemplate.update(sql,new Object[]{"zhh",5,51});
3.3)通过 update 进行删除
String sql="delete from user where id=?";
jdbcTemplate.update(sql,51);
3.4)批量插入、修改、删除
String sql="insert into user (name,deptid) values (?,?)";
List<Object[]> batchArgs=new ArrayList<Object[]>();
batchArgs.add(new Object[]{"caoyc",6});
batchArgs.add(new Object[]{"zhh",8});
batchArgs.add(new Object[]{"cjx",8});
jdbcTemplate.batchUpdate(sql, batchArgs);
六:在DAO层使用
数据库操作一般结合ORM进行使用。
1:首先定义实体类
package com.proc;
public class User {
private Integer id;
private String name;
private Integer deptid;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getDeptid() {
return deptid;
}
public void setDeptid(Integer deptid) {
this.deptid = deptid;
}
public String toString() {
return "User [id=" + id + ", name=" + name + ", deptid=" + deptid + "]";
}
}
2:然后定义该实体类的DAO类
package com.proc;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
@Repository
public class UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public User get(int id){
String sql="select id,name,deptid from user where id=?";
RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
return jdbcTemplate.queryForObject(sql, rowMapper,id);
}
}
在DAO类中,定义对应实体实例的增删查改操作方法,在方法体中,使用jdbcTemplate。
3:在service层,通过dao实例调用方法,执行数据操作。
UserDao userDao=(UserDao) ctx.getBean("userDao");
System.out.println(userDao.get(53));
来源:https://www.cnblogs.com/ygj0930/p/11281055.html
猜你喜欢
- 题目一链表题——链表合并根据给定的两个升序链表合并为一个新的升序链表具体题目如下解法/** * Definition for singly-
- 项目场景:适用于接口数据敏感信息,比如 明文传输姓名、居住地址、手机号等信息,如果存在明文传输敏感数据问题、及数据泄漏风险,则可使用此方法加
- 前言CompletableFuture实现了CompletionStage接口和Future接口,前者是对后者的一个扩展,增加了异步回调、流
- 1、conditional注解介绍含义: 基于条件的注解作用: 根据是否满足某一个特定条件来决定是否创建某个特定的bean意义: Sprin
- 这篇文章主要介绍了Java方法重载Overload原理及使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 这篇文章主要介绍了如何使用两个栈实现队列Java,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以
- 下面给大家介绍下mybatis结果生成键值对的实例代码,具体内容如下所示:在实际应用中我们经常会遇到这样的情况,需要给下拉框赋值,这个时候就
- 1 关于自动内存管理Java是由jvm来管理内存,包括自动分配以及自动回收,因此它不容易出现内存泄漏和内存溢出问题。C/C++,由程序员手动
- 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都
- 题目描述Java创建线程的几种方式Java使用Thread类代表线程,所有线程对象都必须是Thread类或者其子类的实例。Java可以用以下
- 在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进
- mybatis初始化SqlSessionFactory失败总结原因有几点1.resources中的xml配置文件放错位置或者是放的太深加载不
- Android 应用签名的两种方法一、使用pem签名 (一) apk签名命令java –jar sign
- 仅供学习交流,禁止商业用途。如侵害利益,联系必删!前言最近一位小伙伴钟爱二次元文化,于是找到半次元这个app,但是很快他就遇到了问题。一、案
- 一、 WillPopScope用法WillPopScope本质是一个widget用于拦截物理按键返回事件(Android的物理返回键和iOS
- import java.util.Arrays;/** * 栈的实现<br> * @author Skip&
- 本文实例为大家分享了Java基于Socket实现简易版多人聊天室的具体代码,供大家参考,具体内容如下一、 聊天室需求1、一个服务端,多个客户
- 本文实例讲述了Java定义泛型方法。分享给大家供大家参考,具体如下:一 点睛1 如果定义类、接口是没有使用类型形参,但定义方法时想自己定义类
- 前言开发中,免不了会用到多边形、多角星等图案,比较常用的多边形比如雷达图、多角星比如评价星级的五角星等,本篇文章就使用Flutter绘制封装
- 分类1.简单工厂模式2.工厂方法模式3.抽象工厂模式案例需求根据蛋糕的不同口味,分别创建苹果味和香蕉味的蛋糕实例方案一:简单工厂模式定义蛋糕