目前市场上的持久化技术框架有:Hibernate、ibatis、JDO、JPA、TOPLink等。由于框架繁杂,spring需要提供模板类简化各种持久化技术的使用(设计模式方面使用:模板模式、适配器模式),体现了“开-闭原则”
spring提供了很多的模板类支持不同框架的dao操作,比如ibatis的org.springframework.orm.ibatis.SqlMapClientTemplate
![](http://img.blog.csdn.net/20130810151308921?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRvbWdl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如果直接使用模板类,我们必须在DAO接口实现类中定义一个模板对象并提供数据资源,为了解决这个问题,spring提供了支持类,可以直接将所需资源(比如:dataSource、sqlMapClient)注入支持类中(最终还是封装到Template类中)
ibatis的支持类:org.springframework.orm.ibatis.support.SqlMapClientDaoSupport
其它框架的支持类在上图的各自的support包中
关于dbcp数据源的配置,可以访问链接
上面的ORM框架是一种很流行的方式,也是一种主流方式 ,其底层实现原理依然是JDBC
JDBC数据访问操作流程:
1. 获取数据库连接
2. 开启事务
3.获得prepareStatement执行功能,预加载sql语句,设置参数,执行,对ResultSet结果集处理(变化部分)
4. 事务提交
5. 回滚事务(与步骤4互斥)
6. 关闭各种连接资源
我们可以将上面的数据访问流程固化到模板类中,将其中的固定部分和变化部分分开,变化的部分可以通过回调接口(比如匿名内部类方式)开放出来,根据业务单独实现。提高开发效率的同时又保证了资源使用的正确性。
Spring JDBC通过模板和回调机制大大降低了使用JDBC的复杂度,借助JDBCTemplate只要编写很少代码就可以进行数据库操作。
xml配置
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.url}"
p:username="${jdbc.username}"
p:password="${jdbc.password}" />
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref="dataSource"/>
调用类
@Repository
public class ForumDao {
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* 批量更新数据
*
* @param forums
*/
public void addForums(final List<Forum> forums) {
final String sql = "INSERT INTO t_forum(forum_name,forum_desc) VALUES(?,?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
public int getBatchSize() {
return forums.size();
}
public void setValues(PreparedStatement ps, int index)
throws SQLException {
Forum forum = forums.get(index);
ps.setString(1, forum.getForumName());
ps.setString(2, forum.getForumDesc());
}
});
}
/**
* 根据ID获取Forum对象
*
* @param forumId
* @return
*/
public Forum getForum(final int forumId) {
String sql = "SELECT forum_name,forum_desc FROM t_forum WHERE forum_id=?";
final Forum forum = new Forum();
jdbcTemplate.query(sql, new Object[] { forumId },
new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
forum.setForumId(forumId);
forum.setForumName(rs.getString("forum_name"));
forum.setForumDesc(rs.getString("forum_desc"));
}
});
return forum;
}
}
JDBCTemplate提供数据库的增、删、改、查、存储过程等常见的数据库操作。
此外还提供了支持命名参数绑定的NamedParameterJDBCTemplate,以减少code的出错机率;SimpleJDBCTemplate类隐藏使用几率不高的方法,暴露使用机率高的方法,更加人性化。
表主键,根据创建者角度不同可以分为:应用层主键,由应用层负责(可以通过规则自由控制、灵活方便);另一种是数据层主键,比如oracle的sequence。
随着大数据时代的来临,数据层主键的缺点越发明显:
1. 不方便全局管理,系统丧失灵活性
2. 不方便数据的整合和迁移
3. 不方便后续的分库、分表操作
主键的设定很有讲究的,就比如固定电话都有区号一样
主键id=数字(规则1)+数字(规则2)+。。。
目前淘宝订单有4096张表,其主键的制定也是有一定讲究,详细内容可参考:《淘宝高性能架构简介》
分享到:
相关推荐
spring——第十四节素材
本文将从三个方面探讨Spring对DAO的支持:传统模式的DAO,Spring对JDBC的DAO支持,以及Spring对Hibernate的DAO支持。 ### 1. 传统DAO模式 在传统的DAO模式中,通常需要实现以下几个组件: - **DAO工厂**:创建DAO...
Spring框架是Java应用程序开发中的一个核心库,它提供了一种模块化和简化的方式来构建和管理应用程序的组件。Spring框架的核心特点在于它的Inversion of Control (IoC)和Dependency Injection (DI)原则,允许开发者...
关于Spring方面的常见面试题
spring-dao.jar spring-dao.jar
Spring的DAOSpring的DAOSpring的DAOSpring的DAOSpring的DAOSpring的DAOSpring的DAOSpring的DAOSpring的DAO
使用Spring实现DAO模式
spring-dao-2.0.8.jar
spring——mvc下的简单程序,适合新手使用
NULL 博文链接:https://teddywang.iteye.com/blog/357901
浅谈 Spring 原理 透析,IOC 和 AOP Spring 框架是一个从实际项目开发经验中抽取的,可高度重用的应用框架。它是一个轻量级容器,带有包装器,使许多不同的服务和框架更易于使用。轻量级容器接受任何 JavaBean,而...
spring集成hibernate通用dao,泛型,server都可以调用
在 Spring 中整合 Hibernate,主要是为了利用 Spring 提供的事务管理和 DAO 支持,提高代码的可维护性和可扩展性。Spring 通过配置文件(通常是 XML 格式)来管理 Bean,包括 Hibernate 的 SessionFactory 和 ...
在实际项目中,Spring DAO 通常会配合 Spring 的事务管理功能,提供更高级别的抽象,如使用 `JdbcTemplate` 或 `HibernateTemplate` 进行数据库操作,减少手写 SQL 语句,提高代码的可维护性和可扩展性。同时,...
SpringCloud——分布式配置中心(Spring Cloud Config)之高可用的分布式配置中心
java毕业设计——基于spring boot的就业信息管理网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的就业信息管理网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的就业信息管理...
JSP源码——车辆管理系统(struts+hibernate+spring+oracle).zip
JavaEE源代码 spring-daoJavaEE源代码 ...daoJavaEE源代码 spring-daoJavaEE源代码 spring-daoJavaEE源代码 spring-daoJavaEE源代码 spring-daoJavaEE源代码 spring-daoJavaEE源代码 spring-daoJavaEE源代码 spring-dao
NULL 博文链接:https://shiyongno1.iteye.com/blog/2181031