jdbcTemplate(五)

 spring jdbcTemplate 详解    

          jdbcTemplate类似于DBUtils,用于操作jdbc的工具类,它需要依赖于连接池DataSource(数据源)。它是spring框架提供的一个对象,是对原始jdbc api 对象的简单封装。JDBC(Java DataBase Connectivity,java 数据库连接)是一种用于执行SQL语句的java API。

JDBC模板的设计目的是为不同类型的JDBC操作提供模板方法。每个模板方法都能控制整个过程,并允许覆盖过程中的特定任务。通过这种方式,可以尽可能保留灵活性的情况下,将数据库存取的工作量降到最低。

JDBCTemplate常用的方法:

   update (更新数据)

   batchUpdate (批量更新数据库)

   queryForObject (查询单行)

   query (查询多行)

   queryForObject (单值查询)不同的

demo演示,可根据自己的情况进行选择连接池。

1. 导包

2. 创建javaBean ,数据模型。

package com.dsx.jdbcTemplate;

public class User {
	private Integer id;
	private String username;
	private String password;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
	}
	
}

 3. API使用【了解】

public void test1() {
	//创建数据库连接
	BasicDataSource dataSource = new BasicDataSource();
	dataSource.setDriverClassName("com.mysql.jdbc.Driver");
	dataSource.setUrl("jdbc:mysql://localhost:3306/hibernate_db");
	dataSource.setUsername("root");
	dataSource.setPassword("密码");
	//创建连接
	JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
	jdbcTemplate.update("update user set username=? where uid=?","齐天大圣",1);
}

4. 配置DBCP

​
<?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:p="http://www.springframework.org/schema/p" 
   xmlns:aop="http://www.springframework.org/schema/aop" 
   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/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">
  <!--配置数据源  dbcp-->
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
  	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  	<property name="url" value="jdbc:mysql://localhost:3306/hibernate_db"/>
  	<property name="username" value="root"/>
  	<property name="password" value="密码"/>
  </bean>
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  	<property name="dataSource" ref="dataSource"/>
  </bean>
  <bean id="userDao" class="com.dsx.jdbcTemplate.UserDao">
  	<property name="jdbcTemplate" ref="jdbcTemplate"/>
  </bean>
</beans>

​

4.1 UserDao

public class UserDao {
	private JdbcTemplate jdbcTemplate;
	
	public JdbcTemplate getJdbcTemplate() {
		return jdbcTemplate;
	}

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

	public void update(User user) {
		String sql="update user set username=? where uid=?";
		jdbcTemplate.update(sql, user.getUsername(),user.getId());
	}
}

4.2 测试

public void test2() {
	User user = new User();
	user.setId(1);
	user.setUsername("jack");
	ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/com/dsx/jdbcTemplate/bean.xml");
	UserDao bean = (UserDao) context.getBean("userDao");
	bean.update(user);
}

5. c3p0的 配置

<?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:p="http://www.springframework.org/schema/p" 
   xmlns:aop="http://www.springframework.org/schema/aop" 
   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/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">
  <!--配置数据源  dbcp-->
  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
  	<property name="driverClass" value="com.mysql.jdbc.Driver"/>
  	<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/hibernate_db"/>
  	<property name="user" value="root"/>
  	<property name="password" value="15538818257"/>
  </bean>
 <!--  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  	<property name="dataSource" ref="dataSource"/>
  </bean> -->
  <!-- jdbcDaoSupport内部需要设置DataSource,不再需要jdbcTemplate模板。 -->
  <bean id="userDao2" class="com.dsx.jdbcTemplate.UserDao2">
  	<property name="dataSource" ref="dataSource"/>
  </bean>
</beans>

5.1 使用jdbcDaoSupport

package com.dsx.jdbcTemplate;

import org.springframework.jdbc.core.support.JdbcDaoSupport;

public class UserDao2 extends JdbcDaoSupport{
	//JdbcDaoSupport内部有一个jdbc模板
	public void update(User user) {
		String sql="update user set username=? where uid=?";
		Object[] args=new Object[] {user.getUsername(),user.getId()};
		this.getJdbcTemplate().update(sql,args );
	}
}

5.2 源码分析

通过数据源创建模板

在项目中为了解决硬编码问题,可以把数据库连接信息配置到一个独立的文件中。

在src下创建db.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///hibernate_db?characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
jdbc.username=root
jdbc.password=密码

在xml中的应用

<!--配置连接池  -->
	<!--读取加载配置文件  -->
	<context:property-placeholder location="classpath:db.properties"/>
	<bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${jdbc.driver}"/>
		<property name="url" value="${jdbc.url}"/>
		<property name="username" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}"/>
	</bean>

同时在下面附上c3p0的应用,细心的小伙伴可能早已记住c3p0与dbcp配置和应用上的区别啦,既然是回顾,就把各项配置都记录详细点。。

    数据库连接池其实就是一个为数据库连接建立的一个“缓存池”,预先在数据库连接池中放入一定数量的连接。当需要数据库连接时,从连接池中拿就是了,用完再放回。数据库连接池负责分配、管理、释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立。

数据库连接池的优点:

  • 资源重用,避免频繁创建
  • 更快的系统反应速度
  • 实现某一应用最大可用数据库连接数的限制避免某一应用独占所有的数据库资源
  • 统一的连接管理,避免数据库连接泄露

表格展示 

                         dbcp                  c3p0
用户名 username user
密码 password password
URL url jdbcUrl
驱动类名 driverClassName driverClass
空闲连接 没有自动回收空闲连接的功能 有自动回收空闲连接的功能

JdbcTemplate是Spring框架自带的对JDBC操作的封装,目的是提供统一的模板方法使对数据库的操作更加方便、友好,效率也不错。但是功能还是不够强大(比如不支持级联属性),在实际应用中还需要和hibernate、mybaties等框架混合使用。

如有不足或意见,欢迎留言指正。望不吝赐教。。。

发布了160 篇原创文章 · 获赞 1 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览