1、简介

1.1 为什么使用Spring框架中的JDBC?


1.2 使用Spring JDBC需要使用的模板类


2、实现

2.1 准备依赖

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.project</groupId><artifactId>Spring04</artifactId><version>1.0.0</version><name>Spring04</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target><!--定义全局变量:变量名为project.spring.version--><project.spring.version>5.0.0.RELEASE</project.spring.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${project.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${project.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${project.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>${project.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${project.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${project.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${project.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${project.spring.version}</version></dependency><!--德鲁伊连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency><!--mysql连接驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.20</version><scope>provided</scope></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.2</version></dependency></dependencies><build><!--加载资源文件--><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes></resource></resources></build>
</project>

2.2 创建数据表及实体类

@Setter@Getter@ToString
@AllArgsConstructor@NoArgsConstructor
public class User {private Integer id;private String name;private String passwd;}

2.3 编写Dao层接口及实现类

实现类完成对数据库的增删改查方法:

public class UserDaoImpl implements IUserDao {/*通过JdbcTemplate类,获得jdbc的connection对象*/private JdbcTemplate jdbcTemplate;/*通过datasource的get方法,将xml里面的数据源注入*/public void setDataSource1(DataSource dataSource){this.jdbcTemplate = new JdbcTemplate(dataSource);}/*增删改都是使用update*/public void insert(User user) {this.jdbcTemplate.update("insert into users values (null,?,?)",user.getName(),user.getPasswd());}@Overridepublic void update(User user) {jdbcTemplate.update("update users set name=? where id=?",user.getName(),user.getId());}@Overridepublic void delete(Integer id) {jdbcTemplate.update("delete from users where id=?",id);}@Overridepublic User selectone(Integer id) {List<User> list = this.jdbcTemplate.query("select * from users where id=?",new Object[]{id},new RowMapper<User>() {@Overridepublic User mapRow(ResultSet rs, int i) throws SQLException {User user = new User();user.setId(rs.getInt("id"));user.setName(rs.getString("name"));user.setPasswd(rs.getString("passwd"));return user;}//方法的返回值,就会直接封装到集合集合中});return list.size()>0? list.get(0):null;}@Overridepublic List<User> select() {List<User> query = this.jdbcTemplate.query("select * from users",new RowMapper<User>() {@Overridepublic User mapRow(ResultSet rs, int i) throws SQLException {User user = new User();user.setId(rs.getInt("id"));user.setName(rs.getString("name"));user.setPasswd(rs.getString("passwd"));return user;}});return query;}
}

2.4 配置Spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!--引入数据库数据源--><context:property-placeholder location="classpath:db.properties" system-properties-mode="NEVER"/><bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></bean><bean id="service" class="com.project.SpringJDBC.service.impl.UserServiceImpl"><property name="dao" ref="dao"/></bean><bean id="dao" class="com.project.SpringJDBC.dao.impl.UserDaoImpl"><property name="dataSource1" ref="datasource"/></bean></beans>

在resources目录下,新建db.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8
username=root
password=admin

2.5 测试增删改查

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestRun {@Autowiredprivate IUserService service;@Testpublic void save(){User user = new User(null,"张三三","10086");service.insert(user);}@Testpublic void update(){User user = new User(15,"张123","10086");service.update(user);}@Testpublic void delete(){service.delete(16);}@Testpublic void selectone(){User selectone = service.selectone(190);System.out.println(selectone);}@Testpublic void select(){List<User> select = service.select();System.out.println(select);}
}

3、小结

1.查询单个对象时,可以使用JDBCTemplate的queryForObject方法,方法的第一个参数为SQL语句,第二参数为SQL中需要的参数,第三个参数为实现RowMapper接口的对象,用于处理结果集,该方法要求返回单一的对象。

此方法在没有查询到结果集时会抛出异常。
2.查询集合对象,可以使用JDBCTemplate的query方法,参数与queryForObject相同,也可以部传入SQL需要的参数.

3.推荐使用Mybatis!

Spring JDBC的原理与实现相关推荐

  1. spring Mvc 执行原理 及 xml注解配置说明 (六)

    Spring MVC 执行原理 在 Spring Mvc 访问过程里,每个请求都首先经过 许多的过滤器,经 DispatcherServlet 处理; 一个Spring MVC工程里,可以配置多个的 ...

  2. 【JAVA SE】第十七章 反射、注解与Spring事务底层原理

    第十七章 反射.注解与Spring事务底层原理 文章目录 第十七章 反射.注解与Spring事务底层原理 一.反射 1.简介 2.意义 3.缺点 4.应用场景 5.反射技术的使用 二.注解 1.概念 ...

  3. 春天到了,讲讲Spring的工作原理

    一.春天到了,讲讲Spring的工作原理 在致力于优质IT知识出版分享的异步社区,有这么一本书--两版累计销售了近10w本,它可是完完全全靠着自己过硬的内容实力打出的这片天! 第二版已出版4年,基于S ...

  4. Spring的工作原理(一)简介

    Spring的工作原理 有时候面试的时候,面试官:会用Spring么?答:会,我们公司就用的Spring.面试官:Spring怎么进行控制反转的?切面怎么实现的?切面回用于哪一些场景?用到了哪一些设计 ...

  5. Spring底层核心原理

    Spring底层整体了解 Bean的生命周期底层原理 依赖注入底层原理 初始化底层原理 推断构造底层原理 AOP底层原理 Spring事务底层原理 Spring是如何创建一个对象的 Annotatio ...

  6. Spring事务实现原理

    对于一个应用而言,事务的使用基本是不可避免的.虽然Spring给我们提供了开箱即用的事务功能-- @Transactional . 但是,自带的事务功能却也存在控制粒度不够的缺点.更糟糕的是, @Tr ...

  7. 分析Spring事务管理原理及应用

    目录 一.Spring事务管理介绍 (一)基本理论 (二)实际工作中的举例 (三)简单应用举例 二.Spring事务配置介绍 (一)Spring事务属性介绍 传播属性(传播行为)可选值说明 (二)声明 ...

  8. Struts2+spring+jdbc 以xml配置形式整合

    今天做作业,练习一下Struts2+spring+jdbc 以xml配置形式整合 整合步骤: 工程结构图: 重要配置文件 web.xml <?xml version="1.0" ...

  9. Java EE---通过Spring JDBC实现数据库的增、删、改、查

    Spring JDBC之update.query方法 1.项目清单 2.全部代码 2.1.student 2.2.stuDao 2.3.applicationContext.xml 2.4.test ...

最新文章

  1. CODEVS-1758-维护数列-NOI2005-splay
  2. ML 自学者周刊:第 2 期
  3. 敏捷开发总结(1)软件研发过程
  4. Bootstrap3 按钮状态提示
  5. Java虚拟机------JVM介绍
  6. 解决U盘插入我的电脑中不显示
  7. VSTO简介及简单使用
  8. spring自定义yml文件解析器
  9. winapi获取鼠标指向当前元素
  10. 说一下反三角函数atan等的角度计算值,弧度制和角度制
  11. C语言switch练习之输入某年某月某日,判断这一天是这一年的第几天。
  12. 吃饭 睡觉 打豆豆!!!
  13. input.validity
  14. 硬盘的IDE和串口什么意思
  15. 利用html标记制作静态网页,使用HTML制作网页《静态网页制作》.ppt
  16. 风口背后:第一批 00 后 Web3 创业者,和他们的「人间清醒」
  17. pat乙级题目—1001 害死人不偿命的(3n+1)猜想
  18. 卡尔曼滤波与组合导航原理_无人机机载导航系统和传感器基本原理
  19. 学习笔记 偶数的个数
  20. 常用电子元器件及封装 20170612 周一

热门文章

  1. kubernetes组件再认知
  2. matlab如何做向量内积,matlab2010a的bug:* 向量内积的错误解决方案
  3. 2017年8月读书笔记
  4. 简单Twitter爬虫--关键词
  5. Vue:计算属性及监听
  6. python threading setdaemon_Python线程为什么搞个setDaemon
  7. 订阅Linux的邮件列表
  8. 关于支付漏洞方式的测试
  9. python Django框架之URL与视图(3)
  10. umount时,目标忙解决办法