Spring整合JDBC temple
一、Spring对Jdbc的支持
Spring为了提供对Jdbc的支持,在Jdbc API的基础上封装了一套实现,以此建立一个 JDBC 存取框架。
作为 Spring JDBC 框架的核心, JDBC 模板的设计目的是为不同类型的 JDBC 操作提供模板方法. 每个模板方法都能控制整个过程, 并允许覆盖过程中的特定任务. 通过这种方式, 可以在尽可能保留灵活性的情况下, 将数据库存取的工作量降到最低.
二、传统的Jdbc实现
如下为传统的Jdbc实现,该实现有两个明显的缺点就是(1)需要自己管理连接 (2)Jdbc操作重复代码封装与编写
public void save() { try { String sql = "insert into aa(id,name) values(3,‘happy‘);"; Connection con = null; Statement stmt = null; Class.forName("com.mysql.jdbc.Driver"); // 连接对象 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/kk", "root", "123456"); // 执行命令对象 stmt = con.createStatement(); // 执行 stmt.execute(sql); // 关闭 stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } }
三、Spring+Jdbc实现
相比于传统的Jdbc实现,在Jdbc API的基础上封装了一套实现JdbcTemplate,JdbcTemplate的优点如下:
(1)配置基于模板设置
(2)完成了资源的创建和释放的工作
(3)完成了对JDBC的核心流程的工作,包括SQL语句的创建和执行,简化了对JDBC的操作
(4)仅需要传递DataSource就可以把它实例化
(5)JdbcTemplate只需要创建一次,减少了代码复用的烦恼
(6)JdbcTemplate是线程安全类
步骤1.配置Spring+JDBC配置文件
db.properties
#mysql jdbc jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=UTF-8 jdbc.uid=root jdbc.pwd=root
applictionContext.xml
<!--1 引入属性文件,在配置中占位使用 --> <context:property-placeholder location="classpath:spring/db.properties" /> <!--2 配置C3P0数据源 --> <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!--驱动类名 --> <property name="driverClass" value="${jdbc.driver}" /> <!-- url --> <property name="jdbcUrl" value="${jdbc.url}" /> <!-- 用户名 --> <property name="user" value="${jdbc.uid}" /> <!-- 密码 --> <property name="password" value="${jdbc.pwd}" /> <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 --> <property name="acquireIncrement" value="5"></property> <!-- 初始连接池大小 --> <property name="initialPoolSize" value="10"></property> <!-- 连接池中连接最小个数 --> <property name="minPoolSize" value="5"></property> <!-- 连接池中连接最大个数 --> <property name="maxPoolSize" value="20"></property> </bean> <!--整合普通的JDBC查询 start--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="datasource" /> </bean> <bean id="userDao" class="com.zhangguo.JDBC.UserJDBCTemplateDAO"> <property name="jdbcTemplate" ref="jdbcTemplate" /> </bean> <!--整合普通的JDBC查询 end -->
四、相关类
User.java
package com.zhangguo.JDBC; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; public class UserMapper implements RowMapper<User> { @Override public User mapRow(ResultSet rs, int rownum) throws SQLException { User user = new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); return user; } }
UserJDBCTemplateDAO.java
package com.zhangguo.JDBC; import java.util.List; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; public class UserJDBCTemplateDAO { private JdbcTemplate jdbcTemplate;//利用applicationContext.xml让它初始化,不用每个类都出现jdbcTemplate= new JdbcTemplate(xx)这些玩意! /*查询整张表的数据*/ public List<User> findAllUser() { String sql = "select * from user"; RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class); return this.jdbcTemplate.query(sql, rowMapper); } /*修改password字段*/ public void updatePassword(int id,String password){ String sql = "update user set password=‘"+password+"‘ where id="+id; jdbcTemplate.execute(sql); } /*JdbcTemplate jdbcTemplate的getter setter必须有,不然spring读不到这个变量。由于不太重要,习惯性放在最后*/ public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } }
UserMapper.java
package com.zhangguo.JDBC; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; public class UserMapper implements RowMapper<User> { @Override public User mapRow(ResultSet rs, int rownum) throws SQLException { User user = new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); return user; } }
测试类
JDBCUserTest
package com.zhangguo.user; import com.zhangguo.JDBC.UserJDBCTemplateDAO; import com.zhangguo.JDBC.User; import java.util.*;//打印数据库表的时候,用到容器List、ArrayList不得不应用 /*用于初始化Spring*/ import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.ConfigurableApplicationContext;//用于关闭Spring public class JDBCUserTest { @Test public void testUser() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath*:spring/applicationContext.xml");// 初始化spring UserJDBCTemplateDAO userDao = (UserJDBCTemplateDAO) applicationContext.getBean("userDao");// 初始化userDao这个数据库接口类 // userDao.updatePassword(1, "cc");这样就能修改id=1的password字段,让其变成cc,这里不作展示 /* 查询整张表的内容将其打印出来 */ List<User> user_list = new ArrayList<User>(); user_list = userDao.findAllUser(); for (User user : user_list) {// jdk1.5+的foreach打印,省事,不用写这么多代码了 System.out.println(user.getId() + "\t" + user.getUsername() + "\t" + user.getPassword()); } ((ConfigurableApplicationContext) applicationContext).close();// 关闭Spring避免警告 } }
程序目录结构
Spring JDBC可以Mybaits共存的,集成了mybaits,同时也可以集成JDBCTemplate
相关推荐
白净垃圾桶 2020-07-04
HappyHeng 2020-06-25
ASoc 2020-11-14
Andrea0 2020-09-18
Cherishyuu 2020-08-19
dongtiandeyu 2020-08-18
CoderYYN 2020-08-16
大黑牛 2020-08-15
Dullonjiang 2020-08-11
gaozhennan 2020-08-03
mcvsyy 2020-08-02
zbcaicai 2020-07-29
AscaryBird 2020-07-27
liulin0 2020-07-26
ldcwang 2020-07-26
helloxusir 2020-07-25
娜娜 2020-07-20
pengpengflyjhp 2020-07-19
点滴技术生活 2020-07-19