- 浏览: 5173599 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
引言
Spring版本:4.2.5,代码编写时间:2016-03-16。
本人原创,转载请保留本人信息:http://wallimn.iteye.com。
简单起见,没有使用接口,整个示例仅涉及4个文件。代码逻辑很简单,基本不用解释。
一、Spring配置文件applicationContext.xml
二、用户类User.class
三、数据操作类UserDaoImpl.class
四、测试类UserDaoTest.java
Spring版本:4.2.5,代码编写时间:2016-03-16。
本人原创,转载请保留本人信息:http://wallimn.iteye.com。
简单起见,没有使用接口,整个示例仅涉及4个文件。代码逻辑很简单,基本不用解释。
一、Spring配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 简单起见,使用Spring自带的数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="org.h2.Driver"></property> <property name="url" value="jdbc:h2:tcp://localhost/C:/h2-201510/jdbc"></property> <property name="username" value="sa"></property> <property name="password" value=""></property> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 注意:由于要使用NamedParameterJdbcTemplate, UserDaoImpl要从NamedParameterJdbcDaoSupport类派生 --> <bean id="userDao" class="com.wallimn.study.UserDaoImpl"> <property name="jdbcTemplate" ref="jdbcTemplate"></property> </bean> </beans>
二、用户类User.class
package com.wallimn.study; public class User { private String id; private String username; private String password; public void setId(String id){ this.id = id; } public String getId() { return id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { //return super.toString(); return String.format("ID:%s\t\t\t用户名:%s\t\t密码:%s", id,username,password); } }
三、数据操作类UserDaoImpl.class
package com.wallimn.study; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.Map; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import org.springframework.jdbc.core.ParameterizedPreparedStatementSetter; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport; import org.springframework.jdbc.core.namedparam.SqlParameterSource; import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils; /** * 用户管理类,演示jdbc模板使用。 * 使用JdbcTemplate模板(不支持命令参数等高级特性),需继承JdbcDaoSupport, * 使用NamedParameterJdbcTemplate,需继承NamedParameterJdbcDaoSupport, * 两个模板和Dao是有对应关系的。 * @author Administrator * */ public class UserDaoImpl extends NamedParameterJdbcDaoSupport { /** * 创建测试用表,后面的测试以这个表为基础 <br/> * 时间:2016-3-15,作者:http://wallimn.iteye.com */ public void createUserTable() { String sql = null; try { sql = "drop table user"; this.getJdbcTemplate().execute(sql); } catch (Exception e) { e.printStackTrace(); } sql = "create table user(id varchar(32) primary key,username varchar(32),password varchar(256))"; this.getJdbcTemplate().execute(sql); } /** * 使用匿名参数 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @param user */ public void addUser(User user) { String sql = "insert into user values(?,?,?)"; this.getJdbcTemplate().update(sql, user.getId(), user.getUsername(), user.getPassword()); } /** * 使用命名参数、Bean * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @param user */ public void addUserBean(User user) { String sql = "insert into user values(:id,:username,:password)"; this.getNamedParameterJdbcTemplate().update(sql, new BeanPropertySqlParameterSource(user)); } /** * 使用命名参数、Map * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @param user */ public void addUserMap(Map<String,Object> user) { String sql = "insert into user values(:id,:username,:password)"; this.getNamedParameterJdbcTemplate().update(sql, new MapSqlParameterSource(user)); } /** * 批量操作,一次性增加多个用户 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @param user */ public void addUser1(final List<User> users) { if(users==null || users.size()==0)return; String sql = "insert into user values(?,?,?)"; //使用匿名类 BatchPreparedStatementSetter setter = new BatchPreparedStatementSetter(){ @Override public int getBatchSize() { return users.size(); } @Override public void setValues(PreparedStatement stat, int idx) throws SQLException { stat.setString(1, users.get(idx).getId()); stat.setString(2, users.get(idx).getUsername()); stat.setString(3, users.get(idx).getPassword()); } }; this.getJdbcTemplate().batchUpdate(sql, setter); } /** * 批量操作,一次性增加多个用户 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @param user */ public void addUsers2(final List<User> users) { if(users==null || users.size()==0)return; String sql = "insert into user values(?,?,?)"; //使用匿名类 ParameterizedPreparedStatementSetter<User> setter = new ParameterizedPreparedStatementSetter<User>(){ @Override public void setValues(PreparedStatement stat, User user) throws SQLException { stat.setString(1, user.getId()); stat.setString(2, user.getUsername()); stat.setString(3, user.getPassword()); } }; this.getJdbcTemplate().batchUpdate(sql,users,users.size(), setter); } /** * 批量操作,一次性增加多个用户 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @param user */ public void addUsers3(final List<User> users) { if(users==null || users.size()==0)return; String sql = "insert into user values(:id,:username,:password)"; //使用匿名类 SqlParameterSource[] source = SqlParameterSourceUtils.createBatch(users.toArray()); this.getNamedParameterJdbcTemplate().batchUpdate(sql, source); } /** * 删除指定ID的用户 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @param id */ public void deleteUser(String id) { String sql = "delete from user where id=?"; this.getJdbcTemplate().update(sql, id); } /** * 删除所有用户 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com */ public void deleteAllUser() { String sql = "delete from user"; this.getJdbcTemplate().update(sql); } /** * 修改用户信息 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @param user */ public void updateUser(User user) { String sql = "update user set username=?,password=? where id=?"; this.getJdbcTemplate().update(sql, user.getUsername(), user.getPassword(), user.getId()); } /** * 根据ID查询用户名 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @param id * @return */ public String queryUserName(String id) {// 简单查询,按照ID查询,返回字符串 String sql = "select username from user where id=?"; // 返回类型为String(String.class) return this.getJdbcTemplate().queryForObject(sql, String.class, id); } /** * 查询结果以List形式返回 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @return */ public List<Map<String,Object>> queryForList() { String sql = "select * from user"; return this.getJdbcTemplate().queryForList(sql); } /** * 查询结果不多于一条记录,以Map形式返回 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @param id * @return */ public Map<String,Object> queryForMap(String id) { String sql = "select * from user where id=?"; return this.getJdbcTemplate().queryForMap(sql,id); } /** * 查询结果不多于一条记录,以Map形式返回 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @param id * @return */ public String queryForObject(String id) { String sql = "select username from user where id=?"; return this.getJdbcTemplate().queryForObject(sql,new Object[]{id},String.class); } /** * 统计用户数量 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @return */ public String queryUserCount() { String sql = "select count(*) from user"; return this.getJdbcTemplate().queryForObject(sql,String.class); } /** * 查找指定ID的用户,使用RowMapper将结果转化为User类型 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @param id * @return */ public User queryUser(String id) { String sql = "select * from user where id=?"; return this.getJdbcTemplate().queryForObject(sql, new UserRowMapper(), id); } /** * 返回所有用户,使用RowMapper将结果转化为User类型 * <br/> * 时间:2016-3-16,作者:http://wallimn.iteye.com * @return */ public List<User> findAll() {// 复杂查询返回List集合 String sql = "select * from user"; return this.getJdbcTemplate().query(sql, new UserRowMapper()); } /** * 将ResultSet转化为Bean的类。 * @author Administrator * */ class UserRowMapper implements RowMapper<User> { public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User(); user.setId(rs.getString("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); return user; } } }
四、测试类UserDaoTest.java
package com.wallimn.study; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.UUID; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class UserDaoTest { private ApplicationContext applicationContext = null; public UserDaoTest(){ applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); } /** * DAO,简单起见,不使用接口。 */ private UserDaoImpl userDao; private UserDaoImpl getUserDao(){ if(userDao==null){ userDao = (UserDaoImpl)applicationContext.getBean("userDao"); } return userDao; } /** * 返回GUID,用作主键 * <br/> * 时间:2016-3-16,作者:wallimn@sohu.com * @return */ private String getUUID(){ return UUID.randomUUID().toString().replace("-", "").toLowerCase(); } /** * 创建测试用表 * <br/> * 时间:2016-3-16,作者:wallimn@sohu.com */ @Test public void testCreateTable(){ this.getUserDao().createUserTable(); } /** * 插入、删除用户测试 * <br/> * 时间:2016-3-16,作者:wallimn@sohu.com */ @Test public void testAddAndDeleteUser(){ String id1 = this.getUUID(); String id2 = this.getUUID(); String id3 = this.getUUID(); String id4 = this.getUUID(); this.getUserDao().deleteAllUser(); User user=new User(); user.setId(id1); user.setUsername("wallimn"); user.setPassword("wallimn@sohu.com"); this.getUserDao().addUser(user); user.setId(id2); this.getUserDao().addUserBean(user); user.setId(id3); this.getUserDao().addUserBean(user); Map<String,Object> m = new HashMap<String,Object>(); m.put("id", id4); m.put("username", "张三"); m.put("password", "mypwd"); this.getUserDao().addUserMap(m); System.out.println("==插入四个用户,结果如下=="); this.showUsers(); this.getUserDao().deleteUser(id1); System.out.println("==删除一个用户,结果如下=="); this.showUsers(); System.out.println("==查询测试,结果为List=="); List<Map<String,Object>> list = this.getUserDao().queryForList(); for(Map<String,Object> map :list){ System.out.println(map.get("username")); } System.out.println("==查询测试,结果为Map=="); Map<String,Object> map = this.getUserDao().queryForMap(id3); System.out.println(map.get("username")); //如果没有查到数据,会报异常 //map = this.getUserDao().queryForMap("notexist"); //System.out.println(map.get("username")); System.out.println("==查询测试,结果为String=="); String username = this.getUserDao().queryForObject(id3); System.out.println(username); //如果没有查到数据,会报异常 //username = this.getUserDao().queryForObject("notexist"); //System.out.println(username); } @Test public void testBatchInsert(){ this.getUserDao().deleteAllUser(); List<User> users = new LinkedList<User>(); for(int i=0; i <1000; i ++){ User u = new User(); u.setId(String.format("%04d", i)); u.setUsername("姓名"+i); u.setPassword("密码"+i); users.add(u); } this.getUserDao().addUsers3(users); System.out.println("用户数量:"+this.getUserDao().queryUserCount()); } /** * 显示所有用户,查看SQL执行情况。 * <br/> * 时间:2016-3-16,作者:wallimn@sohu.com */ private void showUsers(){ List<User> users=this.getUserDao().findAll(); for(User user : users){ System.out.println(user); } } }
发表评论
-
gradle编译错误:Could not find method compile() for arguments
2020-09-19 10:50 18621编译(IDEA+Gradle)一个别人的工程,出现一个 ... -
netty心跳检查之UDP篇
2019-09-15 08:50 2456部分UDP通信场景中,需要客户端定期发送心跳信息,以获取终 ... -
解决tomcat部署两个SpringBoot应用提示InstanceAlreadyExistsException
2019-06-30 11:49 3446两个SpringBoot应用部署在一个Tomcat中,单独 ... -
Eclipse配置MyBatis代码自动化功能
2019-06-29 10:16 18121.安装插件 Eclipse中,Help->Ecli ... -
vue.js中使用qrcode生成二维码
2019-05-20 00:00 7677一、安装包 npm install qrcodejs2 --s ... -
MySQL插入数据报错: Incorrect string value: '\xFD\xDE'
2019-03-31 23:19 1274我MySQL数据库用的uft-8字符集,插入数据一直很正常 ... -
vue自定义组件并双向绑定属性
2019-03-08 22:46 3268做了两个子组件,原理基本一样,一个是使用原生的select ... -
vue-router简单示例
2019-03-05 00:32 1175写个基本完整、稍有借鉴意义的示例,防止自己忘记。 &l ... -
“联通充值系统繁忙”轻松应对
2019-02-06 11:03 3992大过年的,联通充个值一直报“充值系统繁忙”。昨天晚上试了几 ... -
electron.js数据库应用---导航菜单(element-ui+mysql)
2019-02-05 21:33 2381一、环境搭建 略, ... -
electron.js数据库应用---入门(mysql+element-ui)
2019-01-27 23:19 7524我的机器:Windows10,64 ... -
SpringMVC 在controller层中注入成员变量request,是否线程安全
2018-12-17 21:17 2759@RestController public class ... -
VueJS 组件参数名命名与组件属性转化
2018-12-03 00:00 2089转自:https://www.cnblogs.com/meiy ... -
vue-resource拦截器实现token发送及检验自动化
2018-11-16 22:38 3084用了很长时间vue-resource,最近思考$http发 ... -
element-ui试用手记
2018-10-29 20:25 1768element-ui、iviewui都以vue.js为基础 ... -
iviewui中表格控件中render的使用示例
2018-07-07 16:46 9798示例了如何在表格中显示按钮,如何将代码转化为文字。 i ... -
Tomcat错误“Alias name tomcat does not identify a key entry”解决
2018-07-05 21:39 6632申请到了阿里云的证书后,下载、按照说明生成jks格式证书、 ... -
阿里云免费证书“fileauth.txt内容配置错误”解决
2018-07-05 20:43 5329最近研究微信小程序开发,上阿里云申请了个证书,使用文件验证 ... -
springboot2.0跨域配置
2018-07-04 22:11 5296springboot2.0跨域配置: 一、代码 ... -
微信小程序使用code换openid的方法(JAVA、SpringBoot)
2018-07-01 21:52 10416微信小程序序的代码中提示,使用code换取openid,但 ...
相关推荐
`JdbcTemplate`是Spring提供的工具类,用于简化JDBC操作,例如执行SQL和处理结果集。`RowMapper`接口用于将结果集映射到Java对象。 集成Spring Data JDBC可以减少代码量,提高可维护性,并且由于Spring的其他模块...
总结来说,Spring JDBC通过JdbcTemplate和一系列辅助工具,极大地简化了Java应用中的数据库操作,使得开发者能够更加专注于业务逻辑,而不是被数据库访问的细节所困扰。同时,Spring JDBC还结合了Spring的其他模块,...
Spring 4的JDBC支持让数据库操作变得简单且易于维护。通过`JdbcTemplate`,我们能优雅地执行SQL查询和更新,同时,结合Spring的事务管理和异常处理机制,确保了应用程序的健壮性。了解并熟练掌握这些知识点,将有助...
总结起来,Spring JDBC提供了一种更简洁、更安全的方式来处理JDBC操作,通过Spring的依赖注入和事务管理功能,可以更方便地进行数据库操作。在Spring 2.5中,结合MySQL数据库,我们可以利用JdbcTemplate执行SQL语句...
JdbcTemplate是Spring JDBC的核心类,它封装了常见的JDBC操作,如查询、更新、插入和删除。使用JdbcTemplate,你可以通过简单的API调用来执行SQL语句,并且异常会被自动转换为更友好的Spring DataAccessException。 ...
总结来说,Spring JDBC提供了强大且灵活的数据库访问工具,简化了JDBC的使用,使得开发者能够专注于业务逻辑,而不是底层的数据库操作细节。结合良好的事务管理和异常处理机制,Spring JDBC成为了Java开发中的重要...
这个文件名可能表示这是关于Spring框架的第11部分内容,有可能包含了相关的代码示例、配置文件或数据库脚本,帮助读者更好地理解和实践Spring4中的JDBC操作。 总结,Spring4的JDBC模块提供了强大的工具,使开发者...
ExtJS + Spring + JDBC 是一个常见的企业级应用开发...总结来说,"extjs+spring+jdbc" 结合提供了从用户界面到数据存储的全方位解决方案。通过熟练掌握这三者,开发者可以构建出高效、稳定且易于维护的管理后台系统。
1. **Spring JDBC核心组件**:Spring JDBC的核心是JdbcTemplate,它是一个模板类,封装了基本的JDBC操作,如执行SQL查询、更新、存储过程等。通过使用JdbcTemplate,开发者可以避免编写大量重复的JDBC模板代码,例如...
虽然JdbcTemplate在简化JDBC操作方面做得很好,但相比ORM框架如Hibernate,它的使用仍需要编写更多的SQL语句。Hibernate提供了对象-关系映射,可以直接操作对象,降低了与SQL的耦合度,对于复杂查询和关联操作更为...
`JdbcTemplate`是Spring JDBC的核心类,它通过模板方法模式简化了常见的JDBC操作,如查询、更新、插入和删除数据。`SimpleJdbcInsert`和`SimpleJdbcCall`则分别用于简化插入操作和调用存储过程。 集成Spring JDBC的...
总结,Spring与JDBC的结合使得数据库操作变得更加高效、简洁。从简单的SQL执行到复杂的事务管理,再到ORM框架的集成,Spring都提供了全面的支持。同时,Spring Boot的引入更是降低了使用门槛,提升了开发体验。对于...
在本项目"Spring-Boot JDBC JSP Demo"中,我们将探讨如何使用Spring Boot框架整合JDBC和JSP技术来创建一个简单的Web应用程序。这个Demo旨在展示如何在Spring Boot环境中进行数据库操作并展示结果到用户界面。 首先...
总结来说,这个案例涵盖了Spring JDBC的数据库操作基础和Dojo的客户端开发实践,提供了一个从后端数据获取到前端展示的完整流程。学习这个案例,可以帮助开发者理解和掌握Spring框架中的数据库访问层处理以及Dojo在...
总结,Spring Data JDBC 1.0.0.RC1为开发者带来了高效、简洁的JDBC操作方式,降低了数据库访问的复杂性,提高了开发效率,是构建现代Java应用的理想选择。结合Spring Boot的自动化配置,它使得数据访问变得更加优雅...
总结起来,这个压缩包包含了Apache ServiceMix中的Spring JDBC模块,用于简化数据库操作,以及一个Maven插件,用于优化Web项目的前端资源。这两个组件都是开源的,体现了开放源码社区对软件开发的贡献和价值。
总结起来,这个示例项目展示了如何在SpringBoot应用中通过JDBC连接MySQL数据库,并利用`JdbcTemplate`进行基本的数据库操作。了解这些知识点有助于构建和维护高效、稳定的数据库驱动的应用。在实际开发中,还可以...
总结来说,Spring 3.10的JDBC支持使得数据库操作变得简单而直观,通过`JdbcTemplate`可以方便地执行SQL语句,同时避免了手动管理资源的繁琐工作。配置正确的jar包依赖和设置好数据源后,就可以轻松地在Java应用中...
在这个配置中,我们创建了一个`DataSource` bean来管理数据库连接,并通过`JdbcTemplate` bean封装了低级别的JDBC操作。 接下来,我们讨论如何使用`JdbcTemplate`执行CRUD操作: 1. **创建(Create)**: 创建新...
Spring JDBC 提供了一个更高级别的抽象层,使得数据库操作更加简单和易管理。它简化了JDBC的配置和使用,通过模板方法和回调机制减少了代码量。Spring JDBC还支持事务管理,使开发者能够轻松处理数据库事务的提交和...