文档章节

Spring JDBC使用方法

akane_oimo
 akane_oimo
发布于 06/18 18:15
字数 688
阅读 6
收藏 0

普通实现:

1、创建数据表customer。

可以使用任何数据库实现,在项目中要引入相应数据库驱动包并配置相应数据库连接。

2、创建Customer pojo。

Customer类的属性对应数据库的属性,除了为每个属性提供相应的get和set方法外不提供任何 其他业务逻辑实现。

public class Customer {
	int custId;
	String name;
	int age;
	//getter and setter method
}

3、创建数据访问接口。

该接口声明对对数据库的所有操作,如插入删除等。

public interface CustomerDAO {
	public void insert(Customer customer);
}

4、实现数据访问。

实现数据库访问接口,提供与数据库交互的具体业务逻辑实现。该类中会调用JDBC函数。

JDBC相关知识在这篇博客

public class JdbcCustomerDAO implements CustomerDAO{
    //DataSource在Bean中配置,用于获取mysql驱动
	private DataSource dataSource;

	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}

	public void insert(Customer customer){
        //定义预处理SQL语句
		String sql = "INSERT INTO CUSTOMER " + "(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
		Connection conn = null;
		try {
            //连接数据库
			conn = dataSource.getConnection();
            //预处理方式执行SQL语句
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setInt(1, customer.getCustId());
			ps.setString(2, customer.getName());
			ps.setInt(3, customer.getAge());
			ps.executeUpdate();
			ps.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		} finally {
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {}
			}
		}
	}
}

5、配置bean。

<bean id="customerDAO" class="com.yiibai.customer.dao.impl.JdbcCustomerDAO">
	<property name="dataSource" ref="dataSource" />
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="com.mysql.jdbc.Driver" />
	<property name="url" value="jdbc:mysql://localhost:3306/yiibaijava" />
	<property name="username" value="root" />
	<property name="password" value="password" />
</bean>

6、对数据库进行操作。

public static void main( String[] args ){
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 
    CustomerDAO customerDAO = (CustomerDAO) context.getBean("customerDAO");
    Customer customer = new Customer(1, "yiibai",29);
    customerDAO.insert(customer);    
}

使用JdbcTemplate实现:

上方代码是原始实现,可以看到很多代码被用于创建连接、关闭连接、处理异常等。这样有很明显的缺点:代码冗余和容易出错。

使用JdbcTemplate可节省大量的冗余代码,因为JdbcTemplate类会自动处理它。

public class JdbcCustomerDAO implements CustomerDAO{
    private DataSource dataSource;
    //使用JdbcTemplate 
	private JdbcTemplate jdbcTemplate;

	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}

	public void insert(Customer customer){
        //定义预处理sql语句
		String sql = "INSERT INTO CUSTOMER " + "(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";	 
        //使用dataSource初始化jdbcTemplate
		jdbcTemplate = new JdbcTemplate(dataSource);	
        //插入数据
		jdbcTemplate.update(sql, new Object[] { customer.getCustId(),
			customer.getName(),customer.getAge()  
		});		
	}
}

使用JdbcDaoSupport实现:

通过扩展 JdbcDaoSupport,类中就不需要DataSource和JdbcTemplate句柄了,因为JdbcDaoSupport有静态方法会自动注入dataSource。而且可以使用 getJdbcTemplate()方法得到 JdbcTemplate。

public class JdbcCustomerDAO extends JdbcDaoSupport implements CustomerDAO{
    //继承JdbcDaoSupport,因为JdbcDaoSupport中有:
    //public final void setDataSource(DataSource dataSource)方法,
    //所以此类不需要持有dataSource引用
    public void insert(Customer customer){
	//定义预处理sql
	String sql = "INSERT INTO CUSTOMER " + "(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
	//执行插入操作  使用getJdbcTemplate()方法可以获取JdbcTemplate对象
	getJdbcTemplate().update(sql, new Object[] { customer.getCustId(),
			customer.getName(),customer.getAge()  
	});		
}

其实最后学了MyBa'tis,可以直接用逆向工程生成DAO层代码,不需要自己实现。

© 著作权归作者所有

共有 人打赏支持
akane_oimo
粉丝 19
博文 129
码字总数 155529
作品 0
南京
其他
【小马哥】Spring Boot系列讲座

这里为大家推荐一个不错的Spring Boot系列讲座,讲师介绍如下: 小马哥,阿里巴巴技术专家,从事十余年Java EE 开发,国内微服务技术讲师。目前主要负责微服务技术推广、架构设计、基础设施、...

杜琪
03/02
0
0
【小马哥】Spring Cloud系列讲座

这里为大家推荐一个不错的Spring Cloud系列讲座,讲师介绍如下: 小马哥,阿里巴巴技术专家,从事十余年Java EE 开发,国内微服务技术讲师。目前主要负责微服务技术推广、架构设计、基础设施...

杜琪
03/02
0
0
对JDBC的支持 之 7.1 概述

概述 JDBC回顾 传统应用程序开发中,进行JDBC编程是相当痛苦的,如下所示: //cn.javass.spring.chapter7. TraditionalJdbcTest @Test public void test() throws Exception { Connection co...

heroShane
2014/02/27
0
0
Spring Boot实战之基础回顾

本文作者: 吴伟祥 本文链接: https://wuweixiang.cn/2018/08/21/Spring-Boot实战之基础回顾/ 版权声明: 本博客所有文章除特别声明外均为原创,采用CC BY-NC-SA 4.0 许可协议。转载请在文章开...

吴伟祥
08/21
0
0
Spring MVC 使用 JNDI 配置的DataSource

稍微看了下,Spring 中JNDI 的使用,弄了个小例子。有很多不完备的地方,以后慢慢看,再改吧。 <一> 技术使用 Spring MVC JDBC Template Maven JNDI <二> 一些配置 Maven POM 配置 spring-c...

平江夜弹
2015/06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
46分钟前
2
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
50分钟前
1
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
51分钟前
1
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
57分钟前
1
0
使用xtrabackup完成远程备份

转载收藏,以防丢失 需求 Can I backup remote databases from my local server02-27-2013, 06:17 AMHi, I am using mysqldump so far for taking daily backups of my Production datab......

阿dai
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部