首页 > 代码库 > Spring对 JDBC 的支持,JdbcTemplate类的使用
Spring对 JDBC 的支持,JdbcTemplate类的使用
导包:spring框架的包 和 连接数据库连接池的c3p0包 连接mysql数据库的包;
在src目录下建立jdbc.properties文件:存放连接数据库的属性值
jdbc.user=rootjdbc.password=lxn123jdbc.driverClass=com.mysql.jdbc.Driverjdbc.jdbcUrl=jdbc:mysql:///spring1jdbc.initPoolSize=5jdbc.maxPoolSize=10
在src目录下建立spring bean configuration file的xml文件:applicationContext.xml
<!-- 基于注解的,导入标识的包,可以识别本包,或其自包,其只对带有指定注解的类,方法有效,不是对这个包中的所有类和方法有效 --> <context:component-scan base-package="com.atguigu.spring.jdbc"></context:component-scan> <!-- 导入资源文件 ,classpath.jdbc.properties 为类路径下的文件名为 jdbc.properties--> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置c3p0数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="http://www.mamicode.com/${jdbc.user}"></property> <property name="password" value="http://www.mamicode.com/${jdbc.password}"></property> <property name="driverClass" value="http://www.mamicode.com/${jdbc.driverClass}"></property> <property name="jdbcUrl" value="http://www.mamicode.com/${jdbc.jdbcUrl}"></property> <property name="initialPoolSize" value="http://www.mamicode.com/${jdbc.initPoolSize}"></property> <property name="maxPoolSize" value="http://www.mamicode.com/${jdbc.maxPoolSize}"></property> </bean> <!-- 配置spring的JdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean>
建立test类中可能用到的Employee,Department类,这里,只有属性,set,get,tostring等方法就。。。
Employee类的属性:
private Integer id;private String lastName;private String email;private Department department;
Department类的属性:
private Integer id;private String name;
建立类:EmployeeDao,基于注解的查询方法
package com.atguigu.spring.jdbc;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import org.springframework.stereotype.Component;@Component//基本注解public class EmployeeDao { @Autowired public JdbcTemplate jdbcTemplate; public Employee get(Integer id){ String sql="select id,last_name,email from tables where id=?"; RowMapper<Employee> rowMapper=new BeanPropertyRowMapper<>(Employee.class); Employee employee=jdbcTemplate.queryForObject(sql, rowMapper, id); return employee; }}
建立一个JUtil Test测试类:JDBCTest
package com.atguigu.spring.jdbc;import static org.junit.Assert.*;import java.util.List;import java.sql.SQLException;import java.util.ArrayList;import javax.sql.DataSource;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.jdbc.core.BeanPropertyRowMapper;//测试类import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;public class JDBCTest { private ApplicationContext ctx=null; private JdbcTemplate jdbcTemplate; private EmployeeDao employeeDao; { ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate"); employeeDao=ctx.getBean(EmployeeDao.class); } @Test //对基于注解的方法测试 public void testEmployeeDao(){ System.out.println(employeeDao.get(1)); } //获取单个列的值, 或做统计查询 //使用 queryForObject(String sql, Class<Long> requiredType) public void testQueryForObject2(){ String sql="select count(id) from tables"; long count=jdbcTemplate.queryForObject(sql, Long.class); System.out.println(count); } //查到实体类的集合 //注意调用的不是 queryForList 方法 public void testQueryForList(){ String sql="select id,last_name,email from tables where id>?"; RowMapper<Employee> rowMapper=new BeanPropertyRowMapper<>(Employee.class); List<Employee> employees=jdbcTemplate.query(sql, rowMapper, 1); System.out.println(employees); } /** * 从数据库中获取一条记录, 实际得到对应的一个对象 * 注意不是调用 queryForObject(String sql, Class<Employee> requiredType, Object... args) 方法! * 而需要调用 queryForObject(String sql, RowMapper<Employee> rowMapper, Object... args) * 1. 其中的 RowMapper 指定如何去映射结果集的行, 常用的实现类为 BeanPropertyRowMapper * 2. 使用 SQL 中列的别名完成列名和类的属性名的映射. 例如 last_name lastName * 3. 不支持级联属性. JdbcTemplate 到底是一个 JDBC 的小工具, 而不是 ORM 框架 */ public void testQueryForObject(){ String sql="select id,last_name lastName,email,dept_id as \"department.id\" from tables where id=?"; RowMapper<Employee> rowMapper=new BeanPropertyRowMapper<>(Employee.class); Employee employee=jdbcTemplate.queryForObject(sql, rowMapper,1); System.out.println(employee); } //执行批量更新: 批量的 INSERT, UPDATE, DELETE //最后一个参数是 Object[] 的 List 类型: 因为修改一条记录需要一个 Object 的数组, //那么多条不就需要多个 Object 的数组 public void testBatchUpdate(){ String sql="insert into tables(last_name,email,dept_id) values(?,?,?)"; List<Object[]> batchArgs=new ArrayList<>(); batchArgs.add(new Object[]{"AAA","testa",5}); batchArgs.add(new Object[]{"BBB","JIJK",6}); batchArgs.add(new Object[]{"CCC","panpN",3}); batchArgs.add(new Object[]{"DDD","jfids",2}); batchArgs.add(new Object[]{"EEE","tfsd",4}); jdbcTemplate.batchUpdate(sql,batchArgs); } //执行 INSERT, UPDATE, DELETE,只修改sql语句,即可 public void testUpdate(){ String sql="update tables set last_name=? where id=?"; jdbcTemplate.update(sql, "权", "1"); } //测试数据库连接池是否连接成功 public void testDataSource() throws SQLException { DataSource dataSource=ctx.getBean(DataSource.class); System.out.println(dataSource.getConnection()); }}
Spring对 JDBC 的支持,JdbcTemplate类的使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。