Spring JDBC 数据访问
Posted Sue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring JDBC 数据访问相关的知识,希望对你有一定的参考价值。
Spring JDBC是Spring所提供的持久层技术,它的主要目标是降低使用JDBC API的门槛,以一种更直接,更简介,更
简单的方式使用JDBC API, 在Spring JDBC里,仅需做那些与业务相关的DML操作,而将资源获取,Statment创建,
资源释放以及异常处理等繁杂而乏味的工作交给Spring JDBC.
虽然ORM的框架已经成熟丰富,但是JDBC的灵活,直接的特性,依然让他拥有自己的用武之地,如在完全依赖查询
模型动态产生查询语句的综合查询系统中,Hibernaye,MyBatis,JPA等框架都无法使用,这里JDBC是唯一的选择.
1. JdbcTemplate入门
1.1 创建项目-引入jar包-导入日志:log4j.properties
1.2 创建数据库
数据库名: springjdbc
创建角色表:
1 CREATE TABLE `role` ( 2 `rid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ‘角色id‘, 3 `rname` VARCHAR(20) NOT NULL COMMENT ‘角色名‘, 4 `alias` VARCHAR(20) NOT NULL COMMENT ‘角色别名‘, 5 PRIMARY KEY (`rid`) 6 ) 7 INSERT INTO role (rid,rname,alias) 8 VALUES(1,‘admin‘,‘系统管理员‘),(2,‘dispatcher‘,‘调度员‘);
1.3 测试代码
1 @Test 2 public void test1() throws Exception { 3 //TODO 测试jdbcTemplate简单使用 4 //1.创建c3p0链接池 5 ComboPooledDataSource dataSource = new ComboPooledDataSource(); 6 dataSource.setDriverClass("com.mysql.jdbc.Driver"); 7 dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/springjdbc"); 8 dataSource.setUser("root"); 9 dataSource.setPassword("111"); 10 //创建jdbcTemplate对象 11 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); 12 //创建sql语句 13 String sql = "insert into role (rid , rname ,alias) value (? , ?,?);"; 14 jdbcTemplate.update(sql,"3","visitor","游客"); 15 }
2. Spring管理JdbcTemplate
1. 创建Role.java
1 public class Role { 2 private Integer cid; 3 private String rname; 4 private String alias; 5 //setter getter 6 }
2. RoleDao.java
1 public interface RoleDao { 2 //增 3 void save(Role role); 4 //删除 5 void delete(Integer id); 6 //改 7 void update(Role role); 8 //查 9 Role getById(Integer id); 10 //查 11 int getTotalCount(); 12 //查 13 List<Role> getAll(); 14 }
3. 创建RoleDaoImpl.java
创建数据源(连接池),JdbcTemplate,RoleDao交给Spring容器管理(IOC)
注意: 可以自己在RoleDaoImpl中添加 JdbcTemplate变量,如果不自动装载记得添加变量的set方法,
标准的操作,我们可以让RoleDaoImpl 继承 JdbcDaoSupport, 因为
(org.springframework.jdbc.core.support.JdbcDaoSupport)类提供了JdbcTemplate对象以及对应的获取和设置方
法.不用自己在实现类中添加JdbcTemplate变量!!
JdbcTemplate // Spring操作数据模板类(工具类) JdbcTemplate.update(sql,ArgsObj....); //DML JdbcTemplate.execute(sql) //DDL DCL //DQL 查询单个 jdbcTemplate.queryForObject(String var1, RowMapper<T> var2, Object... var3); RowWapper<T> 将结果封装的处理器; 得到Result解析成实体类对象即可! //查询所有 jdbcTemplate.query(String var1, RowMapper<T> var2, Object... var3);
RoleDaoImple代码:
1 public class RoleDaoImpl extends JdbcDaoSupport implements RoleDao { 2 public void save(Role role) { 3 //TODO 插入数据 4 String sql = "INSERT INTO role (rname,alias) value (?,?) ;"; 5 getJdbcTemplate().update(sql,role.getRname(),role.getAlias()); 6 } 7 public void delete(Integer id) { 8 //TODO 根据id删除 9 String sql = "delete from role where rid = ? ;"; 10 getJdbcTemplate().update(sql,id); 11 } 12 public void update(Role role) { 13 //TODO 修改role信息 14 String sql="update role set rname = ? , alias = ? where rid = ? ;" ; 15 getJdbcTemplate().update(sql,role.getRname(),role.getAlias(),role.getRid()); 16 } 17 public Role getById(Integer id) { 18 String sql = "select * from role where rid = ? ;"; 19 //直接查询 20 // Role role = getJdbcTemplate().queryForObject(sql, new Object[]{id}, Role.class); 21 Role role = (Role) getJdbcTemplate().queryForObject(sql, new Object[]{id}, new 22 RowMapper<Object>() { 23 public Object mapRow(ResultSet resultSet, int index) throws SQLException { 24 //将一行数据解析成一个java对象 25 return mapRowHandler(resultSet); 26 } 27 }); 28 return role; 29 } 30 public int getTotalCount() { 31 String sql = "select count(*) from role ;"; 32 Integer count = getJdbcTemplate().queryForObject(sql,Integer.class); 33 return count; 34 } 35 //查询所有 36 public List<Role> getAll() { 37 String sql = "select * from role"; 38 List<Role> list = getJdbcTemplate().query(sql, new RowMapper<Role>() { 39 public Role mapRow(ResultSet resultSet, int i) throws SQLException { 40 return mapRowHandler(resultSet); 41 } 42 }); 43 return list; 44 } 45 private Role mapRowHandler(ResultSet resultSet) throws SQLException{ 46 Role role = new Role(); 47 role.setRid(resultSet.getInt("rid")); 48 role.setRname(resultSet.getString("rname")); 49 role.setAlias(resultSet.getString("alias")); 50 return role; 51 } 52 }
4. 创建数据库配置文件
文件名:db.properties
位置: src下/ maven项目 resources文件夹下
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/**** jdbc.driverClass=com.mysql.jdbc.Driver jdbc.user=root jdbc.password=***
5.编写IOC配置
文件名:applicationContext.xml
位置:src下 / maven项目 resources文件夹下
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:p="http://www.springframework.org/schema/p" 6 xsi:schemaLocation=" 7 http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions 11 here --> 12 <context:component-scan base-package="com.itqf.spring"></context:component-scan> 13 <context:property-placeholder location="db.properties"></context:property- 14 placeholder> 15 <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 16 p:jdbcUrl="${jdbc.jdbcUrl}" 17 p:driverClass="${jdbc.driverClass}" 18 p:user="root" 19 p:password="111" 20 /> 21 <!-- bean jdbcTemplate --> 22 <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 23 <property name="dataSource" ref="dataSource"/> 24 </bean> 25 <bean name="roleDao" class="com.itqf.spring.dao.impl.RoleDaoImpl"> 26 <property name="jdbcTemplate" ref="jdbcTemplate"/> 27 </bean> 28 </beans>
测试:
1 @Test 2 public void test2(){ 3 //TODO 测试使用配置文件 4 ApplicationContext context =new 5 ClassPathXmlApplicationContext("applicationContext.xml"); 6 RoleDao dao = context.getBean("roleDao", RoleDaoImpl.class); 7 Role byId = dao.getById(2); 8 System.out.println(byId); 9 List<Role> all = dao.getAll(); 10 System.out.println("all = " + all); 11 }
以上是关于Spring JDBC 数据访问的主要内容,如果未能解决你的问题,请参考以下文章
Spring使用计算机名而不是提供的用户名来访问jdbc数据库