JDBC Template

本文介绍了如何使用Spring的JdbcTemplate简化JDBC操作,包括下载spring-jdbc库,创建JDBCTemplate对象,利用其update()、query()等方法进行CRUD操作。详细展示了DML和DQL操作示例,如update()用于修改数据,queryForMap()和queryForList()用于查询数据,并通过RowMapper或BeanPropertyRowMapper进行结果映射。同时,文章还提供了使用德鲁伊数据源的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring框架提供了对JDBC操作的简单封装,使用JDBCTemplate对象来简化JDBC开发流程
步骤

  • 从官网下载对应的spring-jdbc相关的jar包,导入工程类路径下,放到lib文件夹下面即可
  • 创建JDBCTemplate对象。依赖于DataSource连接池(数据源)
  • 使用JDBCTemplate对象中的api方法实现crud操作
    1、DML操作:update()
    2、DQL操作:查询 不用select,使用query
  • query():将查询的结果集封装成javaBean对象
    query()方法的参数:RowMapper
    ① 手动装配:使用匿名内部类,自定义装配查询的每条记录值
    ②自动装配:使用Spring提供的BeanPropertyRowMapper实现类,完成对数据的自动装配
    具体操作–>new BeanPropertyRowMapper<类型>(类型.class)
  • queryForMap():将查询的结果集封装成map集合 ,只能封装一条记录:键key是字段名,值value是字段值,结果集记录数只能是1
  • queryForList():将结果集封装成List集合,在List集合中有多条记录,每一条记录都是一个map集合List<Map<Object,Object>> list
  • queryForObject:将结果集封装成一个对象,一般用于聚合函数 查询总记录数int count()
    具体操作:
    数据库字段映射实体类
/**
 * 按照javaBean标准类
 */
public class Account implements Serializable{
	private static final long serialVersionUID = 1L;
	private int id;
	private String username;
	private double balance;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public double getBalance() {
		return balance;
	}

	public void setBalance(double balance) {
		this.balance = balance;
	}

	public Account() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Account(int id, String username, double balance) {
		super();
		this.id = id;
		this.username = username;
		this.balance = balance;
	}

	@Override
	public String toString() {
		return "Account [id=" + id + ", username=" + username + ", balance=" + balance + "]";
	}

JDBCTmeplateUtil工具类 使用的是德鲁伊的数据库连接池

/**
 * 使用德鲁伊连接池配置工具类
 *
 */
public class DruidUtil {
	private static DataSource pool;
	// 把加载德鲁伊的一套放进静态代码块中
	static {
		// 手动加载配置文件信息 使用Properties集合
		Properties properties = new Properties();
		// 使用当前类的字节码对象获取该字节码对象的类加载器读取配置文件信息 classpath 类路径下+
		InputStream is = DruidDemo02.class.getClassLoader().getResourceAsStream("druid.properties");
		// 把输入流中的信息读取properties集合当中
		try {
			properties.load(is);
			// 获取DataSource对象,通过工厂方式来实现的 DruidDataSourceFactory
			pool = DruidDataSourceFactory.createDataSource(properties);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	// 对外提供获取连接的对象
	public static Connection getConnection() throws SQLException {
		return pool.getConnection();
	}

	// 提供获取连接池的方法
	public static DataSource getDataSource() {
		return pool;
	}

	// 释放资源的方法
	public static void closeAll(ResultSet set, PreparedStatement ps, Connection con) {
		if (set != null) {
			try {
				set.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (ps != null) {
			try {
				ps.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (con != null) {
			try {
				con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

测试类

	// 创建JDBCTmeplate对象 依赖于DataSource数据源
	static JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource());
   // 增删改动作
   // 修改数据
	public static void modifyData() {
		int count = jdbcTemplate.update("update account set username = ? where username = ?", "小五","王五");
		System.out.println(count);
	}
	// 删除数据
	public static void deleteData() {
		int count = jdbcTemplate.update("delete from account where username = ?", "小五");
		System.out.println(count);
	}
	// 插入一条数据
	public static void insertDate() {
		int count = jdbcTemplate.update("insert into account values(null,?,?)", "王五",5000);
		System.out.println(count);
	}
	public static void test() {
		// 查询张三的这条信息 封装到账户对象中
		String username = "张三";
		String sql = "select * from account where username = ?";	
		Map<String, Object> map = jdbcTemplate.queryForMap(sql,username);
		System.out.println(map);
	}
	// 查询总记录   查询account表中的所有记录数
	public static void queryTotalNum() {
		// queryFoObject()
		Integer count = jdbcTemplate.queryForObject("select count(*) from account", Integer.class);
		System.out.println(count);
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值