欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > Spring JDBC-Spring 对 JDBC的 DAO支持类详解

Spring JDBC-Spring 对 JDBC的 DAO支持类详解

2024/10/24 13:26:10 来源:https://blog.csdn.net/weixin_52937170/article/details/142767503  浏览:    关键词:Spring JDBC-Spring 对 JDBC的 DAO支持类详解

 前言

参照我的博客,熟悉基础的Spring JDBC的操作

Spring JdbcTemplate与NamedJdbcTemplate模板的实战案例与优化解析-CSDN博客

 了解基础的Spring JDBC后我们可以知道,即使是封装了原生JDBC的JdbcTemplate类在书写时也存在冗余代码,对此Spring提供了一些支持类,来进一步简化JDBC的相关操作。

  • 存在问题
    • JDBC的全部DAO类,需要一个JdbcTemplate属性和一个设置方法
    • 把JdbcTemplate Bean装配到每个DAO的JdbcTemplate属性
    • 多个DAO,产生很多重复代码
  • 解决方案
    • 全部DAO 对象创建一个通用父类 在其中设置 JdbcTemplate 属性,
    • 全部 DAO 继承这个类,使用父类的JdbcTemplate进行数据访问,
    • Spring恰好提供了这样一些基类。

案例解析

使用JdbcDaoSupport

  • Spring 的 JdbcDaoSupport 就是用于编写基于JDBC 的DAO 类的基类
  • 自己的DAO类继承它即可

接下来我将通过案例来演示JdbcDaoSupport的使用

 创建实体类继承JdbcDaoSupport类

UserDao

package dao;import entity.User;import java.util.List;public interface UserDao {//查询所有用户List<User> getAllUsers();List<User> getUsersByCond(User user);User getUserById(int id);int addUser(User user);int deleteUser(int id);int updateUser(int id);
}

UserDaoJdbcTemplate

@Component("userDaoTemp")
public class UserDaoJdbcTemplate implements UserDao {public static final RowMapper rowMapper=new ParameterizedRowMapper<User>(){@Overridepublic User mapRow(ResultSet rs, int i) throws SQLException {User user =new User();user.setUser_id(rs.getInt("user_id"));user.setUser_name(rs.getString("user_name"));user.setPassword(rs.getString("password"));return user;}};@Resource(name = "jdbcTemplate")private JdbcTemplate jdbcTemplate;@Overridepublic List<User> getAllUsers() {return null;}@Overridepublic List<User> getUsersByCond(User user) {return null;}@Overridepublic User getUserById(int id) {return null;}@Overridepublic int addUser(User user) {Object[] params={user.getUser_name(),user.getPassword()};String sql="insert into t_user(user_name,password) values(?,?)";return jdbcTemplate.update(sql,params);}@Overridepublic int deleteUser(int id) {return 0;}@Overridepublic int updateUser(int id) {return 0;}
}

JdbcDaoSupport

public class UserDaoSupport extends JdbcDaoSupport implements UserDao {@Overridepublic List<User> getAllUsers() {return null;}@Overridepublic List<User> getUsersByCond(User user) {return null;}@Overridepublic User getUserById(int id) {return null;}@Overridepublic int addUser(User user) {Object[] params={user.getUser_name(),user.getPassword()};String sql="insert into t_user(user_name,password) values (?,?)";return getJdbcTemplate().update(sql,params);}@Overridepublic int deleteUser(int id) {return 0;}@Overridepublic int updateUser(int id) {return 0;}
}

对比UserDaoJdbcTemplate和JdbcDaoSupport,可以发现JdbcDaoSupport将JdbcTemplate进行了二次封装,不需要我们手动注入就可以直接使用,进而简化了开发。

本质上,就是将jdbcTemplate等相关的需要重复使用的内容,集成到父类中,然后我们继承这个父类,就可以直接使用父类中的内容,从而避免了代码冗余。

配置spring.xml配置文件

spring.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"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsd"><context:component-scan base-package="dao"/><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/csx_demo?serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull"/><property name="username" value="root"/><property name="password" value="root"/><property name="initialSize" value="100"/><property name="maxActive" value="200"/><!--<property name="maxIdle" value="10"/>--><property name="minIdle" value="5"/><property name="maxWait" value="3000"/></bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean><bean id="userSupport" class="dao.impl.UserDaoSupport"><property name="jdbcTemplate" ref="jdbcTemplate"/></bean></beans>	
  •  将jdbcTemplate声明为可以被Spring管理的bean
  • 将继承了JdbcDaoSupport的类声明为bean,并且为其的属性(父类中的jdbcTemplate)赋值

 进阶技巧

使用NamedParameterJdbcDaoSupport

  • 使用命名参数形式
  • 让Dao类继承NamedParameterJdbcDaoSupport类

目的和使用NamedParameterJdbcTemplate类是一样的,都是为了进一步方便代码开发,用map中键名代替sql中的?占位符,方便阅读。

UserDaoNamedSupport

public class UserDaoNamedSupport extends NamedParameterJdbcDaoSupport implements UserDao {@Overridepublic List<User> getAllUsers() {return null;}@Overridepublic List<User> getUsersByCond(User user) {return null;}@Overridepublic User getUserById(int id) {return null;}@Overridepublic int addUser(User user) {String sql="insert into t_user(user_name,password)values (:username,:password)";Map map=new HashMap();map.put("username","fff");map.put("password","ccc");return getNamedParameterJdbcTemplate().update(sql,map);}@Overridepublic int deleteUser(int id) {return 0;}@Overridepublic int updateUser(int id) {return 0;}
}

spring.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"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsd"><context:component-scan base-package="dao"/><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/csx_demo?serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull"/><property name="username" value="root"/><property name="password" value="root"/><property name="initialSize" value="100"/><property name="maxActive" value="200"/><!--<property name="maxIdle" value="10"/>--><property name="minIdle" value="5"/><property name="maxWait" value="3000"/></bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean><bean id="userSupport" class="dao.impl.UserDaoSupport"><property name="jdbcTemplate" ref="jdbcTemplate"/></bean><bean id="namedUserSupport" class="dao.impl.UserDaoNamedSupport"><property name="jdbcTemplate" ref="jdbcTemplate"/></bean>
</beans>	

总结

简化Spring JDBC 开发的相关支持类,进一步简化Spring JDBC的开发。 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com