spring---整合JDBC
阿新 • • 發佈:2018-12-24
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約束及名字空間!!!然後如下修改配置檔案: