前天写了一篇文章也是Spring保存数据返回id SqlUpdate类使用的
地址:hi.baidu.com/%CD%F5%D7%D36%BA%C5/blog/item/e9458e38f63001fab211c7f2.html
但是里面的参数比较少,只有3个。
当出现了10多个参数的时候,明显用链接里的方法是不行的。因为值对应会很麻烦。
改成以下方法后,虽然代码多了,但是更明了清晰,所以插入列值较多的话,推荐大家用此方法。
public int saveMenu(MenuForm menu) throws DataAccessException {
StringBuffer sb = new StringBuffer();
sb
.append("INSERT INTO websys_adminmenu(pid,name,url,title,target,icon,iconOpen,open,`index`,description,`show`,inTime)");
sb
.append("VALUES(:pid,:name,:url,:title,:target,:icon,:iconOpen,:open,:index,:description,:show,now())");
SqlUpdate sqlUpdate = new SqlUpdate(jdbcTemplate.getDataSource(), sb
.toString());
sqlUpdate.declareParameter(new SqlParameter("pid", Types.INTEGER));
sqlUpdate.declareParameter(new SqlParameter("name", Types.VARCHAR));
sqlUpdate.declareParameter(new SqlParameter("url", Types.VARCHAR));
sqlUpdate.declareParameter(new SqlParameter("title", Types.VARCHAR));
sqlUpdate.declareParameter(new SqlParameter("target", Types.VARCHAR));
sqlUpdate.declareParameter(new SqlParameter("icon", Types.VARCHAR));
sqlUpdate.declareParameter(new SqlParameter("iconOpen", Types.VARCHAR));
sqlUpdate.declareParameter(new SqlParameter("open", Types.BIT));
sqlUpdate.declareParameter(new SqlParameter("index", Types.BIT));
sqlUpdate.declareParameter(new SqlParameter("description",
Types.VARCHAR));
sqlUpdate.declareParameter(new SqlParameter("show", Types.BIT));
sqlUpdate.setReturnGeneratedKeys(true);
sqlUpdate.compile();
KeyHolder keyHolder = new GeneratedKeyHolder();
Map paramMap = new HashMap();
paramMap.put("pid", menu.getPid());
paramMap.put("name", menu.getName().replace("'", "\'"));
paramMap.put("url", menu.getUrl().replace("'", "\'"));
paramMap.put("title", menu.getTitle().replace("'", "\'"));
paramMap.put("target", menu.getTarget().replace("'", "\'"));
paramMap.put("icon", menu.getIcon().replace("'", "\'"));
paramMap.put("iconOpen", menu.getIconOpen().replace("'", "\'"));
paramMap.put("open", menu.isOpen());
paramMap.put("index", menu.isIndex());
paramMap.put("description", menu.getDescription().replace("'", "\'"));
paramMap.put("show", menu.isShow());
int i = sqlUpdate.updateByNamedParam(paramMap, keyHolder);
if (i == 0 || null == keyHolder.getKey())// 没有保存成功返回0
return 0;
else {
return keyHolder.getKey().intValue();
}
}
分享到:
相关推荐
本篇将详细阐述如何使用Spring进行数据访问,涵盖多种数据访问方式,包括JDBC、ORM(对象关系映射)框架如Hibernate和MyBatis,以及Spring Data JPA等。 首先,Spring JDBC(Java Database Connectivity)模块提供...
以上两种方法都可以实现文档的更新,但需要注意的是,直接使用`update`方法更高效,因为它不会加载整个文档到内存,而是直接在数据库级别执行更新操作。 在实际开发中,根据具体需求选择合适的方法。如果需要频繁...
在本篇【从零开始学Spring Boot】系列中,我们将探讨如何使用Java Persistence API (JPA) 来保存数据。JPA是Java平台上的一个标准,它为对象关系映射(ORM)提供了一种规范,使得开发人员可以使用Java对象来操作数据库...
本项目是关于如何在Spring Boot环境中整合三个数据源,其中两个是MySQL数据库,另一个是SQL Server数据库。 首先,我们需要了解Spring Boot的自动配置特性。Spring Boot通过`@EnableAutoConfiguration`注解自动配置...
2. **使用AbstractRoutingDataSource**:Spring提供了一个抽象类`AbstractRoutingDataSource`,它可以基于某种条件(如线程绑定的变量)动态决定使用哪个数据源。我们需要创建一个自定义的DataSource,继承自`...
在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们连接并操作多个数据库,例如MySQL和SQL Server。在本场景中,我们将探讨如何在Spring Boot中设置和管理这样的多数据源配置。 首先,我们需要了解`...
1. 使用JdbcTemplate:JdbcTemplate提供了一种安全的方式来执行SQL查询,通过预编译的SQL语句和PreparedStatementCreator工厂类,将用户输入作为参数,而非直接拼接。例如,创建一个UserRepository接口,其中定义了...
本教程将详细介绍如何在Spring Boot项目中集成Spring Data JPA,实现CRUD(创建、读取、更新、删除)操作,并通过Ajax进行前后端数据交互。 首先,我们需要在Spring Boot项目中引入Spring Data JPA依赖。在`pom.xml...
在Spring Boot应用中,我们经常需要处理来自多个数据源的数据,比如在开发微服务架构时,每个服务可能对应一个特定的数据源。`JdbcTemplate`是Spring框架提供的一个用于简化数据库操作的工具,它使得数据库访问更为...
在Spring配置文件中,可以通过`org.springframework.jndi.JndiObjectFactoryBean`类来定义一个数据源。例如: ```xml <bean id="sysDB" class="org.springframework.jndi.JndiObjectFactoryBean"> <value>hzsh_...
为了实现多数据源处理,我们需要定义一个动态数据源类,继承 AbstractRoutingDataSource,并实现方法 determineCurrentLookupKey,该方法返回一个 Object,一般是返回字符串。然后,我们需要建立一个获得和设置上...
2. **动态数据源**:Spring的AbstractRoutingDataSource类允许根据特定条件动态选择数据源。通过设置当前数据源键,可以在运行时决定使用哪个数据源。 3. **事务管理**:在多数据源环境中,事务管理需要特别注意。...
例如,大量数据的批量插入可能更适合使用JdbcTemplate的`batchUpdate()`方法,或者直接使用JDBC的PreparedStatement来提高效率。 9. **最佳实践** - 保持SQL语句简洁,避免在业务代码中混杂复杂的SQL。 - 避免...
在这段配置中,`jdbcInputChannel`是消息通道,`dataSource`是数据源引用,`query`定义了查询新数据的SQL语句,`update`则是更新数据库状态的SQL语句,以防止重复处理相同的记录。`poller`元素设置了定时轮询的频率...
本文将深入探讨Spring JdbcTemplate的常用方法,并结合提供的`JsonBean.java`和`JdbcUtils.java`文件,来理解其在实际应用中的使用。 首先,JdbcTemplate的核心功能在于它提供了一系列的方法来执行SQL语句,包括...
3. 使用@Async注解可以标记方法为异步执行,Spring会自动使用配置的线程池来执行该方法,从而提高系统并行处理能力。 三、数据同步控制问题 1. 在并发环境下,共享数据的访问可能导致数据不一致,需要采取同步机制...
Spring 实战包括使用 Spring Boot 构建 Web 应用程序、使用 Spring Data 构建数据访问层、使用 Spring Security 构建安全应用程序等。 10. Spring 生命周期 Spring 生命周期是指 Spring 应用程序从启动到关闭的...
我们可以定义一个接口,如`UserDao`,包含增删改查等通用方法,然后使用Spring的`@Repository`注解标记其实现类,这样Spring会自动管理事务。 二、底层数据操作方法 1. 增加(Insert):在Hibernate中,我们可以...
Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供...
4. **调用JdbcTemplate方法**:使用JdbcTemplate提供的execute、query、update等方法执行SQL,它们会自动处理结果集、关闭连接等细节。 5. **处理结果**:对于查询操作,JdbcTemplate会返回一个ResultSet,可以通过...