Spring对数据库的操作在jdbc上面做了深层次的封装,也就是工具类 jdbcTemplate
作用:
1: 它提供了AOP式的事务管理
AOP式的事物管理:在以前的事务管理是要融合在逻辑代码中的,在逻辑代码中决定事务是否提交或者回滚,这样很容易造成代码难以维护,代码冗余
但是使用spring的声明式事务后,只需要在数据库处理方法上注解事务,就可以对操作进行管理,事务的设置和逻辑代码分开,容易维护。
不修改原有代码 重新封装现有的组件
类似于: FileWrite fw = new FileWrite();
PrintWrinter pw = new Prinwriter(fw);
2:spring 提供了统一的异常处理,框架处理了异常。
不论Dao层运用什么技术实现 出现的错误全部封装成了DatyaAccessException
如何使用
1 引入相应spring jar包 + 数据库驱动包
2 在spring的主配置文件中配置 jdbcTemplate
<!-- 定义template组件 --> <bean id="template" class="org.springframework.jdbc.core.JdbcTemplate"> <!-- 注入连接信息 --> <property name="dataSource" ref="bonecp"> </property> </bean>
定义组件时 template需要一个数据连接池 来管理数据库连接
数据连接池 有很多种 这里用的是
com.alibaba.druid.pool.DruidDataSource
<!-- DataSource 数据源 连接池 存储管理大量的链接 流行的 dbcp c3p0,proxool --> <!-- 数据源配置, 使用 BoneCP 数据库连接池 --> <bean id="bonecp" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- 数据源驱动类可不写,Druid默认会自动根据URL识别DriverClass --> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <!-- 基本属性 url、user、password --> <property name="url" value="jdbc:mysql://localhost:3306/medicine?useUnicode=true&characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="root" /> <!-- 配置获取连接等待超时的时间 --> <property name="maxWait" value="60000" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="300000" /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <!-- 配置监控统计拦截的filters --> <property name="filters" value="stat" /> </bean>
下一部是根据表 编写实体类
实体类
package com.mxp.jdbc.entity; import java.io.Serializable; public class User implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String id; private String userName; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
还需要根据实体类写一个rowmapper
注意这里要继承
org.springframework.jdbc.core.RowMapper,然后重写maprow方法
package com.mxp.jdbc.entity; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; /** * 每个实体类都有这个封装组件 * 将User记录封装成 User对象 * @author Administrator * */ public class UserRowMapper implements RowMapper<User>{ /** * arg1:第几行记录 */ @Override public User mapRow(ResultSet arg0, int arg1) throws SQLException { User user = new User(); user.setId(arg0.getString("id")); user.setUserName(arg0.getString("user_name")); return user; } }
时间: 2024-07-29 14:51:34