String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu";
List list=this.getJdbcTemplate().query(sql,new BeanPropertyRowMapper(Stu.class));
return list;
}
关于execute和updateҎ(gu)之间的区别,updateҎ(gu)q回的是受媄响的记录数目?一个计敎ͼq且如果传入参数的话Q用的是java.sql.PreparedStatement,而executeҎ(gu)L使用 java.sql.Statement,不接受参敎ͼ而且他不q回受媄响记录的计数Q更适合于创建和丢弃表的语句Q而updateҎ(gu)更适合于插入,更新 和删除操作,q也是我们在使用旉要注意的?/span>
Connection conn=DataSourceUtils.getConnection(getJdbcTempldate().getDataSource());
conn=getJdbcTemplate().getNativeJdbcExtractor().getNativeConnection(conn);
OracleConnection oconn=(OracleConnection)conn;
通过DataSourceUtils获取当前U程l定的数据连接,Z使用U程上下文相关的事务Q这样写是正的写法Q如果直接从DataSource获取q接Q得到的是和当前U程上下文无关的新的数据库连接实例?/span>
http://www.javaeye.com/topic/49932?page=2
http://www.javaeye.com/problems/15846
http://www.javaeye.com/topic/87034
http://www.javaeye.com/topic/508799
http://ttitfly.javaeye.com/blog/151560
jdbcTemplate的方式里如果带上int[] argTypes昄指定每个占位W所对应的字D|据类型,可以保证cd安全Q当参数gؓnullӞ提供了更好的支持?/p>
-----------------------
上面q句话如何理解?
后在http://javazoo.bokee.com/viewdiary.15850865.html扑ֈ原因?/p>
今天在调试程序的时?在后C务逻辑cM利用JdbcTemplateq行数据同步操作?发现?br />执行jdbcTemplate.update(?的SQL语句,new Object[]{tmp.getName( ),tmp.getNo( ),tmp.getSpeciality( ),tmp.getMounterofficer( ),tmp.getDesigner( ),tmp.getProductivity( ),tmp.getState( ))
q种操作?如果后面参数中有gؓnull?后台会报异常,l想下也?如果是null,那就要执行jdbc的setNull(Spring底层q是用JDBC做的)Ҏ(gu)?但是setNullҎ(gu)要知道具体的数据库字D늚cd.如setNull(1,Types.VARCHAR).而在上面的方法没有体?
l于体会到updateҎ(gu)中第三个参数new int[]的作用了.!
springq是很伟大的.
如果字段名和属性名是严格对应的Q那么就可以不用自己写RowMapper了,使用BeanPropertyRowMapper:
getJdbcTemplate().query(sql, new BeanPropertyRowMapper(User.class));
cȝ属性字D名U要数据库中的字D名UCh者数据库字段名ؓs_idcȝ名称为SId,
如果你没有遵守这个规范则可以在select语句后面l数据库字段名取别名
//l定参数Ӟ日期cd的写?未经q验?br />
public void updStu(Stu stu) {
String sql = "update stu set s_name=?,s_sex=?,s_brith=? where s_id=?";
Object[] obj = new Object[] { stu.getSname(), stu.getSsex(),new java.sql.Date(stu.getSbrith().getTime()), stu.getSid() };
getJdbcTemplate().update(sql, obj, new int[] { Types.VARCHAR, Types.VARCHAR,Types.DATE, Types.INTEGER });
}
ConnectionCallback的用法,使用完要手动关闭q接吗?
spring的AbstractRoutingDataSourceQ可以多态切换数据库?
事务抽象层http://blog.csdn.net/congqian1120/archive/2008/01/16/2046311.aspx
public interface ConnectionCallback
Generic callback interface for code that operates on a JDBC Connection. Allows to execute any number of operations on a single Connection, using any type and number of Statements.
This is particularly useful for delegating to existing data access code
that expects a Connection to work on and throws SQLException. For newly
written code, it is strongly recommended to use JdbcTemplate's more specific
operations, for example a query
or updat
variant.
ObjectdoInConnection(Connection con)
throws SQLException,
DataAccessException
JdbcTemplate.execute
with an active JDBC
Connection. Does not need to care about activating or closing the
Connection, or handling transactions.
If called without a thread-bound JDBC transaction (initiated by DataSourceTransactionManager), the code will simply get executed on the JDBC connection with its transactional semantics. If JdbcTemplate is configured to use a JTA-aware DataSource, the JDBC Connection and thus the callback code will be transactional if a JTA transaction is active.
Allows for returning a result object created within the callback, i.e.
a domain object or a collection of domain objects. Note that there's special
support for single step actions: see JdbcTemplate.queryForObject
etc. A thrown RuntimeException is treated as application exception:
it gets propagated to the caller of the template.
con
- active JDBC Connection
null
if none
SQLException
- if thrown by a JDBC method, to be auto-converted
to a DataAccessException by a SQLExceptionTranslator
DataAccessException
- in case of custom exceptionsJdbcTemplate.queryForObject(String, Class)
,
JdbcTemplate.queryForRowSet(String)
q里有个publish接口Ҏ(gu)D被误用的危险QDAO接口如果是领域模型提出的h实现Q那么这个设计就会很冒风险,因ؓ如果一旦你的DAO?
口publish了,你就要冒着别的正在写domain
model的开发h员会耦合于你的接口,一旦你的接口publish了,改动非常困难了Q而且如果一旦发现因为需求分析不够导致的DAO接口逻辑有问
题,那么q个是非常痛苦的重?修改q程?
所以关键在于让合理的关联代替复杂的查询?/p>
说到接口Q顺便说说对满天飞的interface的反感,我以前就是那h天飞的,先在感觉飞的太高了?/p>
接口其实q同于代码隐藏Q说句不好听的话是代码U有化?我发布一个接口,加上一些比较清晰的说明?
调用着一般都会只看接口说明感觉合适就直接IOCq来用了Q久而久之就有可能被误用接口的危险?
如果没有接口Q依赖代码就是文档的和相互可以修改的原则Q那么大安可以直入Ҏ(gu)的正体,看一下对方代码的具体实现逻辑Q有问题可以直接提出来探讨,q样
减了E序风险Q而且也省M来来回回反反复复修改interface 和实现的ȝ?
接口如同是一个盖子,盖住了很多东西,然而在代码极度׃n和互改的环境中,q是用为妙?/p>我的观点是一个重要的接口都应该提供一个抽象类来实现基本的骨架!q样当你的接口改动时只媄响你的抽象类。而对实现接口的承抽象类的子cL有媄响?
其实接口只是定义mixin(混合cd)的理想选择(java中接口才允许多?Q?
例如Q一个教l本w也是球员。那么我们可以定义一个mixin接口Q组合一些新的方法让实现q个mixin的抽象类不仅hTrain和Play的职责,
q有l合产生的特性?br />一个缺点:不支持分布式部v。无法把一个beanlfail over或者re-deploy?
实际上,所有轻量ioc容器真用h都没什么用处,因ؓ它们都无法应付分布式的需求。(jboss mc的作者跟我说的)
呵呵Q谁有分布式的需求?
spring不是支持集群了吗Q分布式q不着了吧
有一个收费的T字头的方案能帮助spring实现分布式吧Q没有免费的实现是挺ȝ的?/p>
我们的做法是?台tomcat服务器前面放一台四层交换机之类的硬Ӟq样Q相同的ip来访问时会被指派到同一台tomcat,因此不需要http session׃nQ也能达到类似的分布式效果,q节U了session׃n的消耗?/p>
一直觉得interface是C++里的.h 头文Ӟ好不Ҏ(gu)java里不需?h,׃苦vQ现在大家又争先恐后再入火坑?
其实如果把interface用于动态proxy, cglib已经提供了解x案,spring的OAOP,试时的easyMock,都有cglib实现Q性能比基于interface proxy的更高一点点?/p>
如果是代码设计方面的Q一定要看清楚实际情况再军_是否抽象interface。我觉得interface在代码设计方面最主要的应用其实是多重l承吧和firebody说的盖子功能吧?/p>
所以springside里只有几个用到多重承和webservice盖子的时候才用了interface. 比如dao, appfuse{sampleZ演示多种daoҎ(gu)才用interface阿,我们没事又不会换ormҎ(gu)的,忙活q个接口没意义呀?/p>