Spring数据访问之JdbcTemplate
Spring数据访问之JdbcTemplate
使用JdbcTemplate的基本操作步骤
1.引jar包
aaarticlea/png;base64,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" alt="" />
项目的基本架构
aaarticlea/png;base64,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" alt="" />
这里重点看实现类的内容
package cn.hmy.dao.impl; import java.util.List; import org.springframework.jdbc.core.support.JdbcDaoSupport; import cn.hmy.beans.Emp;
import cn.hmy.dao.IEmpDao;
import cn.hmy.util.MyRowMapper; public class EmpDaoImpl extends JdbcDaoSupport implements IEmpDao { //获取员工总人数
public int getTotalCount() throws Exception {
String sql="select * from emp";
Integer count=this.getJdbcTemplate().queryForObject(sql, Integer.class);
return count;
} //添加员工信息
public int addEmp(Emp emp) throws Exception {
String sql="insert into emp(empNo,empName,deptNo) values(?,?,?)";
int count = this.getJdbcTemplate().update(sql, emp.getEmpNo(),emp.getEmpName(),emp.getDeptNo());
return count;
} //查询所有的员工信息
public List<Emp> getAllEmps() throws Exception {
String sql="select * from emp";
List<Emp> list = this.getJdbcTemplate().query(sql,new MyRowMapper());
return list;
} }
EmpDaoImpl
package cn.hmy.service.impl; import java.util.List; import cn.hmy.beans.Emp;
import cn.hmy.dao.IEmpDao;
import cn.hmy.service.IEmpService; public class EmpServiceImpl implements IEmpService{ private IEmpDao empDao; //获取员工总记录数
public int getTotalCount() throws Exception{
return empDao.getTotalCount();
} //添加员工
public int addEmp(Emp emp) throws Exception {
return empDao.addEmp(emp);
} //查询员工的所有信息
public List<Emp> getAllEmps() throws Exception {
return empDao.getAllEmps();
}
public IEmpDao getEmpDao() {
return empDao;
} public void setEmpDao(IEmpDao empDao) {
this.empDao = empDao;
} }
EmpServiceImpl
在查询的时候我们为了能使查询到的结果集返回泛型集合,我们又为了减少代码量,就提出一个util类MyRowMapper类,来转换结果集
package cn.hmy.util; import java.sql.ResultSet;
import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; import cn.hmy.beans.Emp; public class MyRowMapper implements RowMapper{ public Emp mapRow(ResultSet rs, int rowNum) throws SQLException {
Emp emp=new Emp();
emp.setDeptNo(rs.getInt("deptNo"));
emp.setEmpName(rs.getString("empName"));
emp.setEmpNo(rs.getInt("empNo"));
return emp;
} }
MyMapper
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"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 注册jdbc属性 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"></property>
</bean> <!-- Spring 内置配置数据源 -->
<!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.className}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean> --> <!--注册dbcp数据源 -->
<!-- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.className}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean> --> <!--注册c3p0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.className}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean> <!--配置jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean> <!-- 管理empDao实现类 -->
<bean id="empDao" class="cn.hmy.dao.impl.EmpDaoImpl"> <property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean> <!-- 管理empService实现类 -->
<bean id="empService" class="cn.hmy.service.impl.EmpServiceImpl">
<property name="empDao" ref="empDao"></property>
</bean> </beans>
书写测试类
package cn.hmy.test; import java.util.List; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.hmy.beans.Emp;
import cn.hmy.service.IEmpService; public class MyTest {
@Test
public void getAdd() throws Exception{
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
IEmpService service=(IEmpService)context.getBean("empService");
Emp emp=new Emp();
emp.setDeptNo(1);
emp.setEmpName("123");
emp.setEmpNo(10);
int addEmp;
try {
addEmp = service.addEmp(emp);
System.out.println(addEmp);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void getAllEmps() throws Exception{
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
IEmpService service=(IEmpService)context.getBean("empService");
List<Emp> allEmps = service.getAllEmps();
for (Emp emp : allEmps) {
System.out.println(emp.getEmpName());
} }
}
测试类
Spring数据访问之JdbcTemplate的更多相关文章
- 三、Spring——数据访问
1.Spring 对 DAO的支持 Spring支持目前大多数常用的数据持久化技术,Spring定义了一套面向DAO层的异常体系,并未各种支持的持久化技术提供了异常转换器.这样,我们在设计DAO接口时 ...
- Spring数据访问和事务
1.模型 2.解耦 3.实现 3.1 核心接口 3.2 代码分析 3.2.1 事务管理 3.2.2 数据访问 4.使用 4.1 编程模式 4.2 配置模式 4.2.1 声明式配置方式 4.2.2 注解 ...
- Spring数据访问2 - 通过JDBC访问数据库
因为原生的jdbc操作太复杂,几乎都是建立连接.关闭连接和处理例外等模板式的代码,Spring对此进行了抽象——使用模板来消除样板式代码 ,JdbcTemplate承担了简化数据库访问这块的任务. 利 ...
- Spring数据访问1 - 数据源配置及数据库连接池的概念
无论你要选择哪种数据访问方式,首先你都需要配置好数据源引用. Spring中配置数据源的几种方式 通过在JDBC驱动程序定义的数据源: 通过JNDI查找的数据源: 连接池的数据源: 对于即将发布到生产 ...
- Spring 梳理-数据访问-DB
针对接口编程 DAO是指数据访问对象(data access object),它提供了数据读取和写入到数据库中的一种方式.Spring认为,它应该以接口的方式发布功能,而应用程序的其他部分需要通过接口 ...
- Spring ( 五 )Spring之数据访问与事务管理
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Spring之数据访问 1.Spring数据访问工程环境搭建 jdbc.properties配置 ...
- 【转】在Spring中基于JDBC进行数据访问时怎么控制超时
http://www.myexception.cn/database/1651797.html 在Spring中基于JDBC进行数据访问时如何控制超时 超时分类 超时根据作用域可做如下层级划分: Tr ...
- Spring04-SpringEL&Spring JDBC数据访问
一. SpringEL入门 Spring动态语言(简称SpEL) 是一个支持运行时查询和操作对象图的强大的动态语言,语法类似于EL表达式,具有诸如显示方法和基本字符串模板函数等特性. 1. 准备工作 ...
- Spring Boot 揭秘与实战(二) 数据存储篇 - 数据访问与多数据源配置
文章目录 1. 环境依赖 2. 数据源 3. 单元测试 4. 源代码 在某些场景下,我们可能会在一个应用中需要依赖和访问多个数据源,例如针对于 MySQL 的分库场景.因此,我们需要配置多个数据源. ...
随机推荐
- 【word】html转doc的小研究
html转doc,页眉页脚丢失 html 转 doc,是全屏铺满(缩放级别很高)
- 第三章习题 C++ Primer 第六版
1.使用一个整数输入自己的身高(单位为cm),并将此身高转化为米和厘米共同表示的形式,使用下划线字符来指示输入的位置,使用一个const符号常量来表示转换因子. #include<iostrea ...
- C++ 二叉搜索树
二叉搜索树利用其特有的二叉树性质,使其搜索更方便 源代码: struct node { int val; node *left, *right; }; //the function of insert ...
- (B)springboot配置开发和测试环境并添加启动路径
嗯,开发和测试环境要分离,这是一般共识(虽然我工作过的公司都没有这种分离),spring boot也可以按照配置文件的读取来做到这一点. 上图有三个application开头的配置文件,要达到能够读取 ...
- PowerDesigner常用功能总结
1.PowerDesigner设计表时显示注释列Comment 选中准备编辑的表,[右键]->[Properties]->[Columns]->[Customize Columns ...
- GCD那些事儿
GCD GCD,全名Grand Central Dispatch,中文名郭草地,是基于C语言的一套多线程开发API,一听名字就是个狠角色,也是目前苹果官方推荐的多线程开发方式.可以说是使用方便,又不失 ...
- 剑指Offer - 九度1368 - 二叉树中和为某一值的路径
剑指Offer - 九度1368 - 二叉树中和为某一值的路径2013-11-23 03:46 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结 ...
- 《Cracking the Coding Interview》——第9章:递归和动态规划——题目5
2014-03-20 03:23 题目:给定一个字符串,输出其全排列. 解法:可以调用STL提供的next_permutation(),也可以自己写一个.对于这种看起来简单的题目,应该在能优化的地方, ...
- [转]赵桐正thinkphp教程笔记
原文:赵桐正thinkphp教程笔记 ,有修改 常用配置 常用配置config.php: <?php return array( //'配置项'=>'配置值' 'URL_PATHINFO_ ...
- sublime text基本配置备份
sublime text基本配置备份: // Settings in here override those in "Default/Preferences.sublime-settings ...