版权声明:本文为博主原创文章,未经博主允许不得转载。 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约束及名字空间!!!然后如下修改配置文件: