http://static.springsource.org/spring/docs/2.0.x/reference/jdbc.html
http://www.mkyong.com/spring/spring-named-parameters-examples-in-simplejdbctemplate/
package com.snailteam.team.model; public interface Model { }
package com.snailteam.team.model; import java.util.Date; import javax.persistence.Column; import javax.persistence.Id; import javax.persistence.Table; @Table(name = "tuser") public class User implements Model { @Id public int id; @Column(name = "username") public String username; @Column(name = "password") public String password; @Column(name = "reg_date") public Date reg_date; @Column(name = "version") public Integer version; public String lastIp; }
package com.snailteam.team.model; import java.lang.reflect.Field; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import javax.persistence.Column; import javax.persistence.Id; import javax.persistence.Table; import javax.sql.DataSource; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.jdbc.support.KeyHolder; public class SimpleJdbcTemplateExt extends SimpleJdbcTemplate { public SimpleJdbcTemplateExt(DataSource dataSource) { super(dataSource); } public int insert(Model model) throws IllegalArgumentException, IllegalAccessException, SQLException { String tableName = ""; Map<String, Object> parameters = this.model2Parameters(model); if (model.getClass().isAnnotationPresent(Table.class)) { Table table = model.getClass().getAnnotation(Table.class); tableName = table.name(); } StringBuffer sb = new StringBuffer(); sb.append("("); for (String key : parameters.keySet()) { sb.append("," + key); } sb.append(")"); MapSqlParameterSource paramSource = new MapSqlParameterSource(); paramSource.addValues(parameters); KeyHolder generatedKeyHolder = new GeneratedKeyHolder(); this.getNamedParameterJdbcOperations().update( "insert into " + tableName + sb.toString().replace("(,", "(") + "values" + sb.toString().replace(",", ",:").replace("(,", "("), paramSource, generatedKeyHolder); return generatedKeyHolder.getKey().intValue(); } public Map<String, Object> model2Parameters(Model model) throws IllegalArgumentException, IllegalAccessException { Map<String, Object> parameters = new HashMap<String, Object>(); for (Field f : model.getClass().getFields()) { f.setAccessible(true); if (f.isAnnotationPresent(Id.class)) { Object obj = f.get(model); if (obj != null) parameters.put("id", obj); } else if (f.isAnnotationPresent(Column.class)) { Column column = f.getAnnotation(Column.class); Object obj = f.get(model); if (obj != null) parameters.put(column.name(), obj); } } return parameters; } @SuppressWarnings({ "unchecked", "rawtypes" }) public <T> T select(final Class<T> classz, String sql, Map<String, Object> parameters) throws InstantiationException, IllegalAccessException { return (T) this.queryForObject(sql, new RowMapper() { public Object mapRow(ResultSet rs, int rowNum) throws SQLException { try { T object = classz.newInstance(); for (Field f : object.getClass().getFields()) { f.setAccessible(true); if (f.isAnnotationPresent(Id.class)) { f.set(object, rs.getObject("id")); } else if (f.isAnnotationPresent(Column.class)) { Column column = f.getAnnotation(Column.class); f.set(object, rs.getObject(column.name())); } } return object; } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }, parameters); } public <T> T parameters2Model(Class<T> clazz, Map<String, Object> parameters) throws IllegalArgumentException, IllegalAccessException, InstantiationException { T model = clazz.newInstance(); for (Field f : model.getClass().getFields()) { f.setAccessible(true); if (f.isAnnotationPresent(Id.class)) { f.set(model, parameters.get("id")); } else if (f.isAnnotationPresent(Column.class)) { Column column = f.getAnnotation(Column.class); f.set(model, parameters.get(column.name())); } } return model; } }
package com.snailteam.team.dao; import java.sql.SQLException; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.annotation.Resource; import javax.sql.DataSource; import org.hibernate.id.UUIDHexGenerator; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.snailteam.team.model.SimpleJdbcTemplateExt; import com.snailteam.team.model.User; @ContextConfiguration(locations = { "classpath*:/META-INF/spring/applicationContext*.xml" }) @RunWith(SpringJUnit4ClassRunner.class) public class UserServiceTest { @Resource DataSource dataSource; @Test public void testInsert() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, SQLException { User tUser = new User(); tUser.username = "xiaofancn"; tUser.password = "apsdf"; tUser.version = 3L; tUser.id = 5; tUser.reg_date = new Date(); SimpleJdbcTemplateExt simpleJdbcTemplateExt = new SimpleJdbcTemplateExt( dataSource); System.out.println(simpleJdbcTemplateExt.insert(tUser)); } @Test public void testSelect() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, SQLException, InstantiationException { Map<String, Object> params = new HashMap<String, Object>(); params.put("id", 1); SimpleJdbcTemplateExt simpleJdbcTemplateExt = new SimpleJdbcTemplateExt( dataSource); User user = simpleJdbcTemplateExt.select(User.class, "select * from vuser where id=:id", params); System.out.println(user); } }
再来一个工具累
import java.lang.reflect.Field; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.springframework.jdbc.InvalidResultSetAccessException; import org.springframework.jdbc.support.rowset.SqlRowSet; public class JdbcUntil { public static <T> T parameters2Model(Class<T> clazz, Map<String, Object> parameters) { T model = null; try { model = clazz.newInstance(); } catch (InstantiationException e1) { println(e1.getMessage()); } catch (IllegalAccessException e1) { println(e1.getMessage()); } Field[] fields = model.getClass().getFields(); for (Field f : fields) { if (parameters.get(f.getName()) == null || parameters.get(f.getName()).equals("null")) continue; f.setAccessible(true); try { f.set(model, parameters.get(f.getName())); } catch (IllegalArgumentException e) { println(e.getMessage()); } catch (IllegalAccessException e) { println(e.getMessage()); } } return model; } public static <T> T resultSet2Model(Class<T> clazz, ResultSet rs) { T model = null; try { model = clazz.newInstance(); } catch (InstantiationException e) { println(e.getMessage()); } catch (IllegalAccessException e) { println(e.getMessage()); } finally { if (model == null) return model; } Field[] fields = model.getClass().getFields(); for (Field f : fields) { f.setAccessible(true); try { f.set(model, rs.getObject(f.getName())); } catch (IllegalArgumentException e) { try { if (f.getType().equals(Integer.class)) { f.set(model, Integer.valueOf("" + rs.getObject(f.getName()))); } else if (f.getType().equals(Long.class)) { f.set(model, Long.valueOf("" + rs.getObject(f.getName()))); } } catch (Exception e2) { println("转换" + f.getName() + "错误"); } } catch (IllegalAccessException e) { println(e.getMessage()); } catch (SQLException e) { println(e.getMessage()); } } return model; } public static <T> T sqlRowSet2Model(Class<T> clazz, SqlRowSet parameters) { T model = null; try { model = clazz.newInstance(); } catch (InstantiationException e) { println(e.getMessage()); } catch (IllegalAccessException e) { println(e.getMessage()); } finally { if (model == null) return model; } Field[] fields = model.getClass().getFields(); for (Field f : fields) { f.setAccessible(true); try { f.set(model, parameters.getObject(f.getName())); } catch (InvalidResultSetAccessException e) { println(e.getMessage()); } catch (IllegalArgumentException e) { println(e.getMessage()); } catch (IllegalAccessException e) { println(e.getMessage()); } } return model; } public static Map<String, Object> model2Parameters(Object obj, boolean needNull) { Map<String, Object> paraMap = new HashMap<String, Object>(); for (Field f : obj.getClass().getFields()) { try { if (!needNull && !(f.get(obj) == null)) paraMap.put(f.getName(), f.get(obj)); else paraMap.put(f.getName(), f.get(obj)); } catch (IllegalArgumentException e) { println(e.getMessage()); } catch (IllegalAccessException e) { e.printStackTrace(); } } return paraMap; } public static String rowsFetchIdString(List<Map<String, Object>> rows, String keyword) { Set<Object> filter = new HashSet<Object>(); StringBuffer sb = new StringBuffer(); for (Map<String, Object> row : rows) { if (row.get(keyword) == null || filter.contains(row.get(keyword))) continue; filter.add(row.get(keyword)); sb.append(row.get(keyword) + ","); } sb.append("-9"); return sb.toString(); } public static void println(String info) { System.out.println(new Date() + "JdbcUntil -----" + " " + info); } }
相关推荐
6. **扩展与进阶** - **与其他组件集成**:`SimpleJdbcTemplate`可以与Spring的其他组件如`AOP`、`DAO`等无缝配合,提升整体开发效率。 - **JdbcTemplate的高级用法**:`SimpleJdbcTemplate`是`JdbcTemplate`的轻...
这是对JdbcTemplate的扩展,它引入了命名参数的概念,替代了传统的占位符"?",使得SQL语句的参数更易于理解和维护,特别是在处理大量参数时。该类需要JDK 1.4或更高版本。 3. **SimpleJdbcTemplate**: ...
`NamedParameterJdbcTemplate`是`JdbcTemplate`的一个扩展,它支持命名参数而不是位置参数,这使得SQL语句更易于理解和维护。在使用`NamedParameterJdbcTemplate`时,SQL语句中的参数用名字来标识,而非传统的问号...
Spring-ORM是Spring框架的一部分,主要负责数据库操作的抽象和集成,它支持多种持久层技术,如Hibernate、JPA、iBatis等。...这对于任何希望优化和扩展数据访问层的Java开发者来说都是宝贵的资源。
它包括了JdbcTemplate和SimpleJdbcTemplate,这两个模板类简化了SQL查询和结果集处理。 6. **spring-aop.jar**:AOP(面向切面编程)模块支持定义和执行横切关注点,比如日志记录、性能监控、事务管理等。它可以将...
对于数据访问,Spring 3.0增强了对JDBC、Hibernate和JPA的支持,提供了统一的数据访问抽象,如`JdbcTemplate`和`SimpleJdbcTemplate`,简化了数据库操作。 7. **MVC框架** Spring 3.0的Web MVC框架引入了模型视图...
7. **spring-jdbc-4.0.0.RELEASE.jar**:这个模块提供了对JDBC的抽象层,简化了数据库访问,包括DataSource的管理、JdbcTemplate和SimpleJdbcTemplate,以及事务管理的支持。 8. **spring-aop-4.0.0.RELEASE.jar**...
1. **扩展性的配置命名空间**: Spring 2 引入了新的可扩展配置命名空间,使得配置更为灵活和强大。 2. **增强的AOP支持**: 支持更简单的AOP配置以及@AspectJ注解的支持。 3. **简化事务管理**: 提供了更简单的方式来...
总而言之,《Spring2.5中文开发手册》将帮助读者深入理解Spring框架的核心概念,如依赖注入、AOP、MVC、数据访问以及测试等,并掌握如何利用Spring 2.5的新特性来构建高质量、可扩展的应用程序。通过学习手册中的...
Spring是一个开源的应用程序框架,它为Java平台提供了全面的基础设施支持,使得开发者能够更方便地构建可维护、可测试和可扩展的Java应用程序。 在Spring Framework 2.5中,最重要的更新包括对Java 5和Java 6的支持...
通过`JdbcTemplate`和`SimpleJdbcTemplate`,开发者可以方便地进行数据库操作,而无需过多关注底层细节。同时,ORM(对象关系映射)的支持也更加完善,如对Hibernate的进一步整合,使得数据库操作更为简洁和高效。 ...
此外,对JDBC的抽象也得到了提升,Spring的JdbcTemplate和SimpleJdbcTemplate提供了更方便的数据操作接口。 在Web应用方面,Spring MVC作为Spring的Web MVC框架,提供了一种优雅的方式来组织和构建Web应用程序。...
2. **模板方法**:`JdbcTemplate` 和 `SimpleJdbcTemplate` 类提供了模板方法来执行常见的 JDBC 操作,如查询、更新、插入和删除,无需编写大量重复的 JDBC 代码。 3. **数据源管理**:Spring 可以配置多种数据源,...
虽然JDBC本身较为低级,但通过Spring的JdbcTemplate或者SimpleJdbcTemplate,可以简化数据库操作,减少代码量,并提供事务管理。 在`SchoolInfoSys`这个项目中,我们可以推测这是一个学校信息管理系统。可能的功能...
3. **配置JDBC**:在Spring配置文件中设置JDBC相关的Bean,如DataSource,JdbcTemplate或SimpleJdbcTemplate。 4. **整合Struts与Spring**:通过Spring-Struts的插件或者手动配置,使得Struts的Action由Spring管理...
在Spring中使用JDBC,我们可以利用`JdbcTemplate`或`SimpleJdbcTemplate`,这两个都是对JDBC的轻量级封装,提供了更安全、更易于使用的API。例如,`UserServiceImp`可能包含了这些模板方法来执行SQL查询、更新、插入...
JSTL的核心标签库`jstl.core`提供了循环、条件判断等基本功能,而`jstl.fn`扩展库则提供了字符串处理和集合操作等功能。在Spring项目中,JSTL常与EL(Expression Language)结合使用,提高视图层的表达力。 再者,...
8. `org.springframework.jdbc`:用于处理数据库操作的包,包含JdbcTemplate和SimpleJdbcTemplate等,提供了SQL执行的简单抽象。 9. `org.springframework.orm`:这个包支持ORM(对象关系映射)技术,如Hibernate、...
Spring提供的JdbcTemplate、NamedParameterJdbcTemplate和SimpleJdbcTemplate模板类消除了手动管理数据库连接、预编译SQL语句以及事务处理的繁琐工作。开发者只需关注业务逻辑,无需关心底层细节。例如,使用...
3. **数据访问**:Spring3.0在数据访问层提供了对JPA(Java Persistence API)、Hibernate等ORM框架的更好支持,同时加强了对JDBC的抽象,通过`JdbcTemplate`和`SimpleJdbcTemplate`提供了更简洁的数据库操作API。...