Spring框架-thiteen(Spring-JdbcTemplate)

13-【掌握】Spring-JdbcTemplate

1、Spring对不同的持久化支持

Spring为各种支持的持久化技术,都提供了简单操作的模板和回调
在这里插入图片描述

其实Spring的JDBCTemplate有点像DBUtils,但是有时候还没有DBUitls好用。这里来学习一下使用Spring的JDBCTemplate来玩一下CRUD。

2、使用JdbcTemplate需要的jar包

在这里使用Spring的JDBCTemplate的时候先要把轮子拿过来
在这里插入图片描述

除此之外,在Java中操作数据库怎么能不要对应的驱动包呢:
在这里插入图片描述

3、准备数据库

/*
Navicat MySQL Data Transfer

Source Server         : localhost
Source Server Version : 50528
Source Host           : localhost:3306
Source Database       : test

Target Server Type    : MYSQL
Target Server Version : 50528
File Encoding         : 65001

Date: 2019-03-08 17:44:00
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `user_name` varchar(255) DEFAULT NULL COMMENT '用户姓名',
  `user_address` varchar(255) DEFAULT NULL COMMENT '用户地址',
  `user_birthday` date DEFAULT NULL COMMENT '出生日期',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES ('1', '小明1', '武汉1', '2019-01-03');
INSERT INTO `sys_user` VALUES ('2', '小明2', '武汉2', '2019-01-03');
INSERT INTO `sys_user` VALUES ('3', '小明3', '武汉3', '2019-01-03');
INSERT INTO `sys_user` VALUES ('4', '小明4', '武汉4', '2019-01-03');
INSERT INTO `sys_user` VALUES ('5', '小明5', '武汉5', '2019-01-03');
INSERT INTO `sys_user` VALUES ('6', '小明6', '武汉6', '2019-01-03');
INSERT INTO `sys_user` VALUES ('7', '小明7', '武汉7', '2019-01-03');
INSERT INTO `sys_user` VALUES ('8', '小明8', '武汉8', '2019-01-03');
INSERT INTO `sys_user` VALUES ('9', '小明9', '武汉9', '2019-01-03');
INSERT INTO `sys_user` VALUES ('10', '小明10', '武汉10', '2019-01-03');

4、使用JdbcTemplate连接数据库

在这里插入图片描述

5、上面代码的说明

以上的代码所有的对象都是new 出来的

6、使用xml的方式去配置上面的的代码

创建User
在这里插入图片描述
创建UserDao
在这里插入图片描述
创建UserDaoImpl
在这里插入图片描述
创建UserService
在这里插入图片描述
创建UserServiceImpl
在这里插入图片描述
创建applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd
        ">
	<!-- 声明数据源 -->
	<bean id="dataSource" 
	class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<!-- 注入数据库的连接属性 -->
		<property name="driverClassName" value="com.mysql.jdbc.Driver">
		</property>
		<property name="url" value="jdbc:mysql://127.0.0.1:3306/test">
</property>
		<property name="username" value="root"></property>
		<property name="password" value="123456"></property>
	</bean>
	
	<!-- 声明jdbcTemplate -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<!-- 注入数据源 -->
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<!-- 声明dao -->
	<bean id="userDao"  class="com.sxt.dao.impl.UserDaoImpl">
		<!-- 注入jdbcTemplate -->
		<property name="jdbcTemplate" ref="jdbcTemplate"></property>
	</bean>
	
	<!-- 声明service -->
	<bean id="userService" class="com.sxt.service.impl.UserServiceImpl">
		<property name="userDao" ref="userDao"></property>
	</bean>
</beans>

测试

在这里插入图片描述

7、使用注解的方式去配置上面的的代码

修改UserDaoImpl
在这里插入图片描述

修改UserServiceImpl
在这里插入图片描述

修改applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd
        ">
     <!-- 扫描 -->
     <context:component-scan base-package="com.sxt.dao.impl">
     </context:component-scan>
     <context:component-scan base-package="com.sxt.service.impl">
     </context:component-scan>
	<!-- 声明数据源 -->
	<bean id="dataSource" 
	class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<!-- 注入数据库的连接属性 -->
		<property name="driverClassName" value="com.mysql.jdbc.Driver">
		</property>
		<property name="url" value="jdbc:mysql://127.0.0.1:3306/test">
		</property>
		<property name="username" value="root"></property>
		<property name="password" value="123456"></property>
	</bean>
	
	<!-- 声明jdbcTemplate -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<!-- 注入数据源 -->
		<property name="dataSource" ref="dataSource"></property>
	</bean>

</beans>

8、jdbcTemplate的API用法

@Repository
public class UserDaoImpl implements UserDao {
	
	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	@Override
	public Integer queryUserCount() {
		String sql="select count(1) from sys_user";
		return this.jdbcTemplate.queryForObject(sql, Integer.class);
	}

	@Override
	public void addUser(User user) {
		String sql="insert into sys_user(user_name,user_address,user_birthday) 
		values(?,?,?)";
		Object[] args=
		{user.getUserName(),user.getUserAddress(),user.getUserBirthday()};
		jdbcTemplate.update(sql, args);
				
	}

	@Override
	public void updateUser(User user) {
		String sql="update  sys_user set user_name=?,user_address=?,user_birthday=? 
		where user_id=?";
		Object[] args={user.getUserName(),user.getUserAddress(),
		user.getUserBirthday(),user.getUserId()};
		
		jdbcTemplate.update(sql, args);
	}

	@Override
	public void deleteUser(Integer userId) {
		String sql="delete from  sys_user  where user_id=?";
		Object[] args={userId};
		jdbcTemplate.update(sql, args);
	}

	@Override
	public User queryUserById(Integer userId) {
		String sql="select * from sys_user where user_id=?";
//		return jdbcTemplate.queryForObject(sql,new Object[]{userId}, User.class);  
这种写法只能支持基本数据类型包装类和String
		return jdbcTemplate.queryForObject(sql,new Object[]{userId},new 
		RowMapper<User>() {
			@Override
			public User mapRow(ResultSet rs, int rowNum) throws SQLException {
				Integer id=rs.getInt("user_id");
				String userName=rs.getString("user_name");
				String userAddress=rs.getString("user_address");
				Date userBirthday=rs.getDate("user_birthday");
				User user=new User(id, userName, userAddress, userBirthday);
				return user;
			}
		});
	}

	@Override
	public List<User> queryAllUser() {
		String sql="select * from sys_user";
		return jdbcTemplate.query(sql, new RowMapper<User>() {

			@Override
			public User mapRow(ResultSet rs, int rowNum) throws SQLException {
				Integer id=rs.getInt("user_id");
				String userName=rs.getString("user_name");
				String userAddress=rs.getString("user_address");
				Date userBirthday=rs.getDate("user_birthday");
				User user=new User(id, userName, userAddress, userBirthday);
				return user;
			}
		});
	}

	
	@Override
	public List<User> queryUserForPage(Integer currentPage, Integer pageSize) {
		String sql="select * from sys_user limit ?,?";
		Object [] args={(currentPage-1)*pageSize,pageSize};
		return jdbcTemplate.query(sql, args,new RowMapper<User>() {

			@Override
			public User mapRow(ResultSet rs, int rowNum) throws SQLException {
				Integer id=rs.getInt("user_id");
				String userName=rs.getString("user_name");
				String userAddress=rs.getString("user_address");
				Date userBirthday=rs.getDate("user_birthday");
				User user=new User(id, userName, userAddress, userBirthday);
				return user;
			}
		});
	}

}

猜你喜欢

转载自blog.csdn.net/qq_44013790/article/details/88359630