6.Spring中使用JdbcTemplate操作数据库

目录


Spring专栏目录(点击进入…)



DataSource配置

1.database.properties属性文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/my?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

2.创建连接池对象(ComboPoolDataSource,dataSource数据源)

<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:database.properties" />
      
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="driverClass" value="${jdbc.driver}"></property>
	<property name="driverClass" value="com.mysql.jdbc.Driver" />
	<property name="jdbcUrl" value="${jdbc.url}"></property>
	<property name="user" value="${jdbc.username}"></property>
	<property name="password" value="${jdbc.password}"></property>
</bean>

3.创建JdbcTemplate对象,并注入连接池(数据源)

<bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate">
	<property name="dataSource" ref="dataSource"></property>
</bean>

4.创建UserDao对象,并注入JdbcTemplate对象

<bean id="userDao" class="cn.my.UserDao">
	<property name="jdbcTemplate" ref="jdbctemplate"></property>
</bean>

5.创建UserService对象,并注入UserDao对象

<bean id="userService" class="cn.my.UserService">
	<property name="userDao" ref="userDao"></property>
</bean>

XML配置

要使用Jdbctemplate对象来完成jdbc操作。通常有三种种方式得到JdbcTemplate对象。

DataSource --> JdbcTemplate --> DaoImpl

在自己定义的DAO实现类中注入一个DataSource引用来完成JdbcTemplate的实例化。也就是它是从外部“注入”DataSource到DAO中,然后自己实例化JdbcTemplate,然后将DataSource设置到JdbcTemplate对象中。

1.数据访问层实现类(UserDaoImpl.java)

public class UserDaoImpl implements UserDao {
	private JdbcTemplate jdbcTemplate;
	
	//set注入
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
	this.jdbcTemplate= jdbcTemplate;
	}
	
	//省略方法jdbcTemplate.?
}  

2.业务逻辑层实现类(UserServiceImpl.java)

public class UserServiceImpl implements UserService {
	private UserDao userDao;
	
	//set注入
	public void setUserDao(UserDao userDao) {
	this.userDao= userDao;
	}
	//其他方法省略...
}

3.XML配置IoC容器

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
	<property name="dataSource" ref="dataSource">  
</bean>

<bean id="userDaoImpl" class="com.my.dao.impl.UserDaoImpl">  
	<property name="jdbcTemplate" ref="jdbcTemplate"/>  
</bean>

<bean id="userServiceImpl" class="com.my.dao.impl.UserDaoImpl">
	<property name="userDao" ref="userDaoImpl"/>  
</bean>

DataSource --> new JdbcTemplate(dataSource)

在Spring的IoC容器中配置一个JdbcTemplate的Bean,将DataSource注入进来,然后再把JdbcTemplate注入到自定义DAO中

1.数据访问层实现类(UserDaoImpl.java)

public class UserDaoImpl implements UserDao {
	private JdbcTemplate jdbcTemplate;
	
	//set注入
	public void setDataSource(DataSource dataSource) {
	this.jdbcTemplate = new JdbcTemplate(dataSource);
	}
	//省略方法jdbcTemplate.?
}  

2.业务逻辑层实现类(UserServiceImpl.java)

public class UserServiceImpl implements UserService {
	private UserDao userDao;
	//set注入
	public void setUserDao(UserDao userDao) {
	this.userDao= userDao;
	}
	//其他方法省略...
}

3.XML配置IoC容器

<bean id="userDaoImpl" class="com.my.dao.impl.UserDaoImpl">
	<property name="dataSource" ref="dataSource"/>  
</bean>

<bean id="userServiceImpl" class="com.my.service.impl.UserServiceImpl">
	<property name="userDao" ref="userDaoImpl"/>  
</bean>

继承JdbcDaoSupport(推荐)

继承JdbcDaoSupport,其内部有个JdbcTemplate,需要注入DataSource属性来实例化

Spring提供了org.springframework.jdbc.core.support.JdbcDaoSupport类,这个类中定义了JdbcTemplate属性,也定义了DataSource属性,当设置DataSource属性的时候,会创建jdbcTemplate的实例,所以自己编写的DAO只需要继承JdbcDaoSupport类,然后注入DataSource即可。提倡采用第三种方法。虽然下面的用法中采用了前两种方法。

1.数据访问层实现类继承JdbcDaoSupport(UserDaoImpl.java)

public class UserDaoImpl extends JdbcDaoSupport implements UserDao {  
	@Override
	public void save(User user) {
		String sql = null;
		this.getJdbcTemplate().update(sql);
	}
	//其它方法省略……  
}

2.业务逻辑层实现类(UserServiceImpl.java)

public class UserServiceImpl implements UserService {
	private UserDao userDao;
	
	//set注入
	public void setUserDao(UserDao userDao) {
	this.userDao= userDao;
	}
	//其他方法省略...
}

XML配置IoC容器

<bean id="userDaoImpl" class="com.my.dao.impl.UserDaoImpl>  
	<property name="dataSource" ref="dataSource"/>  
</bean>

<bean id="userServiceImpl" class="com.my.service.impl.UserServiceImpl">  
	<property name="userDao" ref="userDaoImpl"/>  
</bean>

注解

1.数据访问层实现类(UserDaoImpl.java)

@Repository
public class UserDaoImpl implements UserDao {
	@AutoWired  //自动注入
	private JdbcTemplate jdbc;
	
	//省略jdbc.?()等方法
}

2.业务逻辑层实现类(UserServiceImpl.java)

public class UserServiceImpl implements UserService {
	@AutoWired
	private UserDao userDao;
	
	//其他方法省略...
}

3.XML配置

<!-- 1.配置包扫描 -->
<context:component-scan base-package="cn.my"></context:component-scan>

<!-- 2.创建连接池对象,dataSource的名字不能改变 -->
<context:property-placeholder location="classpath:db.properties" />

<bean id="dataSource"
		class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="driverClass" value="${jdbc.driver}"></property>
	<property name="jdbcUrl" value="${jdbc.url}"></property>
	<property name="user" value="${jdbc.username}"></property>
	<property name="password" value="${jdbc.password}"></property>
</bean>

<!-- 3.创建jdbcTemplate对象,并注入连接池对象 -->
<bean id="jdbctemplate" 
		class="org.springframework.jdbc.core.JdbcTemplate">
	<property name="dataSource" ref="dataSource"></property>
</bean>

JdbcTemplate

jdbcTemplate对于查询来说,如果对sql比较精通,使用起来非常方便,灵活。

Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。

JdbcTemplate位于spring-jdbc-4.3.0.RELEASE.jar中。其全限定命名为org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate还需一个spring-tx-4.3.0.RELEASE.jar,这个包包含了一下事务和异常控制。

JdbcTemplate主要提供以下五类方法

private JdbcTemplate jdbcTemplate;

@Before  // 此方法会在所有@Test方法之前运行
public void isBefore() {
	ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
	// 获得数据源
	DataSource dataSource = (DataSource) app.getBean("dataSource");
	// 操纵数据库对象
	jdbcTemplate = (JdbcTemplate) app.getBean("jdbcTemplate");
}

(1)执行任何SQL语句(execute())

一般用于执行DDL语句

(2)执行新增、修改、删除等语句(update())

String sql = "insert into user values(default,'49846','吕奉先','abc123','男')";
jdbcTemplate.update(sql);
String sql = "update user set password=? where id=?";
jdbcTemplate.update(sql, "打哈党", 1);

String sql = "delete from user where id=?";
jdbcTemplate.update(sql,1);

(3)执行批处理相关语句(batchUpdate())

String sql = "insert into user(uusername,u_name,upassword,usex) values(?,?,?,?)";
List<Object[]> list = new ArrayList<Object[]>();
list.add(new Object[] { "ada465", "貂蝉", "123466", "女" });
list.add(new Object[] { "afe498", "刘玄德", "789456", "男" });
jdbcTemplate.batchUpdate(sql, list);

(4)执行查询相关语句(query()、queryForXXX())


String sql = "select * from user where id=?";
User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class),1);

String sql = "select * from user where id>?";
List<User> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class),1);

String sql = "select count(1) from user";
Integer num = jdbcTemplate.queryForObject(sql, int.class);
第一个参数:SQL语句。第二个参数:查询的结果的返回值类型。第三个参数是:传入的参数

String sql = "select * from user where id=?";
Map<String, Object> map = jdbcTemplate.queryForMap(sql,1);

(5)执行存储过程、函数相关语句(call())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring JdbcTemplateSpring框架提供的一个对JDBC进行封装的工具类,它可以简化JDBC编程的复杂性,提供了一种更简便的方式来访问数据库JdbcTemplate的原理是将JDBC的访问进行封装,提供了一些常用的操作方法,例如查询、更新、批量操作等。它通过DataSource来获取JDBC的连接,并通过Connection对象进行JDBC的操作,最后释放连接资源。 使用JdbcTemplate进行数据库操作的步骤如下: 1. 配置数据源,配置JdbcTemplate。 2. 在代码通过JdbcTemplate对象进行数据库操作。 下面是一个简单的例子: 配置数据源和JdbcTemplate: ```xml <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/test"/> <property name="username" value="root"/> <property name="password" value="root"/> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> ``` 在代码通过JdbcTemplate对象进行数据库操作: ```java @Autowired private JdbcTemplate jdbcTemplate; public void insertUser(User user) { String sql = "INSERT INTO user(name, age) VALUES(?, ?)"; jdbcTemplate.update(sql, user.getName(), user.getAge()); } public List<User> getUsers() { String sql = "SELECT * FROM user"; List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class)); return users; } ``` 在上面的代码,我们通过@Autowired注解注入了JdbcTemplate对象,并使用它来执行插入和查询操作。 通过JdbcTemplate,我们可以使用占位符来传递参数,也可以使用BeanPropertyRowMapper将查询结果映射为Java对象。 总的来说,Spring JdbcTemplate的原理是封装了JDBC的访问,提供了一种更便捷的方式来操作数据库

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未禾

您的支持是我最宝贵的财富!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值