一、 JDBCTemplate 分析
1.1 JDBCTemplate 是什么? spring中提供了一个可以操作数据库的对象JDBCTemplate,这个对象封装了jdbc技术。
1.2 JDBCTemplate连接数据库
1.2.1.导包:
4(spring-beans+spring-context+spring-core+spring-expression)+2(spring-logging+spring-log4j) + Junit整合(spring-test+spring-aop) + JDBC驱动+C3P0连接池 + spring-jdbc + spring-tx
1.2.2 准备数据库(建User表)
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;
}
}
1.2.3 C3P0的连接池测试
1.2.4 代码演示
- 写UserDao
public interface userDao {
public void save(User user);
public void update(User user);
public void delete(Integer id);
public int queryCount();
public User queryById(Integer id);
public List<User> queryAll();
}
2.写实现类UserDaoImpl
public class UserDaoImpl implements userDao{
private JdbcTemplate jT;
@Override
public void save(User user) {
String sql="insert into jt_user values(?,?)";
jT.update(sql,user.getId(),user.getName());
}
@Override
public void update(User user) {
String sql="update jt_user set name=? where id=?";
jT.update(sql, user.getName(),user.getId());
}
@Override
public void delete(Integer id) {
String sql="delete from jt_user where id=?";
jT.update(sql, id);
}
@Override
public int queryCount() {
String sql = "select count(1) from jt_user";
Integer count = jT.queryForObject(sql,Integer.class);
return count;
}
@Override
public User queryById(Integer id) {
String sql=" select * from jt_user where id =?";
User u = jT.queryForObject(sql, new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int index) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
return user;
}
}, id);
return u;
}
@Override
public List<User> queryAll() {
String sql=" select * from jt_user";
List<User> list = jT.query(sql, new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int index) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
return user;
}
});
return list;
}
public JdbcTemplate getjT() {
return jT;
}
public void setjT(JdbcTemplate jT) {
this.jT = jT;
}
}
3.配置文件 ApplicationContext.xml
<?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:context="http://www.springframework.org/schema/context" 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/context http://www.springframework.org/schema/context/spring-context-4.2.xsd ">
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/data"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean name="userDao" class="com.tz.JDBC.UserDaoImpl">
<property name="jT" ref="jdbcTemplate"></property>
</bean>
</beans>
4.编写测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:com/tz/JDBC/ApplicationContext.xml")
public class test {
@Resource(name="userDao")
private userDao ud;
@Test
public void saveTest(){
User user = new User();
user.setId(3);
user.setName("mm");
ud.save(user);
}
@Test
public void updateTest(){
User user = new User();
user.setId(1);
user.setName("xxs");
ud.update(user);
}
@Test
public void delTest(){
ud.delete(1);
}
@Test
public void findcount(){
int queryCount = ud.queryCount();
System.out.println(queryCount);
}
@Test
public void findById(){
User queryById = ud.queryById(1);
System.out.println(queryById);
}
@Test
public void findAll(){
List<User> queryAll = ud.queryAll();
System.out.println(queryAll);
}
}
改进:
1. 继承JdbcDaoSupport
public class UserDaoImpl extends JdbcDaoSupport implements userDao{
// private JdbcTemplate jT; //这时就不用注入这个变量了
@Override
public void save(User user) {
String sql="insert into jt_user values(?,?)";
// jT.update(sql,user.getId(),user.getName());
getJdbcTemplate().update(sql,user.getId(),user.getName());
}
}
2.在src下编写db.properties文件
jdbc.jdbcUrl= jdbc:mysql:///xxxxx
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=xxx
3.配置文件如下:
<?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:context="http://www.springframework.org/schema/context" 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/context http://www.springframework.org/schema/context/spring-context-4.2.xsd ">
<!--读取配置文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<bean name="userDao" class="com.tz.JDBC.UserDaoImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
总结:spring操作数据库的过程和以前我们学JDBC的时候差不多,只是spring帮我们封装并管理了一系列的对象,相比我们的hibernate和Mybatis ,是不是感觉有点复杂呢? 在后面的学习中我们再详细讨论。