Spring JdbcTemplate 简化 JDBC
来源:互联网 发布:linux tgz 解压 编辑:程序博客网 时间:2024/06/07 04:02
spring的JdbcTemplate是对jdbc的简单封装,旨在简化jdbc的操作和避免一些jdbc易发的问题,典型使用方式:
因为 JdbcTemplate 类需要一个数据源 DataSource ,可以通过注入或构造方法的方式传入进去,下面是一个完整的spring注入方式实现的JdbcTemplate:
spring的配置文件 applicationContext.xml:
<?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 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@168.1.50.20:1522:orcl"/> <property name="username" value="scott"/> <property name="password" value="scott"/> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"> <ref bean="myDataSource"/> </property> </bean> <bean id="testDAO" class="com.test.spring.TestJdbcTemplate"> <property name="jdbcT"> <ref bean="jdbcTemplate"/> </property> </bean></beans>里面声明了一个DataSource,声明了一个JdbcTemplate并引用了数据源,testDAO是自己的业务bean,并且注入进去了一个JdbcTemplate到jdbcT属性上面,java代码:
package com.test.spring;import com.test.User;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.jdbc.core.JdbcTemplate;import java.util.Iterator;import java.util.List;import java.util.Map;public class TestJdbcTemplate { private JdbcTemplate jdbcT; public void setJdbcT(JdbcTemplate jdbcT) { this.jdbcT = jdbcT; } private static ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); public static Object getBean(String beanName) { return ctx.getBean(beanName); } public static void main(String[] args) { TestJdbcTemplate testDAO = (TestJdbcTemplate) getBean("testDAO"); testDAO.addUser(); testDAO.findALL(); } public void addUser() { String sql = "insert into student VALUES ('userid', 'username')"; jdbcT.update(sql); } public void findALL() { String sql = "select * from student"; List list = jdbcT.queryForList(sql); Iterator iterator = list.iterator(); while (iterator.hasNext()) { Map<String, String> dataMap = (Map) iterator.next(); User user = new User(); user.setId(dataMap.get("ID")); user.setName(dataMap.get("NAME")); System.out.println(user); } } public int delete(int bid) { String sql = "delete from DeptInfo where bid =?"; return jdbcT.update(sql, new Object[]{bid}); }}
package com.test;public class User { private String id; private String name; public String getName() { return name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User{" + "id='" + id + '\'' + ", name='" + name + '\'' + '}'; }}上面就完成了,当然我么也可以不需要配置注入的方式直接使用JdbcTemplate,它其实就是一个普通的类,构造方法可以传入一个数据源,如我们可以这么写
JdbcTemplate jt= new JdbcTemplate(new MyDataSource(xxx,xxx));然后就可以使用了,如果是spring配置文件了定义了一个的话,就可以直接使用 JdbcTemplate jt= (JdbcTemplate)ApplicationContext.getBean("jdbcTemplate")如果spring的配置文件中只有数据源定义的话,也可以先获取注入的数据源在构造JdbcTemplate,如JdbcTemplate jt= new JdbcTemplate((DataSource)ApplicationContext.getBean("myDataSource"));方式有很多,其目的就是要获取到一个JdbcTemplate的实例,JdbcTemplate提供了很多方便的操作jdbc的api:如execute、query、queryForObject、queryForXXX等,其中queryForObject可以自动将sql查询结果转换为对象,上面的java例子我们接收到的是一个Map,然后通过map.get("字段名")的方式手工地赋值到new 出来的User对象里,而queryForObject可以自动完成这个过程,他默认情况下根据数据库字段名和类的属性的对应关系赋值,如果数据库表的字段名和类的属性不对应,也可以通过 RowMapper 接口定制映射过程。此接口只有一个抽象方法:Object mapRow(ResultSet rs, int rowNum) throws SQLException;很好理解,实现过程就是new出来一个对象,然后从ResultSet中get出需要的字段赋值到对象里就好了好上面例子中的Map中获取数据赋值到对象是一样的,只不过spring做了一些抽象而已,我们只需要写一个这样的映射类,所有的映射操作就不用自己写了,查询的时候指定下这个映射类就ok。虽然JdbcTemplate简化了jdbc的操作,但不是一个orm工具,我们仍然需要自己写sql,当然这也许是他比hibernate更灵活的地方,另外JdbcTemplate只是spring自己搞出来的一套东西,不是jee的标准,它依赖spring的api,这样就不利于我们的程序移植,而hibernate实现了JPA规范,JPA规范可以让我们编写不依赖任何特定实现的程序,这样应用程序可以很容器切换到其他实现技术而不仅限与spring或hibernate,所以我们编程应该遵循规范,尽量避免使用私有的或不规范的API。
0 0
- Spring JdbcTemplate 简化 JDBC
- 使用 Spring jdbcTemplate 进一步简化 JDBC 操作
- 使用Spring的jdbcTemplate简化JDBC操作
- 使用Spring的JdbcTemplate简化jdbc操作
- 使用Spring JDBCTemplate简化JDBC操作
- 使用Spring JDBCTemplate简化JDBC的操作
- 使用Spring JDBCTemplate简化JDBC的操作
- 使用Spring JDBCTemplate简化JDBC的操作
- 使用Spring的jdbcTemplate进一步简化JDBC操作
- 使用Spring的jdbcTemplate进一步简化JDBC操作
- 使用Spring的jdbcTemplate进一步简化JDBC操作
- 使用Spring的jdbcTemplate进一步简化JDBC操作
- 使用Spring的jdbcTemplate进一步简化JDBC操作
- 使用Spring的jdbcTemplate进一步简化JDBC操作
- 使用Spring的jdbcTemplate进一步简化JDBC操作
- 使用Spring JDBCTemplate简化JDBC的操作(一)
- 使用Spring JDBCTemplate简化JDBC的操作(二)
- 使用Spring的jdbcTemplate进一步简化JDBC操作
- selenium ie 设置
- webdriver selenium org.openqa.selenium.remote.UnreachableBrowserException: Error
- 完美解决imageloader加载https图片
- 如何查看已安装的.NET Framwork版本
- error communicating with the remote browser. it may have died.
- Spring JdbcTemplate 简化 JDBC
- WebDriverUtil
- Linux下的网络编程API基础
- Qt5设置背景图片
- selenium 定位截图
- 算法学习之素数环问题
- unable to bind to locking port 7054 within 45000 ms
- selenium webdriver的各种driver
- Selenium WebDriver