Spring的jdbcTemplate操作

本文详细介绍使用JDBC进行数据库操作的代码实现,包括增删改查等基本操作,并介绍了如何利用Spring框架的XML配置方式简化JDBC操作,提高代码的可维护性和效率。

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

一.使用JDBC代码:

public class User {
	String username;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
}
	//JDBC底层实现代码
	public void testJDBC() {
		Connection conn = null;
		PreparedStatement psmt = null;
		ResultSet rs = null;
		//加载驱动
		try {
			Class.forName("com.mysql.jdbc.Driver");
			//创建连接
			conn = DriverManager.getConnection("jdbc:mysql:///mybatis","root","123456");
			//编写sql语句
			String sql = "select * from user where id>=?";
			//预编译sql
			psmt = conn.prepareStatement(sql);
			//设置参数值
			psmt.setString(1, "1");
			//执行sql
			rs = psmt.executeQuery();
			//遍历结果集
			while(rs.next()) {
				//得到返回结果值
				String username = rs.getString("username");
				User user = new User();
				user.setUsername(username);
				System.out.println(username);
				System.out.println(user);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				rs.close();
				psmt.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

二.使用JdbcTempleate

操作的基本步骤:

  • 导入jdbcTemplate使用的jar包
  • 创建对象,设置设计库信息
  • 创建jdbcTemplate对象,设置数据源
  • 调用jdbcTemplate对象里面的方法实现操作

1.添加操作

	//1.添加的操纵
	public void add() {
		//第一步 设置数据库的信息
		DriverManagerDataSource dataSource =
				new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///mybatis");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		//第二步 创建jdbcTemplate对象,设置数据源
		JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
		//第三步 调用jdbcTemplate对象里面的方法实现操作
		//创建sql语句
		String sql = "insert into user values(?,?,?,?,?)";
		int rows = jdbcTemplate.update(sql, "27","lucy",null,null,null);
		System.out.println(rows);
	}

2.修改操作

	//2.修改操作
	@Test
	public void update() {
		//第一步 设置数据库的信息
		DriverManagerDataSource dataSource =
				new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///mybatis");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		//第二步 创建jdbcTemplate
		JdbcTemplate jdbctemplate = new JdbcTemplate(dataSource);
		//第三步 调用jdbcTemplate里面的方法实现update方法
		String sql = "update user set username=? where id=?";
		int rows = jdbctemplate.update(sql, "tom","27");
		System.out.println(rows);
	}

3.删除操作

	//3.删除操作
	public void delete() {
		//第一步 设置数据库的信息
		DriverManagerDataSource dataSource =
				new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///mybatis");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		//第二步 创建jdbcTemplate
		JdbcTemplate jdbctemplate = new JdbcTemplate(dataSource);
		//第三步 调用jdbcTemplate里面的方法实现update方法
		String sql = "delete from user where id = ?";
		int rows = jdbctemplate.update(sql,"27");
		System.out.println(rows);
	}

4.查询操作

1)查询返回一个值

查询表中有多少条记录

queryForObject(String sql, Class<Integer> requiredType)

requireType:要返回的类型

	//查询第一个操作 查询返回一个值
	public void testCount() {
		//第一步 设置数据库的信息
		DriverManagerDataSource dataSource =
				new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///mybatis");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		//第二步 创建jdbcTemplate
		JdbcTemplate jdbctemplate = new JdbcTemplate(dataSource);
		//第三步 调用jdbcTemplate里面的方法实现update方法
		String sql = "select count(*) from user";
		//调用jdbcTemplate的方法
		int count = jdbctemplate.queryForObject(sql, Integer.class);
		System.out.println(count);
	}

2)查询返回一个对象

queryForObject(String sql, RowMapper<User> rowMapper, Object... args)

	public void testObject() {
		//第一步 设置数据库的信息
		DriverManagerDataSource dataSource =
				new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///mybatis");		//数据库路径
		dataSource.setUsername("root");					//设置用户名和密码
		dataSource.setPassword("123456");
		//第二步 创建jdbcTemplate
		JdbcTemplate jdbctemplate = new JdbcTemplate(dataSource);
		//第三步 调用jdbcTemplate里面的方法实现update方法
		String sql = "select * from user where id=?";
		//调用jdbcTemplate的方法
		//第二个参数是接口RowMapper,需要自己写一个类实现接口
		User user = jdbctemplate.queryForObject(sql, new MyRowMapper(),"1");
		System.out.println(user.getUsername());
		System.out.println(user);
	}
class MyRowMapper implements RowMapper<User>{

	@Override
	public User mapRow(ResultSet rs, int num) throws SQLException {
		// 1.从结果集中把数据得到
		String username = rs.getString("username");
		// 2.把得到数据封装到对象里面去
		User user = new User();
		user.setUsername(username);
		return user;
	}
}

3)查询返回一个列表

例如:select * form user;,此时返回的是一个列表,此时可以使用一个List集合来接收返回的对象。

List<User> list = jdbctemplate.query(sql,new MyRowMapper());

	@Test
	public void testList() {
		//第一步 设置数据库的信息
		DriverManagerDataSource dataSource =
				new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///mybatis");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		//第二步 创建jdbcTemplate
		JdbcTemplate jdbctemplate = new JdbcTemplate(dataSource);
		//第三步 调用jdbcTemplate里面的方法实现update方法
		String sql = "select * from user";
		//调用jdbcTemplate的方法实现我们的操作
		//第二个参数是接口RowMapper,需要自己写一个类实现接口
		//三个方法,第一个是sql语句,第二个是RowMapper接口,自己写类实现数据封装,第三个可变参数
		List<User> list = jdbctemplate.query(sql,new MyRowMapper());	//???????这里为什么进不去
		System.out.println(list);
	}

三.使用Spring的XML配置方式完成数据操作

1)配置c3p0连接池

  • 使用new创建的方式创建连接池
	public void testLianJieChi() {
		ComboPooledDataSource dataSource =
				new ComboPooledDataSource();
		try {
			//设置C3P0连接池信息代码中的实现
			//加载驱动
			dataSource.setDriverClass("com.mysql.jdbc.Driver");
			//数据库的路径
			dataSource.setJdbcUrl("jdbc:mysql:///books");
			//设置用户名
			dataSource.setUser("root");
			//设置密码
			dataSource.setPassword("123456");
		} catch (PropertyVetoException e) {
			e.printStackTrace();
		}
	}

根据命名规则,从setDriverClass方法可以看出,有一个属性名为driverClass(第一个字母小写)。

  • 使用xml配置方式:
	<!-- 配置c3p0的链接池 -->
		<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
			<!-- 注入属性值 -->
			<property name="driverClass"  value="com.mysql.jdbc.Driver"></property>
			<property name="jdbcUrl" value="jdbc:mysql:///mybatis"></property>
			<property name="user" value="root"></property>
			<property name="password" value="123456"></property>
	</bean>

2)定义和创建dao类

  • 定义UserDao类:
public class UserDao {
	//得到JdbcTemplate对象
	private JdbcTemplate jdbcTemplate;
	
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	public void add() {
		String sql = "insert into user values(?,?,?,?,?)";
		jdbcTemplate.update(sql,27,"tom",null,null,null);
	}
}
  • 使用xml配置方式创建UserDao类对象:
	<!-- 创建Dao对象 -->
	<bean id="userDao" class="jdbctemplatexml.UserDao">
		<property name="jdbcTemplate" ref="jdbcTempate"></property>
	</bean>
  • 使用配置方式创建jdbcTemple对象
        <!-- 创建jdbcTemplate模板对象 -->
	<bean id="jdbcTempate" class="org.springframework.jdbc.core.JdbcTemplate">
		<!-- 把dataSource传递到模板对象里面去 -->
		<property name="dataSource" ref="dataSource"></property>
	</bean>

其中c3p0连接池已经在上面创建了。

3)定义和创建Service类对象

  • 定义Service类
public class UserService {
	private UserDao userDao;
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	public void add() {
		userDao.add();
	}
}
  • 使用xml配置方式创建Service对象
  <bean id="userService" class="jdbctemplatexml.UserService">
	<!-- 注入Dao对象 -->
	<property name="userDao" ref="userDao"></property>
  </bean>

4)测试类

public class TestJdbcTemplate {
	
	@Test
	public void testDemo() {
		ApplicationContext context = 
				new ClassPathXmlApplicationContext("c3p0.xml");
		UserService service = (UserService) context.getBean("userService");
		service.add();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值