spring-jdbc jar中的 JdbcTemplate 的注意点和常用使用方法

spring中的jdbcTemplate 它是spring框架中提供的一个对象,是对原始jdbcAPI对象的简单封装。spring框架为我们提供了很多的操作模板类:操作关系型数据的:操作nosql数据库的:操作消息队列的:注意:需要导入两个JAR包:spring-jdbc-5.0.2.RELEASE.jar、spring-tx-5.0.2.RELEASE.jar。 阅读详情

1、使用JdbcTemplate.queryForObject 的注意点

1、queryForObject其实支持的是标量子查询,只能传入一个基本类型的包装类的class,并返回一个基本类型对应包装类型的对象.

2、如果要实现使用queryForObject获得自定义的类的对象,需要使用和方法query相似的重载方法queryForObject(sql,Object[],int[],RowMapper),通过RowMapper填充自定义的类,通过Object[]和int[]设定sql语句的参数参数和参数类型.

3、这样还会存在一些问题,就是如果sql语句查询出0条或者多条数据的话,queryForObject会抛出EmptyResultDataAccessException或IncorrectResultSetColumnCountException:的异常,而如果干脆使用方法query,或者queryForList则可以在编码中处理掉这种问题而无需try-catch

结论: 查询单个对象干脆直接使用: queryForList

1、JdbcTemplate 常用的使用方法

备注: maven 基于

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.3.12.RELEASE</version>
</dependency>

查询:

1、查询 带查询参数  并返回基本类型 (单个返回不要使用 queryForObject)

/**
 *   查询 重复id 号
*/
	public List<Long> selectRepeatId(Long id,String dataFrom) {
		String sql = "SELECT TOP 1 ID FROM competition_price_store_history WHERE data_from = ? AND ID = ?";
		// 一定要用数组
		Object[] params = new Object[] { dataFrom, id};  
		return jdbcTemplate.queryForList(sql,params,Long.class);
	}

1.1 查询 不带查询参数  并返回基本类型 (单个返回不要使用 queryForObject)

public List<String> qryEventList() {
		String sql = "SELECT distinct [eventID] FROM [dbo].[was_schedule] where eventID is not null";
		return jdbcTemplate.queryForList(sql, String.class);
}

1.2 sqlserver 动态条件查询----- 常用

String sql = "select * from(select row_number()over(order by cpsh.ID desc) as Row,"
				+ " cpsh.ID,SurveryDate,store_nbr,acct_dept,item_nbr,[desc],Size,StorePriceTax,StoreCostTax,CompetitorPriceTax,Competitor,"
				+ "PromPriceWM,PromPriceComp,CompPriceWM,cpsh.data_from,competitorGrossRate,icps.create_time as InsertTime,icps.status AS icpsStatus,icps.comment AS icpsComment,icps.type,compExpirationDate "
				+ "FROM competition_price_store_history AS cpsh INNER JOIN item_change_price_status AS icps on cpsh.ID =icps.competition_price_store_history_id and cpsh.data_from =icps.data_from "
				+ "where 1 = 1 ";
		sqlbBuilder.append(sql);
				if (!StringUtils.isEmpty(storeNbr) ) {
					sqlbBuilder.append(" and cpsh.store_nbr=? ");
					arrayList.add(storeNbr);
				}
				if(!StringUtils.isEmpty(startCreateTime) ) {
					sqlbBuilder.append(" and icps.create_time >=? ");
					arrayList.add(startCreateTime);
				}
				if(!StringUtils.isEmpty(endcreateTime)) {
					sqlbBuilder.append(" and icps.create_time<= ? ");
					arrayList.add(endcreateTime);
				}
				if(!StringUtils.isEmpty(dataFrom)) {
					sqlbBuilder.append(" and cpsh.data_from = ? ");
					arrayList.add(dataFrom);
				}
				if(tempIndex != -1) {
					sqlbBuilder.append(" )as t1  where t1.Row between "+ start +" and "+endIndex);
				}else {
					sqlbBuilder.append(" )as t1 ");
				}
				
				
		String[]  paramsArray = new String[arrayList.size()];	
		paramsArray = arrayList.toArray(paramsArray);
		
		return jdbcTemplate.query(sqlbBuilder.toString(), paramsArray,new RowMapper<ComPriceStoreHistoryDO>() {

			@Override
			public ComPriceStoreHistoryDO mapRow(ResultSet rs, int rowNum) throws SQLException {
				ComPriceStoreHistoryDO compPrice = new ComPriceStoreHistoryDO();
				bindCompPriceStoreHistory(rs, compPrice);				
				return compPrice;
			}
		});

2、查询 带查询参数  并返回自定义类型

使用这个方法:

@Override
    public <T> List<T> query(String sql, RowMapper<T> rowMapper) throws DataAccessException {
        return query(sql, new RowMapperResultSetExtractor<T>(rowMapper));
    }

例如: (如果参数 不想拼接可以使用  query(String sql, Object[] args, RowMapper<T> rowMapper))

public List<CompPriceStore> qryCompPriceReport(String date,String storeNbr) {
		
		String sql = " SELECT * FROM CompPriceStore s left join (select club,item_nbr,max(event_expiration_date) event_expiration_date from [dbo].[was_schedule] where '"+date+"' <=event_expiration_date group by club,item_nbr) h "+
					"   on (s.store_nbr=h.club or h.club='All Club') and s.item_nbr=h.item_nbr "+
					"	where h.item_nbr is null";
		if(!storeNbr.isEmpty()) {
			sql = sql + " and (s.store_nbr='" + storeNbr + "' or s.store_nbr='All Club')";
		}
			return jdbcTemplate.query(sql, new RowMapper<CompPriceStore>() {

			@Override
			public CompPriceStore mapRow(ResultSet rs, int rowNum) throws SQLException {
				CompPriceStore compPrice = new CompPriceStore();
				bindCompPriceStore(rs, compPrice);				
				return compPrice;
			}
		});
}

3、queryForMap

       //queryForMap(String sql) ==> Map<String, Object>
        Map<String, Object> score_map = template.queryForMap("select * from t_score where id=1");
        System.out.println(score_map);//{id=1, sid=20181515114, chinese=54, math=54, english=96}


        //queryForMap(String sql,Object... args);
        Map<String, Object> score_map2 = template.queryForMap("select * from t_score where id=?", 1);
        System.out.println(score_map2);//{id=1, sid=20181515114, chinese=54, math=54, english=96}


        //queryForMap(String sql ,Object[] args,int[] argTypes) ==> Map<String, Object>
        Object[] args = new Object[]{1};
        int[] argsType = new int[]{Types.INTEGER};
        Map<String, Object> score_map3 = template.queryForMap("select * from t_score where id=?", args, argsType);
        System.out.println(score_map3);//{id=1, sid=20181515114, chinese=54, math=54, english=96}

3.1 queryForList

//queryForList(String sql,Object... args)  ==>  List<Map<String, Object>>
        List<Map<String, Object>> maps = template.queryForList("select * from t_score where english>=?", 80);
        for (Map<String, Object> m : maps) System.out.println(m);
        //输出
        {id=1, sid=20181515114, chinese=54, math=54, english=96}
        {id=2, sid=20181515101, chinese=55, math=80, english=99}
        {id=7, sid=20181515103, chinese=50, math=20, english=88}

3.2 queryForRowSet

       //queryForRowSet(String sql); ==> SqlRowSet == ResultSet
        SqlRowSet sqlRowSet = template.queryForRowSet("select * from t_score");
        //sqlRowSet == ResultSet
        if(sqlRowSet.isFirst())sqlRowSet.previous();
        while (sqlRowSet.next()){
            System.out.println("id:"+sqlRowSet.getInt(1));
            //todo
        }


//         使用方式同上
        template.queryForRowSet(String sql, Object...args);
        template.queryForRowSet(String sql,Object[] args,int[] argTypes);

插入:

1、单个对象:插入 并且可以获取 自增id

@Resource(name = "jdbcTemplate")
 private JdbcTemplate jdbcTemplate;

public int insertDataToBatch(BatchDO batchDO) {
		// 这个 注入会报错
		NamedParameterJdbcTemplate nameJdbc = new NamedParameterJdbcTemplate(jdbcTemplate);
		KeyHolder holder = new GeneratedKeyHolder();
		String sql = "INSERT INTO [dbo].[batch]([send_mail_status],[create_time],[operation_user],[type]) VALUES(:sendMailStatus,getdate(),:operationUser,:type)";
		SqlParameterSource parameters = new MapSqlParameterSource()
		.addValue("sendMailStatus", batchDO.getSendMailStatus())
			.addValue("operationUser", batchDO.getOperationUser())
			.addValue("type", batchDO.getType());
		nameJdbc.update(sql,parameters,holder);
		batchDO.setId(holder.getKey().intValue());
		// 获取id 
		return batchDO.getId();
} 

1.2、单个对象: 插入数据

public void addCurrSchedule(String eventID, int club, int itemNbr, BigDecimal itemPrice,
			Date effectiveDate, Date swfEffectiveDate,Date eventEffectiveDate,  String lastOpuser) {
		String sql = "INSERT INTO was_schedule(eventID,club,item_nbr,item_price,effective_date,swf_effective_date,event_expiration_date,last_opuser,ctime) VALUES(?,?,?,?,?,?,?,?,getdate())";
		jdbcTemplate.update(sql, new PreparedStatementSetter() {

			@Override
			public void setValues(PreparedStatement ps) throws SQLException, DataAccessException {
				ps.setString(1, eventID);
				ps.setInt(2, club);
				ps.setInt(3, itemNbr);
				ps.setBigDecimal(4, itemPrice);
				// 预警字段
				ps.setDate(5, new java.sql.Date(effectiveDate.getTime()));
				// 生效字段
				ps.setDate(6, new java.sql.Date(swfEffectiveDate.getTime()));
				// 结束字段
				ps.setDate(7, new java.sql.Date(eventEffectiveDate.getTime()));
				ps.setString(8, lastOpuser);
			}
		});
}

1.3、单个插入也可以使用: update(String sql, Object... args)

public int addData(String key1,String key2) {
		String sql = "INSERT INTO [dbo].[userRole]([role1],[user1]) VALUES(?,?)";
		Object args[] = {key1,key2};
		return jdbcTemplate.update(sql,args);
		
}

1.4、批量 :List<Map<String, Object>> list 插入数据

  

/**
	  * 批量
	 * @param keyName
	 * @return
	 */
	public void bathcInsert(String key1,List<Map<String,Object>> key2) {
		String sql = "INSERT INTO [dbo].[new_system_config]([key_name],[key_value]) VALUES(?,?)";
		BatchPreparedStatementSetter batchPreparedStatementSetter = new BatchPreparedStatementSetter() {
			@Override
			public void setValues(PreparedStatement ps, int index) throws SQLException {
				Map<String,Object> temp= key2.get(index);	
				ps.setObject(1, key1);
				ps.setObject(2, temp.get("key"));
			}
			@Override
			public int getBatchSize() {
				return keyValueList.size();
			}
		};
		jdbcTemplate.batchUpdate(sql, batchPreparedStatementSetter);
	}

1.5、批量: List<对象> list 插入数据

public void addBatchCurrSchedule(List<WasSchedule> list, String lastOpUser) {
		String sql = "INSERT INTO was_schedule_upload(eventID,club,item_nbr,item_price,effective_date,swf_effective_date,event_expiration_date,last_opuser,ctime) VALUES(?,?,?,?,?,?,?,?,getdate())";
		BatchPreparedStatementSetter batchPreparedStatementSetter = new BatchPreparedStatementSetter() {
			@Override
			public void setValues(PreparedStatement ps, int index) throws SQLException {
				WasSchedule wasSchedule = list.get(index);
				ps.setString(1, wasSchedule.getEventID());
				ps.setString(2, wasSchedule.getClub());
				ps.setInt(3, wasSchedule.getItem_nbr());
				ps.setBigDecimal(4, wasSchedule.getItem_price());
				ps.setDate(5, new java.sql.Date(wasSchedule.getEffective_date().getTime()));
				ps.setDate(6, new java.sql.Date(wasSchedule.getSwf_effective_date().getTime()));
				ps.setDate(7, new java.sql.Date(wasSchedule.getEvent_expiration_date().getTime()));
				ps.setString(8, lastOpUser);
			}

			@Override
			public int getBatchSize() {
				return list.size();
			}
		};
		jdbcTemplate.batchUpdate(sql, batchPreparedStatementSetter);
}

更新:

1.0、单个对象修改:(4 种方式)

  @Autowired
  private JdbcTemplate jdbcTemplate;  
  
  @Transactional(rollbackFor=Exception.class)
    public void updateManegerSub(UpdateManagerParam updateManagerParam){
 
        StringBuffer sql = new StringBuffer("UPDATE pub_user SET account = ? ,phone = ? ,email = ? ," +
                "update_date = NOW() ,user_name = ? " );
 
        if (StringUtils.isNotEmpty(updateManagerParam.getPassword())){
            sql.append(" ,password = '" + updateManagerParam.getPassword() +"'");
        }
        sql.append("WHERE user_id = ? AND del_flag = ?");
 
        //方法一,将sql语句中的参数全部按照密码字段一样拼接好之后,直接调用此方法
        jdbcTemplate.update(sql.toString());
        
        //方法二 使用占位符 多参数依次入参
        jdbcTemplate.update(sql.toString() ,
                updateManagerParam.getAccount(),updateManagerParam.getPhone(),updateManagerParam.getEmail(),
                updateManagerParam.getUserName(),
                updateManagerParam.getUserId(),UserEntity.DEL_FLAG_NORMAL);
 
        //方法三 实现回调接口PreparedStatementSetter 重写里面的方法
        jdbcTemplate.update(sql.toString(), new PreparedStatementSetter() {
            @Override
            public void setValues(PreparedStatement ps) throws SQLException {
                ps.setString(1,updateManagerParam.getAccount());
                ps.setString(2,updateManagerParam.getPhone());
                ps.setString(3,updateManagerParam.getEmail());
                ps.setString(4,updateManagerParam.getUserName());
                ps.setLong(5,updateManagerParam.getUserId());
                ps.setString(6,UserEntity.DEL_FLAG_NORMAL);
            }
        });
 
        //方法四 添加了第两个参数数组,用于显式的指定每个占位符所对应的字段数据类型
        jdbcTemplate.update(sql.toString(),
                new Object[]{updateManagerParam.getAccount(),updateManagerParam.getPhone(),updateManagerParam.getEmail(),updateManagerParam.getUserName(),updateManagerParam.getUserId(),UserEntity.DEL_FLAG_NORMAL},
                new int[]{Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.BIGINT,Types.VARCHAR,}
                );
 
    }

  

2、JdbcTemplate 常用的使用方法 参考博客

https://blog.youkuaiyun.com/qq_43058685/article/details/104370689?utm_medium=distribute.pc_relevant.none-task-blog-title-11&spm=1001.2101.3001.4242

JDBC——Spring JDBCTemplate的使用 SpringJDBC JDBCTemplate 使用JDBCTemplate练习 SpringJDBC Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发. 目的: 简化JDBC编程 JdbcTemplate 跳转到目录 使用步骤: 导入jar包 创建JdbcTemplate对象,依赖于DataSource JdbcTemplate te... 阅读详情

相关推荐

手把手教你用Payload Dumper工具,把官方卡刷包变成线刷包救砖(附Fastbootd进入方法)

本文详细介绍了如何使用Payload Dumper工具将官方卡刷包转换为线刷包进行救砖操作。通过提取payload.bin文件中的分区镜像,并利用fastbootd模式完成刷写,帮助用户解决安卓设备系统故障问题。文章包含环境搭建、工具使用、常见问题解决方案等实用内容,适合需要刷机救砖的用户参考。

weixin_42639246的博客 616

使用spring的JdbcTemplate操作数据库

场景: 使用spring的JdbcTemplate操作数据库 1.建表语句,本例是Mysql数据库 CREATE TABLE `t_city` ( `CITY_NAME` VARCHAR(64) COLLATE utf8_bin NOT NULL COMMENT '城市名', `LAND_AREA` DOUBLE DEFAULT NULL COMMENT '城市面积', `POPU...

zhangbeizhen18的博客 580

2025海外代理IP深度横评:Bright Data、IPFoxy、SmartProxy等六大服务商实战对比

本文深度横评2025年六大海外代理IP服务商(Bright Data、IPFoxy、SmartProxy、IPIPGO、Kookeey及青果网络),基于实战测试数据,从IP池质量、速度稳定性、性价比等维度进行对比。针对跨境电商、数据爬虫、社交媒体管理等不同业务场景,提供精准的选购指南与避坑建议,帮助企业用户根据自身需求选择最合适的代理IP解决方案。

weixin_29196891的博客 434

spring的jdbcTemplate.batchUpdate的几种情况

在我做批量插入的过程中,由于数据库做了唯一约束,所以有些重复数据会出错,在我的设想中,除出错的数据,其它数据应该是都会插入的,但事实不是; 1,batchUpdate(String[] sqls) 这种的sql在于多样化,可以是各种混合sql,在操作时,会一部分一部分的发送到数据库去执行,中途有某条sql报错时,后面的sql则不会执行,之前的sql则全部会执行提交,可在数据库看到变化; 暂时没找...

ccy的博客 1万+

数学建模:相关性分析学习——皮尔逊(pearson)相关系数与斯皮尔曼(spearman)相关系数

相关性分析:求解相关系数并绘制热力图进行对比

weixin_67565775的博客 8万+

Java写一条吃满屏幕的贪吃蛇(A*自动寻路算法和一些简单的策略) 二

上一篇文章介绍了一条贪吃蛇的简单实现,这一篇介绍贪吃蛇的自动寻路算法 ,说是自动寻路其实也就是一种遍历地图的算法,如果玩过游戏肯定知道游戏里面一般会有自动寻路功能,贪吃蛇的自动寻路算法也就是实现这个功能。下面慢慢介绍这种算法吧。    最开始,我没有在网上找资料的时候,我对于设计寻路算法的看法是遍历整个地图,将障碍物做上标记,然后找一条能够到达目的地的线路就可以了。所以最开始我用了特别暴力的方式来...

Sober_yang的博客 3631

JdbcTemplate实现CRUD操作

简介 使用DBUtils工具类实现CRUD操作,释放资源关闭连接等操作还是要自...

成长,编程,生活 1082

告别硬件!用Wokwi在线模拟ESP32点灯,5分钟搞定开发环境搭建

本文介绍如何使用Wokwi在线模拟器快速搭建ESP32开发环境,5分钟内完成点灯实验。无需硬件即可体验GPIO控制、PWM调光等核心功能,特别适合物联网开发初学者和快速原型验证。Wokwi的零成本、全功能模拟特性让嵌入式开发变得前所未有的简单高效。

weixin_42567497的博客 493

Spring JdbcTemplate.batchUpdate()

在此页面上,我们将学习使用Spring JdbcTemplate.batchUpdate()方法。batchUpdate()方法使用批处理发出多个 SQL。batchUpdate()接受参数如下。使用批处理在单个 JDBC 语句上发出多个 SQL 更新。如果 JDBC 驱动程序不支持批处理更新,则该方法将回退到单个语句上的单独更新。使用批量更新和设置值在单个PreparedStatement上发出多个更新语句。

allway2的博客 1万+

MOS管热阻的测量方法

实验室内如何测试mos管热阻

weixin_43492562的博客 4090

WRFDA如何读取风云四号A 星的GIIRS数据?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1025

jdbcTemplate 查询数据库字段名称,类型方法

jdbcTemplate 操作方法 [code="java"] /** *1.方法一: */ String sql = "select * from "+ tableName; //RowCountCallbackHandler rcch = new RowCountCallbackHandler(); //this.jdbcTemplateDao.query(sql, rcch);...

nowdown的博客 2847

YOLOv13改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU)

本文记录的是改进YOLOv13的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 870

Jdbctemplate 所需Jar包以及入门程序样例

query(sqlStr, RowMapper对象, 参数列表):查询多行数据,并将结果集封装为元素是 JavaBean 的 list。List<Map<String, Object>> queryForList(sqlStr, 参数列表):将查询结果集封装为 list 集合,该集合的每一条元素都是一个 map。(4)query() 方法及 queryForXXX() 方法:用于执行查询相关语句,查询结果为基本数据类型或者是单个对象一般使用 queryForObject()//4、执行修改语句。

2302_78189686的博客 1922

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【免费下载】 Spring JDBC与JdbcTemplate相关Jar包下载资源

Spring JDBC与JdbcTemplate相关Jar包下载资源 去发现同类优质开源项目:https://gitcode.com/ 欢迎使用Spring框架与JdbcTemplate的配套资源库!本存储库专为需要快速集成Spring框架及其JDBC模块的开发者准备。JdbcTemplate是Spring中简化数据库操作的强大工具,它极大地减少了手动处理JDBC的复杂度,使得数据库访问更加简洁和...

gitblog_06554的博客 844

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Spring简述三——Spring和JDBCTemplate的整合&& Spring和Mybatis的整合使用

其他Spring相关文章 Spring简述一 Spring简述二 Spring提供了JavaEE的一整套解决方案(展示层 业务层 dao层) jdbCTemplate是dao层的解决方案,mybatis也是dao层的解决方案 Spring中JDBCTemplate的使用: 创建数据源(实现datasource的接口) 创建JDBCTemplate对象通过数据源来实例化 JDBCTemplate的使...

weixin_44836685的博客 2847

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Spring JDBC 的使用

文章目录一、基本概念二、简单示例三、练习示例 一、基本概念 Spring框架对JDBC的简单封装,提供了一个 JDBCTemplate 对象简化JDBC的开发 步骤: (1)导入jar包 (2)创建JdbcTemplate对象,依赖于数据源DataSource * JdbcTemplate template = new JdbcTemplate(ds); (3)调用JdbcTemplate...

南淮北安的博客 433

2020.7.26(2)Spring JDBC里的JDBCTemplate

Spring JDBC里的JDBCTemplate 即便已经使用工具类了,但是仍然麻烦,所以学习JDBC简化封装的工具类。Spring框架提供的JDBC简单封装,以后web学习完之后会重点讲,今天大概看看。他提供的JDBCTemplate对象简化JDBC的开发 步骤: 1、导入jar包。 2、创建JDBCTemplate对象。依赖于数据源DataSource *JdbcTemplate template=new JdbcTemple(ds); 3、调用对象方法来完成CRUD的操作 update():执行增删

feimeng4s的博客 377

Spring——JDBCTemplate介绍

Spring JDBC Spring对JDBC简单封装。提供了一个JDBCTemplate对象简化JDBC的开发 步骤: ——1.导入jar包。 ——2.创建JDBCTemplate对象。依赖于数据源。 ————JDBCTemplate template = new JDBCTemplate(DataSource); ——3.调用JDBCTemplate的方法来完成CRUD操作 ————upda...

weixin_45098998的博客 221

Spring JDBC

Spring JDBC 1.概述 1.1 介绍 Spring框架对JDBC的简单封装。提供一个JDBCTemplate对象来简化JDBC开发 1.2 相关jar包 spring-beans-5.0.0.RELEASE.jar spring-core-5.0.0.RELEASE.jar spring-jdbc-5.0.0.RELEASE.jar spring-tx-5.0.0.RELEASE.jar 相关jar包下载:https://blog.csdn.net/qq_41821963/article/deta

qq_53529114的博客 278

04Spring jdbc和事务控制

1、Spring JDBC Spring JDBC模块负责数据库资源管理和错误处理,大大简化了开发人员对数据库的操作,使得开发人员可以从繁琐的数据库操作中解脱出来,从而将更多的精力投入编写业务逻辑中。 1.1、Spring JdbcTemplate的解析 针对数据库的操作,Spring框架提供了JdbcTemplate类,该类是Spring框架数据抽象层的基础,使其他更高层次的抽象类是构建Jd...

ZHOUJIAN_TANK的博客 478

Spring 05 JdbcTemplate

Spring 05 JdbcTemplate

loetca 560

Spring使用JdbcTemplate操作数据库附源码解释

目录 1.JdbcTemplate概述 2.JdbcTemplate准备工作 引入相关 jar 包 如果是maven项目,使用pom.xml代替引入jar包的过程(注意) 配置xml配置文件 3.JdbcTemplate 操作数据库 准备好数据库uset_db创建一个t_user表 对应数据库创建User实体类 创建UserDao接口并创建UserDaoImpl类 创建UserService类并在其中注入UserDao 编写测试类进行测试 4.JdbcTemplate源码解释 jdbc

Javaesandyou的博客 1629

Spring JDBC 及 JDBC学习的总结

Spring框架 对JDBC的简单封装,提供了一个JDBCTemplate对象简化JDBC的开发。 步骤 1,导入jar包 Spring Jdbc , Spring Transaction ,Spring core ,Spring beans , logging 2,创建JdbcTemplate对象。依赖于数据源DataSource JdbcTemplate template =new Jd...

weixin_45371966的博客 302

JdbcTemplate方法详解(超详细)

概念 这是Spring对JDBC的简单封装,提供了一个JDBCTemplate对象简化JDBC的开发 步骤 (1)导入jar包 *commons-logging-1.2.jar *spring-beans-5.1.10.RELEASE.jar *spring-core-5.1.10.RELEASE.jar *spring-jdbc-5.1.10.RELEASE.jar *spring-tx-5.1.10.RELEASE.jar (2)创建JdbcTemplate对象 JdbcTemplate templ

xiaopan 2656

使用Java连接mysql数据库并使用JDBCTemplate对象简化JDBC的开发

需要用到的技术: (Properties配置文件+Druid数据库连接池+Spring框架) 1、先导入所需的jar包:mysql驱动+druid连接池+JdbcTemplate 注意: 导入的jar包需放置与src目录同级的libs目录中 2、定义配置文件: druid.properties # 注册驱动 driverClassName=com.mysql.jdbc.Driver # 指定连接的路径 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称 url=jdbc:mysql://

weixin_44949150的博客 345
上一篇: 非社区版 IntelliJ IDEA 创建Web项目二(全教程)
下一篇: mysql---Mysql创建数据库字符集的选择
dingding_java
博客等级 码龄9年 2粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值