Spring笔记整理4(jdbc模板的增删改查)

使用jdbc模板实现增删改查

UserDao类:

public interface UserDao {
    
    
	//
	void save(User u);
	//
	void delete(Integer id);
	//
	void update(User u);
	//
	User getById(Integer id);
	//
	int getTotalCount();
	//
	List<User> getAll();
	//
	
}

UserDaoImpl类:

package cn.itheima.a_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 org.springframework.jdbc.core.support.JdbcDaoSupport;

import cn.itheima.bean.User;

public class UserDaoImpl extends JdbcDaoSupport implements UserDao {
    
    
//使用jdbc模板实现增删改查
	
	
	//private JdbcTemplate jt;
	
	public void save(User u) {
    
    
		String sql="insert into t_user  values(null,?)";
		super.getJdbcTemplate().update(sql, u.getName());

	}

	
	public void delete(Integer id) {
    
    
		String sql="delete from t_user where id=?";
		super.getJdbcTemplate().update(sql, id);

	}

	
	public void update(User u) {
    
    
		String sql="update t_user  set name=? where id=?";
		super.getJdbcTemplate().update(sql, u.getName(),u.getId());

	}

	
	public User getById(Integer id) {
    
    
		String sql="select * from t_user where id=?";
		return super.getJdbcTemplate().queryForObject(sql, new RowMapper<User>(){
    
    

			@Override
			public User mapRow(ResultSet rs, int arg1) throws SQLException {
    
    
				User u=new User();
				u.setId(rs.getInt("id"));
				u.setName(rs.getString("name"));
				return u;
			}}, id);
	
	}

	
	public int getTotalCount() {
    
    
		String sql="select count(*) from t_user";
		Integer count = super.getJdbcTemplate().queryForObject(sql, Integer.class);
		return count;
	}


	public List<User> getAll() {
    
    
		String sql="select * from t_user";
		List<User> list = super.getJdbcTemplate().query(sql, new RowMapper<User>(){
    
    

			@Override
			public User mapRow(ResultSet rs, int arg1) throws SQLException {
    
    
				User u=new User();
				u.setId(rs.getInt("id"));
				u.setName(rs.getString("name"));
				return u;
			}
			
		});
		return list;
	}
}

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" 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 ">

<!-- 指定spring读取db.properties -->
<context:property-placeholder location="classpath:db.properties"/>

<!-- 1、将连接池放入spring容器 -->
<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>
<!-- 1、将JDBCTemplate放入spring容器 -->
<!-- <bean  name="jdbcTemplate"  class="org.springframework.jdbc.core.JdbcTemplate">
	<property name="dataSource"  ref="dataSource"></property>
</bean> -->
<!-- 1、将UserDao放入spring容器 -->
<bean name="userDao" class="cn.itheima.a_jdbctemplate.UserDaoImpl">
	<!-- <property name="jt" ref="jdbcTemplate"></property> -->
	<property name="dataSource"  ref="dataSource"></property>
</bean>
	
</beans>

spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和依赖查找,依赖什么?为什么需要依赖?注入什么?控制什么?依赖注入和控制反转是一样的概念吗?

依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性。我们可以从以下几个方面理解:

a、参与者都有谁?

b、依赖:谁依赖谁?为什么需要依赖?

c、注入:谁注入谁?又注入了什么呢?

d、控制反转:谁控制谁?控制什么?为什么叫反转呢?存在正转吗?

e、控制反转和依赖注入是同一个概念吗?

首先:第一个问题,参与者都有谁?
1)对象
2)IOC/DI容器
3)某个对象的外部资源

第二问题:依赖,谁依赖谁?为什么需要依赖? 依赖嘛,很好理解的,对象依赖于IOC/DI容器,至于为什么要依赖呢?对象需要IOC/DI容器来提供对象需要的外部资源。

第三个问题:注入,谁注入谁?又注入了什么呢? 显而易见是IOC/DI容器注入对象,注入了what呢?肯定注入的是某个需要的东西那就是注入对象所需要的资源,肯定不会注入无关紧要的内容,你说呢?

第四个问题:控制反转,谁控制谁?控制什么?为什么叫反转呢?存在正转吗? 控制反转,控制什么?肯定是IOC/DI容器控制对象,主要是控制对象实例的创建,反转是相对于正向而言的,那么什么算是正向的呢?考虑一下常规情况下的应用程序,如果要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是说,是在A类中主动去获取所需要的外部资源C,这种情况被称为正向的。那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中。

第五个问题:控制反转和依赖注入式同一个概念吗? 依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。

猜你喜欢

转载自blog.csdn.net/weixin_42260782/article/details/108589001