spring---整合JDBC

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ccnuacmhdu/article/details/85017134

spring提供了操作数据库的JDBCTemplate对象,与QueryRunner对象类似。

JDBCTemplate操作数据库演示

导包

spring核心包(4)
在这里插入图片描述
日志包(2)
在这里插入图片描述
c3p0连接池(1)
在这里插入图片描述
JDBC驱动(1)
在这里插入图片描述
spring-jdbc(1)
在这里插入图片描述
spring-tx(1)
在这里插入图片描述

所有包备齐如下:
在这里插入图片描述

准备数据库

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Demo

package cn.ccnuacmhdu.JDBCTemplate;

import java.beans.PropertyVetoException;

import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class Demo {

	@Test
	public void fun() throws PropertyVetoException {
		//1.准备连接池
		ComboPooledDataSource dataSource = new ComboPooledDataSource();
		dataSource.setDriverClass("com.mysql.jdbc.Driver");
		dataSource.setJdbcUrl("jdbc:mysql:///test");
		dataSource.setUser("root");
		dataSource.setPassword("123456");
		//2.创建JDBCTemplate对象
		JdbcTemplate jTemplate = new JdbcTemplate();
		jTemplate.setDataSource(dataSource);
		//3.书写sql语句
		String sql = "insert into user values(null,'Tom')";
		//4.执行
		jTemplate.update(sql);
	}
}

JDBCTemplate的API+注入spring进行增删改查

User.java

package cn.ccnuacmhdu.bean;

public class User {
	private Integer id;
	private String name;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + "]";
	}
	
}


UserDao.java

package cn.ccnuacmhdu.JDBCTemplate;

import java.util.List;

import cn.ccnuacmhdu.bean.User;

public interface UserDao {
	//增
	public abstract void add(User user);
	//删
	public abstract void delete(Integer id);
	//改
	public abstract void update(User user);
	//查
	public abstract User findById(Integer id);
	public abstract Integer findTotalNumber();
	public abstract List<User> findAll();
}

UserDaoImpl.java

package cn.ccnuacmhdu.JDBCTemplate;

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

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import cn.ccnuacmhdu.bean.User;

public class UserDaoImpl implements UserDao {

	private JdbcTemplate jTemplate;
	
	public void add(User user) {

		String sql = "insert into user values(null,?)";
		jTemplate.update(sql, user.getName());
	}

	public void delete(Integer id) {

		String sql = "delete from user where id = ?";
		jTemplate.update(sql, id);
	}

	public void update(User user) {

		String sql = "update user set name = ? where id = ?";
		jTemplate.update(sql, user.getName(), user.getId());
	}

	public User findById(Integer id) {
		
		String sql = "select * from user where id = ?";
		return jTemplate.queryForObject(sql, new RowMapper<User>() {
			//根据id调用mapRow遍历ResultSet,把遍历结果需要手动封装到User里面
			public User mapRow(ResultSet resultSet, int arg1) throws SQLException {
				User user = new User();
				user.setId(resultSet.getInt("id"));
				user.setName(resultSet.getString("name"));
				return user;
			}}, id);
	}

	public Integer findTotalNumber() {
		String sql = "select count(*) from user";
		Integer totalNumber = jTemplate.queryForObject(sql, Integer.class);
		return totalNumber;
	}

	public List<User> findAll() {
		String sql = "select * from user";
		List<User> list = jTemplate.query(sql, new RowMapper<User>() {
			//根据id调用mapRow遍历ResultSet,把遍历结果需要手动封装到User里面
			public User mapRow(ResultSet resultSet, int arg1) throws SQLException {
				User user = new User();
				user.setId(resultSet.getInt("id"));
				user.setName(resultSet.getString("name"));
				return user;
			}});
		return list;
	}

	public JdbcTemplate getjTemplate() {
		return jTemplate;
	}

	public void setjTemplate(JdbcTemplate jTemplate) {
		this.jTemplate = jTemplate;
	}
}


分析:需要c3p0连接池,然后才能用JDBCTemplate,然后才能用UserDaoImpl的增删改查方法,所以需要把这三个类交给spring管理。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd ">

	<!-- 1.把连接池注入到spring容器 -->
	<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql:///test"></property>
		<property name="user" value="root"></property>
		<property name="password" value="123456"></property>
	</bean>
	<!-- 2.把JDBCTemplate注入到spring容器 -->
	<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	<!-- 3.把UserDaoImpl注入到spring容器 -->
	<bean name="userDaoImpl" class="cn.ccnuacmhdu.JDBCTemplate.UserDaoImpl">
		<property name="jTemplate" ref="jdbcTemplate"></property>
	</bean>

</beans>
package cn.ccnuacmhdu.JDBCTemplate;

import java.beans.PropertyVetoException;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import cn.ccnuacmhdu.bean.User;

public class Demo {

	@Test
	public void fun() throws PropertyVetoException {
		//1.准备连接池
		ComboPooledDataSource dataSource = new ComboPooledDataSource();
		dataSource.setDriverClass("com.mysql.jdbc.Driver");
		dataSource.setJdbcUrl("jdbc:mysql:///test");
		dataSource.setUser("root");
		dataSource.setPassword("123456");
		//2.创建JDBCTemplate对象
		JdbcTemplate jTemplate = new JdbcTemplate();
		jTemplate.setDataSource(dataSource);
		//3.书写sql语句
		String sql = "insert into user values(null,'Tom')";
		//4.执行
		jTemplate.update(sql);
	}
	
	@Test
	public void fun2() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = (UserDao) ac.getBean("userDaoImpl");
		User user = new User();
		user.setName("aaaaaa");
		userDao.add(user);
	}
	@Test
	public void fun3() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = (UserDao) ac.getBean("userDaoImpl");
		User user = new User();
		user.setId(2);
		user.setName("bbbb");
		userDao.update(user);
	}
	@Test
	public void fun4() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = (UserDao) ac.getBean("userDaoImpl");
		userDao.delete(2);
	}
	@Test
	public void fun5() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = (UserDao) ac.getBean("userDaoImpl");
		User user = userDao.findById(1);
		System.out.println(user);
	}
	@Test
	public void fun6() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = (UserDao) ac.getBean("userDaoImpl");
		System.out.println(userDao.findTotalNumber());
	}
	@Test
	public void fun7() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = (UserDao) ac.getBean("userDaoImpl");
		System.out.println(userDao.findAll());
	}
}

在这里插入图片描述

读取properties

由于应用连接的数据库常常变化,所以单独把连接数据库的信息摘取出来,做成一个properties文件,方便修改信息。

db.properties

jdbc.driverClass:com.mysql.jdbc.Driver
jdbc.jdbcUrl:jdbc:mysql:///test
jdbc.user:root
jdbc.password:123456

加上jdbc前缀,防止键和工程中的其他对象重名。。。

需要先导入context约束及名字空间!!!然后如下修改配置文件:
在这里插入图片描述

点我源代码下载

猜你喜欢

转载自blog.csdn.net/ccnuacmhdu/article/details/85017134