- 浏览: 631004 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
hsluoyz:
现在新推出了一个权限框架,叫jCasbin(https://g ...
Shiro 权限框架使用总结 -
飕飕飞:
比如说 我用私匙加密一段数据,并加密成功。那签名时用什么生成的 ...
Java使用RSA加密解密签名及校验 -
文艺吧网:
楼主讲的好详细,这里有整套 Shiro demo http:/ ...
Shiro 权限框架使用总结 -
nanshanmu:
333引用[url][*]||||[/flash][/flas ...
SpringMVC中返回值处理 -
变脸小伙:
) 业务类在Spring配置 ...
整合Struts2与Spring以及spring的自动装配
1、由于之前JdbcTemplate的程序需要编写一堆的RowMapper的映射文件,显得有些臃肿,最好是根据pojo类和字段的名称进行自动的对应, 所以SimpleJdbcTemplate支持使用Pojo中的属性进行自动赋值, 语法为':'开头。
- public class UserDaoSpringImpl implements UserDao {
- private SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(
- JdbcUtils.getDataSource());
- public void addUser(User user) {
- String sql = "insert into user (name, money, birthday) values (:name, :money, :birthday)" ;
- SqlParameterSource param = new BeanPropertySqlParameterSource(user);
- KeyHolder keyHolder = new GeneratedKeyHolder();
- this .simpleJdbcTemplate.getNamedParameterJdbcOperations().update(sql,
- param, keyHolder);
- user.setId(keyHolder.getKey().intValue());
- }
- public void delete(User user) {
- String sql = "delete from user where id=?" ;
- this .simpleJdbcTemplate.update(sql, user.getId());
- }
- public User findUser(String loginName, String password) {
- String sql = "select id, name, money, birthday from user where name=?" ;
- return this .simpleJdbcTemplate.queryForObject(sql,
- ParameterizedBeanPropertyRowMapper.newInstance(User.class ),
- loginName);
- }
- public User getUser( int userId) {
- String sql = "select id, name, money, birthday from user where id=?" ;
- return this .simpleJdbcTemplate.queryForObject(sql,
- ParameterizedBeanPropertyRowMapper.newInstance(User.class ),
- userId);
- }
- public void update(User user) {
- String sql = "update user set name=?, birthday=?, money=? where id=? " ;
- this .simpleJdbcTemplate.update(sql, user.getName(), user.getBirthday(),
- user.getMoney(), user.getId());
- sql = "update user set name=:name, birthday=:birthday, money=:money where id=:id " ;
- this .simpleJdbcTemplate.update(sql, new BeanPropertySqlParameterSource(
- user));
- }
- }
其中使用的JdbcUtils获取数据源的代码如下:
- public final class JdbcUtils {
- private static String url = "jdbc:mysql://localhost:3306/jdbc" ;
- private static String user = "root" ;
- private static String password = "" ;
- private static DataSource myDataSource = null ;
- private JdbcUtils() {
- }
- static {
- try {
- Class.forName("com.mysql.jdbc.Driver" );
- // myDataSource = new MyDataSource2();
- Properties prop = new Properties();
- // prop.setProperty("driverClassName", "com.mysql.jdbc.Driver");
- // prop.setProperty("user", "user");
- InputStream is = JdbcUtils.class .getClassLoader()
- .getResourceAsStream("dbcpconfig.properties" );
- prop.load(is);
- myDataSource = BasicDataSourceFactory.createDataSource(prop);
- } catch (Exception e) {
- throw new ExceptionInInitializerError(e);
- }
- }
- public static DataSource getDataSource() {
- return myDataSource;
- }
- public static Connection getConnection() throws SQLException {
- // return DriverManager.getConnection(url, user, password);
- return myDataSource.getConnection();
- }
- public static void free(ResultSet rs, Statement st, Connection conn) {
- try {
- if (rs != null )
- rs.close();
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- try {
- if (st != null )
- st.close();
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- if (conn != null )
- try {
- conn.close();
- // myDataSource.free(conn);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
2、 完成相同映射的类还包括:NamedParameterJdbcTemplate, 它将之前的占位符‘?’进行了取名,方便程序的阅读。 不过这样的SQL不能再数据库中直接执行,需要有Spring进行转换。
- public class NamedJdbcTemplate {
- static NamedParameterJdbcTemplate named = new NamedParameterJdbcTemplate(
- JdbcUtils.getDataSource());
- /**
- * @param args
- */
- public static void main(String[] args) {
- User user = new User();
- user.setMoney(10 );
- user.setId(2 );
- System.out.println(findUser1(user));
- }
- static void addUser(User user) {
- String sql = "insert into user(name,birthday, money) values (:name,:birthday,:money) " ;
- SqlParameterSource ps = new BeanPropertySqlParameterSource(user);
- KeyHolder keyHolder = new GeneratedKeyHolder();
- named.update(sql, ps, keyHolder);
- int id = keyHolder.getKey().intValue();
- user.setId(id);
- Map map = keyHolder.getKeys();
- }
- static User findUser(User user) {
- String sql = "select id, name, money, birthday from user "
- + "where money > :m and id < :id" ;
- Map params = new HashMap();
- // params.put("n", user.getName());
- params.put("m" , user.getMoney());
- params.put("id" , user.getId());
- Object u = named.queryForObject(sql, params, new BeanPropertyRowMapper(
- User.class ));
- return (User) u;
- }
- static User findUser1(User user) {
- String sql = "select id, name, money, birthday from user "
- + "where money > :money and id < :id" ;
- SqlParameterSource ps = new BeanPropertySqlParameterSource(user);
- Object u = named.queryForObject(sql, ps, new BeanPropertyRowMapper(User. class ));
- return (User) u;
- }
- }
【注意】
1、BeanPropertyRowMapper完成了对象到数据库字段的映射关系, 可以不再使用RowMapper来一一对应起来。如果RowMapper只使用1次,则可以直接使用内部类来完成,而不再需要专门的写一个类。
2、KeyHolder, 其中保存了数据库中操作的主键,取得操作的主键后, 方便对进行操作的记录进行其他动作。
总之:利用反射技术,减少的了不必要的rowmapper,提高了效率
发表评论
-
context:component-scan扫描使用上的容易忽略的use-default-filters
2015-11-13 21:28 805问题 如下方式可以成功扫描到@Controller注解的Bea ... -
MongoDB Java Driver操作指南
2015-08-04 21:42 2537MongoDB为Java提供了非常丰富的API操作,相比关系 ... -
Spring3自定义环境配置 <beans profile="">
2015-04-22 10:51 1268摘自springside3 Spring 3.1的功能 ... -
json-rpc 1.0规范解读
2015-04-17 14:21 1317JSON可能是这个地球上 ... -
request.getParameter()、request.getInputStream()和request.getReader()
2015-03-30 11:16 2999大家经常 用servlet和jsp, ... -
微信企业号上传下载多媒体文件接口详解演示-java
2015-03-27 15:37 6296企业在使用接口时,对多媒体文件、多媒体消息的获取和调用等操作 ... -
java如何得到GET和POST请求URL和参数列表
2015-03-13 16:28 3122在servlet中GET请求可以通过HttpServletR ... -
关于<context:property-placeholder>的一个有趣现象
2015-01-05 20:09 566先来看下A和B两个模块 A模块和B模块都分别拥有自己的S ... -
spring jms _ activemq
2015-01-05 13:50 917参考链接: http://bsnyderblog.blogsp ... -
读取配置信息
2014-12-29 18:08 845第一种方法是使用java.io和java.util包,缺点是路 ... -
spring 事件机制
2014-11-14 14:17 973在Spring中已经定义的五 ... -
spring InitializingBean接口
2014-10-27 01:33 637最近工作需要得到sping中的每个事物需要执行的sql, ... -
spring InitializingBean接口
2014-10-27 01:33 964最近工作需要得到sping中的每个事物需要执行的sql,称 ... -
四种常见的 POST 提交数据方式
2014-09-23 11:38 1618HTTP/1.1 协议规定的 HTTP 请求方法有 OPT ... -
使用 Java 配置进行 Spring bean 管理
2014-07-31 17:58 847Spring bean 是使用传统的 XML 方法配置的。在 ... -
怎么使用Servlet 3.0中的上传文件呢?
2014-07-31 15:20 938Spring 3.1开始提供了Servlet 3.0的支持。 ... -
Spring mvc 拓展使用
2014-07-31 15:08 976原文链接:http://my.oschina.net/u/11 ... -
Spring MVC handler method 参数绑定常用的注解
2014-07-31 10:36 1997参考链接:http://csjava.bl ... -
SpringMVC中使用Interceptor拦截器
2014-06-30 15:18 845SpringMVC 中的Interceptor 拦 ... -
AOP的底层实现-CGLIB动态代理和JDK动态代理
2014-05-04 16:58 1034AOP是目前Spring框架中的 ...
相关推荐
spring中使用JdbcTemplate操作数据库crud,一图详解(脑图)
chapter2: 一起来学Spring Boot | 第二篇:Spring Boot配置详解 chapter3: 一起来学Spring Boot | 第四篇:整合Thymeleaf模板 chapter4: 一起来学Spring Boot | 第五篇:使用JdbcTemplate访问数据库 chapter5: ...
JdbcTemplate主要提供以下五类方法;JdbcTemplate类支持的回调类;并附例子
2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的...
- chapter9-2-2:[Spring Boot与Dubbo中管理服务依赖] ### Spring Cloud构建微服务架构 由于Spring Cloud偏宏观架构,Spring Boot偏微观细节,内容上越来越多,为了两部分内容不互相干扰,所以迁移Spring Cloud...
Spring Boot 基础教程(基于1.3.x-1.5.x) 快速入门 chapter1:基本项目构建(可作为工程脚手架),引入web模块,完成一个简单的RESTful API 使用Intellij中的Spring...chapter9-2-2:Spring Boot与Dubbo中管理服务依赖
JdbcTemplate 是在JDBC API基础上提供了更抽象的封装,并提供了基于方法注解的事务管理... 通过使用SpringBoot自动配置功能并代替我们自动配置beans,下面给大家介绍spring boot中使用JdbcTemplate相关知识,一起看看吧
Spring 对JDBC 的封装支持模板类操作,使JDBC的代码量精简,提高了开发效率。JdbcTemplate使用详解 JdbcTemplate使用详解
主要介绍了Spring JdbcTemplate整合使用方法及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1.37 Spring Boot的启动器Starter详解 1.38 Spring Boot集成Redis实现缓存机制 1.39 Spring Boot Cache理论篇 1.40 Spring Boot集成EHCache实现缓存机制 1.41 Spring Boot分布式Session状态保存Redis 1.42 Spring ...
主要介绍了详解在spring中使用JdbcTemplate操作数据库的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
下面小编就为大家带来一篇基于spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
n 技术详解-切入点表达式详解 l Spring JDBC n 基础应用-JdbcTemplate的使用 n 源码分析-自定义JdbcTemplate n 设计模式-RowMapper的策略模式 n 高级应用-NamedParameterJdbcTemplate的使用 n 源码分析-...
3.3.2. 依赖配置详解 3.3.3. 使用depends-on 3.3.4. 延迟初始化bean 3.3.5. 自动装配(autowire)协作者 3.3.6. 依赖检查 3.3.7. 方法注入 3.4. Bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用...
2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@...
2、Spring配置文件及其相应API 3、Spring注解开发 4、Spring web环境及其Junit的集成 5、Spring JDBCTemplate的基本使用 6、Spring AOP的介绍及其配置使用 7、Spring的声明式事务控制 8、SpringMVC的介绍及其快速...
3 Spring基本功能详解 8 3.1 SpringIOC 8 3.2别名Alias 11 别名拓展: 11 3.3 Spring容器内部对象的创建 12 Spring容器内部对象创建拓展: 12 3.3.1使用类构造器实例化(默认无参数) 14 3.3.2使用静态工厂方法实例化...
使用JdbcTemplate访问数据库 整合SpringDataJpa 整合Mybatis 通用Mapper与分页插件的集成 整合Lettuce Redis 使用Spring Cache集成Redis 集成Swagger在线调试 初探RabbitMQ消息队列 RabbitMQ延迟队列 actuator 服务...
2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@...