JDBC之将Dao的实现通过配置文件切换成Spring的实现

1、使用的是前面的UserDao

package cn.itcast.jdbc.dao;

import cn.itcast.jdbc.domain.User;

/**
 * 针对用户的Dao
 */
public interface UserDao {
	
	/**
	 * 添加用户
	 */
	public void addUser(User user);
	
	/**
	 * 根据id查询用户
	 * @param userId
	 * @return
	 */
	public User getUser(int userId);
	
	/**
	 * 用户登录,根据用户名和用户登录密码去查询用户
	 * @param loginName
	 * @param password
	 * @return
	 */
	public User findUser(String loginName, String password);
	
	/**
	 * 更新用户
	 * @param user
	 */
	public void update(User user);
	
	/**
	 * 删除用户
	 * @param user
	 */
	public void delete(User user);
	
}
2、定义Dao的Spring的实现

package cn.itcast.jdbc.dao.impl;

import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;

import cn.itcast.jdbc.JdbcUtils;
import cn.itcast.jdbc.dao.UserDao;
import cn.itcast.jdbc.domain.User;

/**
 * 使用Spring中的SimpleJdbcTemplate实现Dao,
 * 注意每个方法中调用的不同的方法的参数的写法是不一样的
 */
public class UserDaoSpringImpl implements UserDao {
	private SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(
			JdbcUtils.getDataSource());

	public void addUser(User user) {
		String sql = "insert into user (name, money, birthday) "
			+ "values (:name, :money, :birthday)";
		SqlParameterSource param = new BeanPropertySqlParameterSource(user);
		KeyHolder keyHolder = new GeneratedKeyHolder();
		//为了获取主键,这里要先获取JdbcTemplate中的所有方法
		this.simpleJdbcTemplate.getNamedParameterJdbcOperations().update(sql,
			param, keyHolder);
		user.setId(keyHolder.getKey().intValue());
	}

	public void delete(User user) {
		String sql = "delete from user where id=?";
		this.simpleJdbcTemplate.update(sql, user.getId());
	}

	public User findUser(String loginName, String password) {
		String sql = "select id, name, money, birthday "
			+ "from user where name=?";
		return this.simpleJdbcTemplate.queryForObject(sql,
			ParameterizedBeanPropertyRowMapper.newInstance(User.class),
			loginName);
	}

	public User getUser(int userId) {
		String sql = "select id, name, money, birthday "
			+ "from user where id=?";
		return this.simpleJdbcTemplate.queryForObject(sql,
			ParameterizedBeanPropertyRowMapper.newInstance(User.class),
			userId);
	}

	public void update(User user) {
		String sql = "update user set name=?, birthday=?, money=? where id=?";
		//使用变长参数的方式
		this.simpleJdbcTemplate.update(sql, user.getName(), user.getBirthday(),
				user.getMoney(), user.getId());

		sql = "update user set name=:name, birthday=:birthday, money=:money where id=:id";
		//使用SqlParameterSource的方式
		this.simpleJdbcTemplate.update(sql, new BeanPropertySqlParameterSource(
				user));
	}

}
3、修改daoconfig.properties中的代码
userDaoClass=cn.itcast.jdbc.dao.impl.UserDaoSpringImpl
4、编写测试类进行测试

package cn.itcast.jdbc.dao.impl;

import java.util.Date;

import org.junit.Before;
import org.junit.Test;

import cn.itcast.jdbc.dao.UserDao;
import cn.itcast.jdbc.domain.User;

public class TestUserDaoSpringImpl {
	
	private UserDao dao;
	
	@Before
	public void init() {
		dao = new UserDaoSpringImpl();
	}
	
	@Test
	public void testAddUser() {
		User user = new User();
		user.setName("dema");
		user.setBirthday(new Date());
		user.setMoney(11f);
		dao.addUser(user);
	}
	
	@Test
	public void testDelete() {
		User user = new User();
		user.setId(200);
		dao.delete(user);
	}
	
	@Test
	public void testFindUser() {
		dao.findUser("kaka", null);
	}
	
	@Test
	public void testGetUser() {
		dao.getUser(190);
	}
	
	@Test
	public void testUpdate() {
		User user = new User();
		user.setId(2);
		user.setBirthday(new Date());
		user.setMoney(34f);
		user.setName("aaa");
		dao.update(user);
	}

}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值