ssm:spring操作数据库-----JdbcTemplate

使用原始JDBC操作数据的代码比较复杂,繁琐,因此spring专门提供了一个模板类JdbcTemplate来简化JDBC的操作。

1.JdbcTemplate的各种方法

execute(String sql):用于执行sql语句,通常执行DDL语句
int update(String sql):根据sql中的不带参数的增删改查语句执行数据操作,返回受影响的行数
Int update(String sql,Object...args):这个sql通常是带"?"占位符的,args用于为这些占位符参数赋值,同时返回受影响的行数
List<T>query(String sql,RowMapper<T> rowMapper):执行不带参数的select语句,返回多条值的情况,封装成T类型的泛型集合
												事先要定义好RowMapper<T>对象rowMapper
List<T>query(String sql,Object[] args,RowMapper<T> rowMapper):执行带参数的select语句,返回多条值的情况,封装成T类型的泛型集合
															事先要定义好RowMapper<T>对象rowMapper
SqlRowSet queryForRowSet(String sql):可用于查询部分列,或类似count(*)的聚合查询语句,返回SqlRowSet行集合。
									需要调用next方法移到行集合的第一行,再用getInt(列号)获取。
TqueryForObject(String sql,RowMapper<T> rowMapper):执行不带参数的select语句,返回单条值的情况,封装成T类型
															事先要定义好RowMapper<T>对象rowMapper
TqueryForObject(String sql,Object[] args,RowMapper<T> rowMapper):执行带参数的select语句,返回单条值的情况,封装成T类型
															事先要定义好RowMapper<T>对象rowMapper

2.JdbcTemplate数据源
a.配置步骤与其关键代码
i.要在spring配置文件中配置数据源dataSource连接到数据库

ii.配置JdbcTemplate模板,将dataSource注入给JdbcTemplate的dataSource属性

iii.将JdbcTemplate实例化对象注入给调用者的JdbcTemplate属性


	<!-- 配置数据源 -->
	<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/usersdb" />
		<property name="username" value="root" />
		<property name="password" value="123abc" />
	</bean>	
	
	<!-- 配置jdbcTemplate模板 注入dataSource -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.jdbcTemplate">
		<property name="dataSource" ref="dataSource" />	
	</bean>

	<!-- 配置DAO,注入jdbcTemplate属性值 -->
	<bean id="userDao" class="com.xiaochen.dao.UserDaoImpl">
		<property name="jdbcTemplate" ref="jdbcTemplate" />
	</bean>	

b.数据源类别
i.DriverMangerDataSource数据源(spring默认使用)
ii.DBCP数据源
iii.C3P0数据源

应用实例:使用JdbcTemplate操作数据库Usersdb,实现增删改查数据。
项目目录结构图
在这里插入图片描述

需要用到的数据库

create database usersdb; 

User.java

package com.xiaochen.entity;

public class User {
	private String uid;
	private String uname;
	private String gender;
	private int age;	
	public User(){		
	}	
	public User(String uid,String uname,String gender,int age){
		this.uid=uid;
		this.uname=uname;
		this.gender=gender;
		this.age=age;
	}	
	public void show(){
		System.out.println("用户编号:"+uid+" 用户姓名:"+uname+" 用户性别:"+gender+" 用户年龄:"+age);
	}
	public String getUid() {
		return uid;
	}
	public void setUid(String uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}	
	
	

}

UserDao.java

package com.xiaochen.dao;

import java.util.List;

import com.xiaochen.entity.User;

public interface UserDao {
	public void create();	
	public void add(User user);
	public void delete(int id);
	public void update(User user);
	public List<User> findAllUsers();
	public User findUserById(int id);	
	public int count();
}

UserDaoImpl.java

package com.xiaochen.dao;

import java.util.List;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.rowset.SqlRowSet;

import com.xiaochen.entity.User;

public class UserDaoImpl implements UserDao {
	JdbcTemplate jdbcTemplate;

	public JdbcTemplate getJdbcTemplate() {
		return jdbcTemplate;
	}

	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	// 创建数据库表
	@Override
	public void create() {
		String sql = "create table user(uid varchar(20),uname varchar(50),gender varchar(6),age int);";
		jdbcTemplate.execute(sql);
	}

	@Override
	public void add(User user) {
		String sql = "insert into user(uid,uname,gender,age) values(?,?,?,?)";
		Object[] params = { user.getUid(), user.getUname(), user.getGender(), user.getAge() };
		jdbcTemplate.update(sql, params);
	}

	@Override
	public void delete(int id) {
		String sql = "delete from user where uid=?";
		Object[] params = { id };
		jdbcTemplate.update(sql, params);
	}

	@Override
	public void update(User user) {
		String sql = "update user set uname=?,gender=?,age=? where uid=?";
		Object[] params = { user.getUname(), user.getGender(), user.getAge(), user.getUid() };
		jdbcTemplate.update(sql, params);
	}

	@Override
	public List<User> findAllUsers() {
		String sql = "select * from user";
		RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
		List<User> list = jdbcTemplate.query(sql, rowMapper);
		return list;
	}

	@Override
	public User findUserById(int id) {
		String sql = "select * from user where uid=?";
		Object[] params = { id };
		RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
		User user = jdbcTemplate.queryForObject(sql, params, rowMapper);
		return user;
	}

	@Override
	public int count() {
		String sql = "select count(*) from user";
		SqlRowSet rs = jdbcTemplate.queryForRowSet(sql);
		if (rs.next()) {
			return rs.getInt(1);
		}
		return 0;

	}
}

Test.java

package com.xiaochen.test;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.xiaochen.dao.UserDao;
import com.xiaochen.entity.User;

public class Test {

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = (UserDao) context.getBean("userDao");
		System.out.println("----------创建用户数据表---------");
		userDao.create();
		System.out.println("----------创建用户表user成功!---------");
		System.out.println("\n----------添加若干个用户---------");
		User user = new User("1", "刘备", "男", 27);
		userDao.add(user);
		user = new User("2", "关羽", "男", 25);
		userDao.add(user);
		user = new User("3", "张飞", "男", 23);
		userDao.add(user);
		user = new User("4", "赵云", "男", 21);
		userDao.add(user);
		System.out.println("\n----------查找所有用户---------");
		List<User> list = userDao.findAllUsers();
		for (User u : list) {
			u.show();
		}
		System.out.println("\n----------查找一个用户---------");
		user = userDao.findUserById(1);
		user.show();

		System.out.println("\n----------修改一个用户---------");
		user = userDao.findUserById(3);
		user.setUname("马超");
		userDao.update(user);
		list = userDao.findAllUsers();
		for (User u : list) {
			u.show();
		}
		System.out.println("\n----------统计用户人数---------");
		System.out.println("用户总人数是:"+userDao.count());
		System.out.println("\n----------删除一个用户---------");
		userDao.delete(3);
		list = userDao.findAllUsers();
		for (User u : list) {
			u.show();
		}
	}

}

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"
    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
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">	
	<!-- 配置数据源 -->
	<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/usersdb" />
		<property name="username" value="root" />
		<property name="password" value="123abc" />
	</bean>	
	
	<!-- 配置jdbcTemplate模板 注入dataSource -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource" />	
	</bean>	
	
	<!-- 配置DAO,注入jdbcTemplate属性值 -->
	<bean id="userDao" class="com.xiaochen.dao.UserDaoImpl">
		<property name="jdbcTemplate" ref="jdbcTemplate"/>
	</bean>	
</beans>

运行结果图
在这里插入图片描述
在这里插入图片描述


版权声明:本文为weixin_45873215原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。