Spring JDBCTemplate的介绍及使用

Spring JDBCTemplate的介绍及使用

Spring JDBC

- 传统的JDBC即使执行一条简单的SQL语句,其过程也不简单,要先打开数据库连接执行SQL语句,然后组装结果,最后关闭数据库资源,但太多的try…catch…finally…语句,造成了代码泛滥。在Spring出现之后,为了解决这些问题,Spring提供了自己的方案,就是JDBCTemplate模板。

Spring JDBCTemplate

- Spring框架在数据库开发中的应用主要使用的是JDBCTemplate类,它是Spring针对JDBC代码失控提供的解决方案。JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和获取结果。

在JdbcTemplate中执行SQL语句的方法大致分为3类:

  • execute():可以执行所有SQL语句,一般用于执行DDL语句。
  • update():用于执行INSERT、UPDATE、DELETE等DML语句。
  • query():用于DQL数据查询语句。

JdbcTemplate配置连接池

org.springframework.jdbc.core.JdbcTemplate类方便执行SQL语句

    public JdbcTemplate(DataSource dataSource)
    创建JdbcTemplate对象,方便执行SQL语句
    public void execute(final String sql)
    execute可以执行所有SQL语句,因为没有返回值,一般用于执行DDL语句。

JdbcTemplate使用步骤

1.导入依赖jar包
在这里插入图片描述2.编写Spring配置文件applicationContext.xml,配置dataSource数据源,配置jdbc模板

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置数据源 -->        
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<!-- 数据库驱动名称,不同类型数据库的名称 -->
	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	<!-- 连接数据库的数据源所在的url地址 -->
	<property name="url" value="jdbc:mysql://localhost:3306/demo?serverTimezone=UTC"/>
	<!-- 连接数据库的用户名 -->
	<property name="username" value="root"/>
	<!-- 连接数据库的密码 -->
	<property name="password" value="root"/>
</bean>
<!-- 配置jdbc模板  -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
	<!-- 默认必须使用数据源 -->
	<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置一个id为userDao的bean -->
<bean id="userDao" class="com.ssm.dao.impl.UserDaoImpl">
	<!--将jdbcTemplate注入到UserDao实例中  -->
	<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
</beans>

3.创建JdbcTemplate对象
4.调用execute()、update()、query()等方法

代码示例:

public class TestJdbcTemplate {

	public static void main(String[] args) {
		//初始化spring容器,加载applicationContext.xml配置
	    ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
	    //通过容器获取JdbcTemplate的实例
	    JdbcTemplate jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate");
	    String sql="create table user(id int primary key auto_increment,
	    username varchar(20),password varchar(32))";
	    //使用execute方法创建用户表
	    jdbcTemplate.execute(sql);
	    System.out.println("用户表user创建成功!");
	}
	}

JdbcTemplate实现增删改

API介绍

org.springframework.jdbc.core.JdbcTemplate类方便执行SQL语句

  public int update(final String sql)
  用于执行`INSERT`、`UPDATE`、`DELETE`等DML语句。

使用步骤

  1. 创建JdbcTemplate对象
  2. 编写SQL语句
  3. 使用JdbcTemplate对象的update方法进行增删改

代码示例:

UserDaoImpl

public class UserDaoImpl implements UserDao{
	
	JdbcTemplate jdbcTemplate;

	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	@Override
	public int addUser(User u) {
		String sql="insert into user(username,password) values(?,?)";
		//使用数组来存储SQL语句中的参数
		Object[] params=new Object[] {u.getUserName(),u.getPassword()};
		//执行添加操作,返回的是受SQL影响的记录条数
		int count=jdbcTemplate.update(sql, params);
		return count;
	}

	@Override
	public int deleteUser(int id) {
		String sql="delete from user where id=?";
		//执行删除操作,返回的是受SQL影响的记录条数
		int count=jdbcTemplate.update(sql, id);
		return count;
	}
   
	@Override
	public int updateUser(User user) {
		String sql="update user set username=?,password=? where id=?";
		//使用数组来存储SQL语句中的参数
		Object[] params=new Object[]{user.getUserName(),user.getPassword(),user.getId()};
		//执行更新操作,返回的是受SQL影响的记录条数
		int count=jdbcTemplate.update(sql,params);
		return count;
	}
	}

测试类

/*
	 *添加用户
	 */
	@Test
	public void testAdd() {
		//初始化spring容器,加载applicationContext.xml配置
		ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
		//通过容器获取UserDao实例
		UserDao userdao=(UserDao) ctx.getBean("userDao");
		//创建User对象,并向User对象中添加数据
		User user=new User();
		user.setUserName("李白");
		user.setPassword("123456");
		//执行addUser方法,并获取返回结果
		int count=userdao.addUser(user);
		if(count>0) {
			System.out.println("成功插入"+count+"条数据");                     
		}else {
			System.out.println("插入失败");
		}
	}
	/*
	 删除用户
	 */
	@Test
	public void testDelete() {
		//初始化spring容器,加载applicationContext.xml配置
		ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
		//通过容器获取UserDao实例
		UserDao userdao=(UserDao) ctx.getBean("userDao");
		//执行deleteUser方法,并获取返回结果
		int count=userdao.deleteUser(2);
		if(count>0) {
			System.out.println("成功删除"+count+"条记录");
		}else {
			System.out.println("删除失败");
		}
	}
	/*
	 *更新用户
	 */
    @Test
    public void testUpdate() {
    	//初始化spring容器,加载applicationContext.xml配置
    	ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
    	//通过容器获取UserDao实例
    	UserDao userdao=(UserDao) ctx.getBean("userDao");
    	//创建User对象,并向User对象中添加数据
		User user=new User();
		user.setId(2);
		user.setUserName("杜甫");
		user.setPassword("123");
		//执行updateUser方法,并获取返回结果
		int count=userdao.updateUser(user);
		if(count>0) {
			System.out.println("成功更新"+count+"条记录");
		}else {
			System.out.println("更新失败");
		}
    }

JdbcTemplate查询 – queryForObject返回一个Object

org.springframework.jdbc.core.JdbcTemplate类方便执行SQL语句

API介绍

public <T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args)
//该方法将args参数绑定到SQL语句中,通过RowMapper返回单行记录,并转换为一个Object类型返回

使用步骤

  1. 创建JdbcTemplate对象
  2. 编写查询的SQL语句
  3. 使用JdbcTemplate对象的queryForObject方法,并传入需要返回的数据的类型
  4. 输出结果

UserDaoImpl

//通过id查询单个用户信息
	public User queryUserById(int id){
		//定义单个查询的SQL语句
		String sql="select *from user where id=?";
		/*
		 * 创建一个新的BeanPropertyRowMapper对象,
		  将结果集通过Java反射机制映射到Java对象中
		 */
		RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
		//将id绑定到SQL语句中,并通过RowMapper返回一个Object类型的对象
		return this.jdbcTemplate.queryForObject(sql, rowMapper,id);
		
	}

测试类

 /* 通过id查询单个用户信息*/
    @Test
    public void testQueryUserById() {
    	//初始化spring容器,加载applicationContext.xml配置
    	ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
    	//通过容器获取UserDao实例
    	UserDao userdao=(UserDao) ctx.getBean("userDao");
    	//执行queryUserById方法,获取User对象
    	User user=userdao.queryUserById(3);
		System.out.println(user);
    }

JdbcTemplate查询-RowMapper返回自定义对象

org.springframework.jdbc.core.JdbcTemplate类方便执行SQL语句

API介绍

public <T> List<T> query(String sql, RowMapper<T> rowMapper)
执行查询语句,返回一个List集合,List中存放的是RowMapper指定类型的数据。

使用步骤

  1. 创建JdbcTemplate对象
  2. 编写查询的SQL语句
  3. 使用JdbcTemplate对象的query方法,并传入RowMapper匿名内部类
  4. 在匿名内部类中将结果集中的一行记录转成一个User对象

UserDaoImpl

    //查询所有用户信息
	public List<User> queryAllUser(){
		//定义查询所有用户的SQL
		String sql="select *from user";
		/*创建一个新的BeanPropertyRowMapper对象,*/
		RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
		//执行静态的SQL语句,并通过RowMapper返回结果
		return this.jdbcTemplate.query(sql, rowMapper);
	}

测试类

 /*查找所有用户*/
    @Test
    public void testQueryAllUser() {
    	//初始化spring容器,加载applicationContext.xml配置
    	ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
    	//通过容器获取UserDao实例
    	UserDao userDao=(UserDao) ctx.getBean("userDao");
		//执行queryAllUser方法,获取User对象的集合
    	List<User> users=userDao.queryAllUser();
    	//循环输出集合中的对象
		for(User u:users) {
			System.out.println(u);
		}
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值