使用原始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版权协议,转载请附上原文出处链接和本声明。