最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

jdbcTemplate使用示例详解|spring教程

Javaweb 太平洋学习网 浏览 评论

spring中的jdbcTemplate实际操作类是NamedParameterJdbcTemplate,它是spring对jdbc的一次简单封装,里面封装好了增删改查的方法,使用原生的sql语句操作数据库,效率会比ssm或ssh框架都要高很多。

一般使用spring+springmvc就可以搭建一个效率非常高的web项目了,下面我们将搭建一个spring jdbcTemplate项目,暂时也不用springmvc来操作界面,也没有做service层,只在dao层对数据库进行增删改查操作。

下面的步骤是经过小编自己操作过的,如果看不懂下面的教程,请点击百度云下载本项目:spring jdbcTemplate项目完整版下载,为了便于理解,请先看小编搭建的项目结构,如图:

QQ截图20171210220618.jpg

步骤一:创建一个Employee员工表,sql语句如下:

create table employee(  
	id int(10),  
	name varchar(100),  
	salary int(10)  
);

步骤二:创建名为jdbcTemplateDemo的maven项目,在pom.xml文件中导入spring框架以及与jdbc,mysql connector驱动器相关的maven jar包,代码如下:

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.45</version>
</dependency>
<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.12</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-test</artifactId>
	<version>5.0.2.RELEASE</version>
	<scope>test</scope>
</dependency>

步骤三:新建Employee员工实体类,代码如下:

public class Employee {
	private int id;  
	private String name;  
	private int salary;
	//getter setter省略	
}

步骤四:jdbcTemplate的好处是因为它相当于ssm框架中的通用mapper类,因此封装好了一个BaseDao类的话,就可以节约很多重复的代码,下面是BaseDao的封装方法,首先定义BaseDao的接口类,如下:

public interface BaseDao {
	//增
	int insert(String sqlString, Object params);
	//删	
	int delete(String sqlString, Object params);
	//改
	int update(String sqlString, Object params);
	//查一条
	<T> T findOne(String sqlString, Object params, Class<T> clazz);
	//查列表
	<T> List<T> findRows(String sqlString, Object params, Class<T> clazz);
}

步骤五:定义BaseDaoImpl实现类,实现BaseDao接口中的通用方法,如下:

public class BaseDaoImpl implements BaseDao{
	
	@Autowired
	protected NamedParameterJdbcTemplate jdbcTemplate;

	public int insert(String sqlString, Object params) {
		SqlParameterSource sqlParam = this.getSqlParam(params);
		return jdbcTemplate.update(sqlString, sqlParam);
	}

	public int delete(String sqlString, Object params) {
		SqlParameterSource sqlParam = this.getSqlParam(params);
		return jdbcTemplate.update(sqlString, sqlParam);
	}

	public int update(String sqlString, Object params) {
		SqlParameterSource sqlParam = this.getSqlParam(params);
		return jdbcTemplate.update(sqlString, sqlParam);
	}

	public <T> T findOne(String sqlString, Object params, Class<T> clazz) {
		List<T> list = this.findRows(sqlString, params, clazz);
		return list.size() == 0 ? null : list.get(0);
	}

	//批量查询
	public <T> List<T> findRows(String sqlString, Object params, Class<T> clazz) {
		SqlParameterSource sqlParam = this.getSqlParam(params);
		List<T> list = jdbcTemplate.query(sqlString, sqlParam, new BeanPropertyRowMapper<T>(clazz));
		return list;
	}

	private SqlParameterSource getSqlParam(Object params) {
		if (params == null)
			return null;
		SqlParameterSource paramSource;
		if(params instanceof MapSqlParameterSource){
			paramSource = (MapSqlParameterSource)params;
		}else{
			paramSource = (BeanPropertySqlParameterSource)params;
		}
		return paramSource;
	}	
}

步骤六:在第五个步骤中,有一个@Autowired注解注入jdbcTemplate,之所以可以这样,就是因为我们在applicationContext.xml文件中对NamedParameterJdbcTemplate进行了bean配置,代码如下:

<?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"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:util="http://www.springframework.org/schema/util"
	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 
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
	
	<context:component-scan base-package="com.tpyyes" />
	
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true" />
		<property name="username" value="root" />
		<property name="password" value="root" />
	</bean>

	<bean id="jdbcTemplate"
		class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
		<constructor-arg ref="dataSource"></constructor-arg>
	</bean>
	<bean id="empDao" class="com.tpyyes.dao.impl.EmployeeDaoImpl"/>
</beans>

步骤七:新建EmployeeDao接口类,加入如下增删改查的方法:

public interface EmployeeDao {
	//增
	int saveEmployee(Employee e);
	//删
	int deleteEmployee(int id);
	//改
	int updateEmployee(Employee e);
	//查
	Employee findEmployee(int id);
}

步骤八:新建EmployeeDaoImpl实现类,实现EmployeeDao接口,并继承我们前面定义的BaseDaoImpl实现类,这样我们就可以使用父类BaseDao中的通用方法了,如下:

public class EmployeeDaoImpl extends BaseDaoImpl implements EmployeeDao{

	public int saveEmployee(Employee e) {
		String sqlStr="insert into employee values (:id,:name,:salary)"; 
		BeanPropertySqlParameterSource beanParam = new BeanPropertySqlParameterSource(e);
		return this.update(sqlStr, beanParam);
	}

	public int deleteEmployee(int id) {
		String sqlStr="delete from employee where id=:empId";
		MapSqlParameterSource map = new MapSqlParameterSource("empId",id);
		return this.update(sqlStr, map);
	}

	public int updateEmployee(Employee e) {
		String sqlStr = "update employee set name=:name,salary=:salary where id=:id";
		BeanPropertySqlParameterSource beanParam = new BeanPropertySqlParameterSource(e);
		return this.update(sqlStr, map);
	}

	public Employee findEmployee(int id) {
		String sqlStr = "select * from where id=:empId";
		MapSqlParameterSource map = new MapSqlParameterSource("empId",id);
		return this.findOne(sqlStr, map, Employee.class);
	}
	
}

注释:如果不知道MapSqlParameterSource与BeanPropertySqlParameterSource这两个参数封装类的区别,请查看教程:http://www.tpyyes.com/a/javaweb/2017/1210/427.html

步骤九:创建EmployeeTest类,对前面EmployeeDaoImpl实现类中的方法进行junit测试,代码如下:

@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class EmployeeTest {
	
	@Autowired
	private EmployeeDao empDao;
	
	@Test
	public void save(){
		Employee emp = new Employee();
		emp.setId(1);
		emp.setName("哈哈");
		emp.setSalary(5770);
		int num = empDao.saveEmployee(emp);
		System.out.println(num);
	}
	
	@Test
	public void update() {
		Employee emp = new Employee();
		emp.setId(6);
		emp.setName("李四2");
		emp.setSalary(100);
		int num = empDao.updateEmployee(emp);
		System.out.println(num);
	}
	
	@Test
	public void delete() {
		int num = empDao.deleteEmployee(1);
		System.out.println(num);
	}
	
	/**
	 * 项目中还包括单个查询,批量查询,批量更新,批量删除
	 * 完整代码,请下载查看
	 */
}

提醒:jdbcTemplate完整代码在文章开头处有下载链接,如果有问题,请搜索并关注微信公众号“太平洋学习网”,像小编提出优秀的建议。

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/javaweb/428.html
"文章很值,打赏犒劳作者一下"
微信号: Javaweb_engineer

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

与本文相关的文章

发表我的评论
取消评论

表情

您的回复是我们的动力!

  • 昵称 (必填)

网友最新评论