spring jdbc

spring jdbc

Spring JDBC是Spring框架中用于处理关系型数据库的一个模块,它主要目的是降低JDBC API的使用难度,以一种更直接、更简洁的方式使用JDBC API。Spring JDBC对JDBC API进行了封装,提供了JdbcTemplate等核心类,极大地简化了数据库操作的开发工作量。

1. 环境搭建

spring-beans

spring-context

spring-core

spring-experssion

spring-jcl

druid

mysql-connector-java

spring-jdbc

spring-aop 间接依赖

spring-tx 事务管理

XXXXTemplate:其他架构模板—操作其他架构的模板

2. JdbcTemplate

用于操作jdbc的模板



import javax.sql.DataSource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.alibaba.druid.pool.DruidDataSource;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class Test01 {
	@Autowired
	JdbcTemplate jdbcTemplate;
	@Test
	public void test01() {
//		JdbcTemplate template =new JdbcTemplate();
		// 操作的数据库是什么??身份认证怎么做
		// 连接池--- 
		DruidDataSource ds=new DruidDataSource();
		// 设置驱动、url、用户名、密码、连接池的设置(初始化连接数、最大连接数、超时时间)
		ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
		ds.setUrl("jdbc:mysql:///java2201q");
		ds.setUsername("root");
		ds.setPassword("123456");
		// 详细的连接池设置
		ds.setInitialSize(2);
		JdbcTemplate template = new JdbcTemplate(ds);
		String sql="select count(*) from b_user";
		Integer num = template.queryForObject(sql, Integer.class);
		System.out.println(num);
	}
	@Test 
	public void test012() {
		String sql="select count(*) from b_user";
		Integer num = jdbcTemplate.queryForObject(sql, Integer.class);
		System.out.println(num);
	}
	@Test
	public void test02() {
		DruidDataSource ds=new DruidDataSource();
		// 设置驱动、url、用户名、密码、连接池的设置(初始化连接数、最大连接数、超时时间)
		ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
		ds.setUrl("jdbc:mysql:///java2201q");
		ds.setUsername("root");
		ds.setPassword("123456");
		// 详细的连接池设置
		ds.setInitialSize(2);
		JdbcTemplate template = new JdbcTemplate();
		template.setDataSource(ds);
		String sql="select count(*) from b_user";
		Integer num = template.queryForObject(sql, Integer.class);
		System.out.println(num);
		
	}

}
package com.sofwin.test;

import javax.sql.DataSource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.alibaba.druid.pool.DruidDataSource;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class Test01 {
	@Autowired
	JdbcTemplate jdbcTemplate;
	@Test
	public void test01() {
//		JdbcTemplate template =new JdbcTemplate();
		// 操作的数据库是什么??身份认证怎么做
		// 连接池--- 
		DruidDataSource ds=new DruidDataSource();
		// 设置驱动、url、用户名、密码、连接池的设置(初始化连接数、最大连接数、超时时间)
		ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
		ds.setUrl("jdbc:mysql:///db1");
		ds.setUsername("root");
		ds.setPassword("123456");
		// 详细的连接池设置
		ds.setInitialSize(2);
		JdbcTemplate template = new JdbcTemplate(ds);
		String sql="select count(*) from b_user";
		Integer num = template.queryForObject(sql, Integer.class);
		System.out.println(num);
	}
	@Test 
	public void test012() {
		String sql="select count(*) from b_user";
		Integer num = jdbcTemplate.queryForObject(sql, Integer.class);
		System.out.println(num);
	}
	@Test
	public void test02() {
		DruidDataSource ds=new DruidDataSource();
		// 设置驱动、url、用户名、密码、连接池的设置(初始化连接数、最大连接数、超时时间)
		ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
		ds.setUrl("jdbc:mysql:///java2201q");
		ds.setUsername("root");
		ds.setPassword("123456");
		// 详细的连接池设置
		ds.setInitialSize(2);
		JdbcTemplate template = new JdbcTemplate();
		template.setDataSource(ds);
		String sql="select count(*) from b_user";
		Integer num = template.queryForObject(sql, Integer.class);
		System.out.println(num);
		
	}

}

<?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:p="http://www.springframework.org/schema/p"
      xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd">

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
	<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
	<property name="url" value="jdbc:mysql:///java2201q"></property>
	<property name="username" value="root"></property>
	<property name="password" value="123456"></property>
	<property name="initialSize" value="2"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 	<constructor-arg index="0" ref="dataSource"></constructor-arg>
 -->
 	<property name="dataSource" ref="dataSource"></property>
 </bean>
</beans>
方法名返回结果描述
update(String sql)影响行数insert,delete,update,执行静态sql
update(String sql,Object…args)insert,delete,update动态sql,可变参数为动态sql赋值
batchUpdate(String…sql)数组执行批处理程序
queryForObject(String sql, Class requiredType)T查询结果的条数<=1,类对象(简单类型的类对象) 执行静态sql
queryForObject(String sql, Class requiredType, @Nullable Object… args)T查询结果的条数<=1,类对象(简单类型的类对象) 执行动态sql
queryForObject(String sql, RowMapper rowMapper)T查询结果的条数<=1,自定义类型的结果的映射 RowMapper定义映射规则==ResultMap 静态sql
queryForObject(String sql, RowMapper rowMapper, @Nullable Object… args)查询结果的条数<=1,自定义类型的结果的映射 RowMapper定义映射规则==ResultMap 动态SQL
queryForMap(String sql)Map<String[key],Object>将查询结果封装为map
queryForList(String sql)List<Map<String, Object>>集合中map的key列名,value为值
queryForList(String sql, Class elementType)List参数2为简单类型的类对象,查询结果的泛型也是简单类型,查询结果的列数只能是一条
query(String sql, RowMapper rowMapper)List泛型为自定义类型,参数2结果映射规则
execute(String sql)执行create

3. JdbcDaoSupport

所有的dao继承JdbDaoSupport,包含有jdbcTemplate ,setDataSource,在dao中注入dataSource,super.jdbcTemplate来获取JdbcTemplate



import static org.junit.Assert.assertEquals;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.alibaba.druid.pool.DruidDataSource;
import com.sofwin.dao.UserDao;
import com.sofwin.pojo.User;
import com.sofwin.pojo.UserMapper;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class Test01 {
//	@Autowired
	JdbcTemplate jdbcTemplate;
	@Autowired
	UserDao dao;
	@Test
	public void test01() {
//		JdbcTemplate template =new JdbcTemplate();
		// 操作的数据库是什么??身份认证怎么做
		// 连接池--- 
		DruidDataSource ds=new DruidDataSource();
		// 设置驱动、url、用户名、密码、连接池的设置(初始化连接数、最大连接数、超时时间)
		ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
		ds.setUrl("jdbc:mysql:///java2201q");
		ds.setUsername("root");
		ds.setPassword("123456");
		// 详细的连接池设置
		ds.setInitialSize(2);
		JdbcTemplate template = new JdbcTemplate(ds);
		String sql="select count(*) from b_user";
		Integer num = template.queryForObject(sql, Integer.class);
		System.out.println(num);
	}
	@Test 
	public void test012() {
		String sql="select count(*) from b_user";
		Integer num = jdbcTemplate.queryForObject(sql, Integer.class);
		System.out.println(num);
	}
	@Test
	public void test02() {
		DruidDataSource ds=new DruidDataSource();
		// 设置驱动、url、用户名、密码、连接池的设置(初始化连接数、最大连接数、超时时间)
		ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
		ds.setUrl("jdbc:mysql://db1");
		ds.setUsername("root");
		ds.setPassword("123456");
		// 详细的连接池设置
		ds.setInitialSize(2);
		JdbcTemplate template = new JdbcTemplate();
		template.setDataSource(ds);
		String sql="select count(*) from b_user";
		Integer num = template.queryForObject(sql, Integer.class);
		System.out.println(num);
		
	}
	@Test
	public void testInsert() {
		String sql="insert into b_user(login_name,pwd) values('sofwin11211','sofwin12121')";
		int flag = jdbcTemplate.update(sql);
		assertEquals(1, flag);
	}
	@Test
	public void testInsertBatch() {
		String sql="insert into b_user(login_name,pwd) values('sofwin11211','sofwin12121')";
		String sql2="insert into b_user(login_name,pwd) values('sofwin11211a','sofwin12121a')";
		int[] flag = jdbcTemplate.batchUpdate(sql,sql2);
		assertEquals(2, flag.length);
	}
	@Test
	public void testUpdate() {
		String sql="update b_user set login_name=? where id=?";
		int flag = jdbcTemplate.update(sql, "中国",17);
		assertEquals(1, flag);
	}
	@Test
	public void testDelete() {
		String sql ="delete from b_user where id=?";
		int flag = jdbcTemplate.update(sql, 17);
		assertEquals(1, flag);
	}
	@Test
	public void testQueryForObject01() {
		String sql ="select count(*) from b_user where id>?";
		Integer flag = jdbcTemplate.queryForObject(sql, Integer.class,10);
		System.out.println(flag);
				
	}
	@Test
	public void testQueryById() {
		String sql="select * from b_user where id=2";
		User user = jdbcTemplate.queryForObject(sql, new UserMapper());
		System.out.println(user);
	}
	@Test
	public void testQueryById2() {
		String sql="select * from b_user where id=?";
		User user = jdbcTemplate.queryForObject(sql, new UserMapper(), 2);
	}
	@Test
	public void testQueryForMap() {
		String sql ="select * from b_user where id=2";
		Map<String, Object> map = jdbcTemplate.queryForMap(sql);
		System.out.println(map);
	}
	
	@Test
	public void testQueryForList() {
		String sql ="select * from b_user where id>?";
		List<Map<String, Object>> users = jdbcTemplate.queryForList(sql,0);
		for (Map<String, Object> user : users) {
			System.out.println(user);
		}
	}
	@Test
	public void testQueryForList2() {
		String sql="select id from b_user where id>?";
		// 集合中泛型的类型   
		List<Integer> ids = jdbcTemplate.queryForList(sql, Integer.class,1);
		for (Integer id : ids) {
			System.out.println(id);
		}
	}
	@Test
	public void testQueryForList3() {
		String sql="select * from b_user";
		List<User> users = jdbcTemplate.query(sql,new UserMapper());
		for (User user : users) {
			System.out.println(user.getLastLoginDate());
		}
	}
	@Test
	public void testQueryForList4() {
		String sql = "select *  from b_user";
		List<User> users = new ArrayList();
		jdbcTemplate.query(sql, new RowCallbackHandler() {
			
			@Override
			public void processRow(ResultSet rs) throws SQLException {
				User user = new User();
				user.setId(rs.getInt("id"));
				users.add(user);
			}
		});
	}
	@Test
	public void testExecute() {
		JdbcDaoSupport a;
		String sql ="create table b_test(id int not null primary key,name varchar(20))";
		jdbcTemplate.execute(sql);
	}
	@Test
	public void testDao() {
		List<User> uses = dao.selectUsers();
	}

}

Spring JDBC的优势
简化开发:通过封装JDBC API,简化了数据库操作的开发工作量。
事务管理:在事务管理方面更占优势,能够方便地管理数据库事务。
性能:在某些情况下,处理速度比某些其他框架(如MyBatis)快一点。
Spring JDBC是Spring框架中用于处理关系型数据库的一个强大模块,它通过提供JdbcTemplate等核心类,极大地简化了数据库操作的开发工作量,并具备事务管理、性能优化等优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值