3.15下(Spring中的jdpcTemplate操作)

2023-11-21 19:32

本文主要是介绍3.15下(Spring中的jdpcTemplate操作),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(1)jdbcTemplate的获取方式

  (2)  jdbcTemplate在DDL和DML中的操作

(3)jdbcTemplate对查询语句的封装(3.16)

一:Spring中操作数据库
A:直接通过DataSource获取Connection来操作。
B:直接使用jdbcTemplate来操作。
C:注入jdbcTemplate来操作
D:继承JdbcdaoSupport来操作
二、jdbcTemplate的基本操作
   A:执行DDL
jdbcTemplate.execute();
   B:执行DML
执行简单语句
jdbcTemplate.update();
执行预编译语句
静态的SQL的预编译
A:使用PreparedStatementSetter
B:PreparedStatementCreator
C:使用object数组的方式
动态的SQL的预编译
NameParametedjdbcTemplate这个类。
参数的设置:
A:使用Map的方式
B:使用SqlParameterDataSource的方式。
SQLParameterDataSrouce的两个实现类:
MapSqlParameterSource();
BeanPropertySqlParameterSource();
执行查询语句:
A:查询所有列表:queryforList();
List中的数据是Map,Map中对应的键都是大写。
需要加入Commons-Colleciton.jar包来解决Map中的大小写问题。
B:查询单条记录:queryForMap
C:执行聚合函数:queryForInt/ForLong
D:返回一个对象。queryForObject
E:行的映射:query(sql,rowMapped);
作用:将行的默认的Map类型映射成程序所需要的类型(Bean)。
F:行的映射:直接使用BeanPropertyRowMapper做映射
前提条件:字段名称必须和属性名称一致。
Map
BeanPropertyRowMapper
自定义的RowMapper.

1、jdbcTemplate的获取方式有以下几种:

工具类:SpringUtil.java

package com.util;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringUtil {private static ApplicationContext context;static {context = new ClassPathXmlApplicationContext("spring.xml");}public static Object getBean(String beanName) {Object obj = null;if (beanName != null && !beanName.equals("")) {obj = context.getBean(beanName);}return obj;}
}

A:获取DataSource通过IOC的方式 TestMain_1.java

package com.jdbc;import java.sql.Connection;
import java.sql.SQLException;import javax.sql.DataSource;import com.util.SpringUtil;public class TestMain_1 {public static void main(String[] args) {DataSource dataSource = (DataSource) SpringUtil.getBean("dataSource");System.out.println(dataSource);Connection conn = null;try {conn = dataSource.getConnection();} catch (SQLException e) {e.printStackTrace();}System.out.println(conn);}
}

B:通过依赖注入中的属性注入方式获得DataSource  TestMain_2.java

package com.jdbc;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;import javax.sql.DataSource;import com.util.SpringUtil;public class TestMain_2 {private DataSource dataSource;public void setDataSource(DataSource dataSource) {this.dataSource = dataSource;}public void list() {Connection conn = null;Statement stmt = null;ResultSet rs = null;try {conn = this.dataSource.getConnection();stmt = conn.createStatement();rs = stmt.executeQuery("Select * From T_Dept order by deptid ");while (rs.next()) {System.out.println(rs.getInt("deptid") + "\t"+ rs.getString("deptname"));}} catch (Exception e) {e.printStackTrace();} finally {/*** 关闭资源*/}}public static void main(String[] args) {TestMain_2 testMain_2 = (TestMain_2) SpringUtil.getBean("testMain_2");testMain_2.list();}
}

C:使用jdbcTemplate对象 属性注入DataSource TestMain_3.java

package com.jdbc;import java.util.List;
import java.util.Map;import javax.sql.DataSource;import org.springframework.jdbc.core.JdbcTemplate;import com.util.SpringUtil;public class TestMain_3 {private DataSource dataSource;public void setDataSource(DataSource dataSource) {this.dataSource = dataSource;}public void list() {/*** 使用jdbcTemplate对象*/JdbcTemplate template = new JdbcTemplate(this.dataSource);String sql = "Select * From T_Dept order by deptid asc";List<Map<String, Object>> deptList = template.queryForList(sql);for (Map<String, Object> rowMap : deptList) {System.out.println(rowMap);}}public static void main(String[] args) {TestMain_3 testMain_3 = (TestMain_3) SpringUtil.getBean("testMain_3");testMain_3.list();}
}

D:使用JdbcTemplate和属性注入JdbcTemplate TestMain_4.java

package com.jdbc;import java.util.List;
import java.util.Map;import org.springframework.jdbc.core.JdbcTemplate;import com.util.SpringUtil;public class TestMain_4 {private JdbcTemplate template;public void setTemplate(JdbcTemplate template) {this.template = template;}public void list() {String sql = "Select * From T_Dept order by deptid asc";List<Map<String, Object>> deptList = this.template.queryForList(sql);for (Map<String, Object> rowMap : deptList) {System.out.println(rowMap);}}public static void main(String[] args) {TestMain_4 testMain_4 = (TestMain_4) SpringUtil.getBean("testMain_4");testMain_4.list();}
}

E:使用JdbcTemplate通过继承JdbcDaoSupport的方式,可以注入JdbcTemplate或者DataSource   TestMain_5.java

package com.jdbc;import java.util.List;
import java.util.Map;import org.springframework.jdbc.core.support.JdbcDaoSupport;import com.util.SpringUtil;public class TestMain_5 extends JdbcDaoSupport {public void list() {String sql = "Select * From T_Dept order by deptid asc";List<Map<String, Object>> deptList = this.getJdbcTemplate().queryForList(sql);for (Map<String, Object> rowMap : deptList) {System.out.println(rowMap);}}public static void main(String[] args) {TestMain_5 testMain_5 = (TestMain_5) SpringUtil.getBean("testMain_5");testMain_5.list();}
}

2、JdbcTemplate在DDL中的使用 TestDDL.java

package com.jdbc;import java.util.List;
import java.util.Map;import org.springframework.jdbc.core.support.JdbcDaoSupport;import com.util.SpringUtil;/*** 执行DDL语句,调用execute方法,不需要有返回值。* * */
public class TestDDL extends JdbcDaoSupport {public void create() {StringBuffer createSQL = new StringBuffer();createSQL.append("create table T_Temp_XX(id int,testname varchar(30))");this.getJdbcTemplate().execute(createSQL.toString());}public void alter() {StringBuffer createSQL = new StringBuffer();createSQL.append("alter table T_Temp_XX add temp_pwd varchar(20)");this.getJdbcTemplate().execute(createSQL.toString());}public void drop() {StringBuffer createSQL = new StringBuffer();createSQL.append("drop table T_Temp_XX");this.getJdbcTemplate().execute(createSQL.toString());}public static void main(String[] args) {TestDDL testDDL = (TestDDL) SpringUtil.getBean("testDDL");// testDDL.create();// testDDL.alter();testDDL.drop();}
}

3、JdbcTemplate在DML中的使用 TestDML.java

package com.jdbc;import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.support.JdbcDaoSupport;import com.util.SpringUtil;/*** 执行DML语句。要返回语句所影响的行数* * */
public class TestDML extends JdbcDaoSupport {/*** Statement的写法*/public void insert() {int deptid = 1;String deptname = "部门1";String remark = "备注";StringBuffer insertSQL = new StringBuffer();insertSQL.append("Insert Into T_Dept(");insertSQL.append("deptid,deptname");insertSQL.append(",remark");insertSQL.append(") values(");insertSQL.append("" + deptid + ",");insertSQL.append("'" + deptname + "',");insertSQL.append("'" + remark + "'");insertSQL.append("");insertSQL.append(")");int rowCount = this.getJdbcTemplate().update(insertSQL.toString());System.out.println("rowCount所影响的行数 = " + rowCount);}/*** PreparedStatement的写法*/public void update() {StringBuffer updateSQL = new StringBuffer();updateSQL.append("update T_Dept set");updateSQL.append(" deptname = ?,");updateSQL.append(" remark = ?");updateSQL.append(" where deptid = ?");updateSQL.append("");JdbcTemplate template = this.getJdbcTemplate();int rowCount = template.update(updateSQL.toString(),new PreparedStatementSetter() {@Overridepublic void setValues(PreparedStatement ps)throws SQLException {ps.setString(1, "部门名称_更改");ps.setString(2, "备注更改");ps.setInt(3, 1);}});System.out.println("rowCount所影响的行数 = " + rowCount);}/*** PreparedStatement的写法*/public void delete() {StringBuffer deleteSQL = new StringBuffer();deleteSQL.append("Delete From T_Dept");deleteSQL.append(" where deptid = ?");/*** 对象数组,数组中第一个元素对应SQL语句中的第一个参数的问号。*/Object[] objArray = { 1 };int rowCount = this.getJdbcTemplate().update(deleteSQL.toString(),objArray);System.out.println("rowCount所影响的行数 = " + rowCount);}public static void main(String[] args) {TestDML testDML = (TestDML) SpringUtil.getBean("testDML");// testDML.insert();//testDML.update();testDML.delete();}
}

4、jdbcTemplate中的命名参数的使用   TestNamedParam.java

package com.jdbc;import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.support.JdbcDaoSupport;import com.bean.DeptBean;
import com.util.SpringUtil;/*** jdbcTemplate中的命名参数* * */
public class TestNamedParam extends NamedParameterJdbcDaoSupport {/*** Statement的写法*/public void insert(boolean flag_1, boolean flag_2) {NamedParameterJdbcTemplate template = this.getNamedParameterJdbcTemplate();int deptid = 1;String deptname = "部门1";String remark = "备注";StringBuffer insertSQL = new StringBuffer();insertSQL.append("Insert Into T_Dept(deptid");if (flag_1) {insertSQL.append(",deptname");}if (flag_2 == true) {insertSQL.append(",remark");}insertSQL.append(") values(");insertSQL.append(":deptid");if (flag_1 == true) {insertSQL.append(",:deptname");}if (flag_2 == true) {insertSQL.append(",:remark");}insertSQL.append(")");/*** Map的规则 Map中Key == 命名参数的名称*/Map<String, Object> parmaMap = new HashMap<String, Object>();parmaMap.put("deptid", deptid);parmaMap.put("deptname", deptname);parmaMap.put("remark", remark);int rowCount = template.update(insertSQL.toString(), parmaMap);System.out.println(rowCount);}/*** PreparedStatement的写法*/public void update() {StringBuffer updateSQL = new StringBuffer();updateSQL.append("update T_Dept set");updateSQL.append(" deptname = :deptname,");updateSQL.append(" remark = :remark");updateSQL.append(" where deptid = :deptid");updateSQL.append("");NamedParameterJdbcTemplate template = this.getNamedParameterJdbcTemplate();// SqlParameterSource--->BeanPropertySqlParameterSource// BeanPropertySqlParameterSource的规则:Bean中的成员变量的名称与命名参数的名称要一致。DeptBean deptBean = new DeptBean();deptBean.setDeptid(1);deptBean.setDeptname("更改");deptBean.setRemark("xxxxx");BeanPropertySqlParameterSource paramSource = new BeanPropertySqlParameterSource(deptBean);template.update(updateSQL.toString(), paramSource);}public static void main(String[] args) {TestNamedParam testNamedParam = (TestNamedParam) SpringUtil.getBean("testNamedParam");// testNamedParam.insert(true, false);testNamedParam.update();}
}

5、jdbctemplate对于查询语句的封装

    jdbctemplate对于查询语句的封装比较复杂,没有DBUtil对JDBC的查询语句的封装好用,

    所以查询操作的话还是推荐使用DBUtil里的查询操作。

    此讲解接到3.16节

这篇关于3.15下(Spring中的jdpcTemplate操作)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/404586

相关文章

Spring实现Bean的初始化和销毁的方式

《Spring实现Bean的初始化和销毁的方式》:本文主要介绍Spring实现Bean的初始化和销毁的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Bean的初始化二、Bean的销毁总结在前面的章节当中介绍完毕了ApplicationContext,也就

Java的"伪泛型"变"真泛型"后对性能的影响

《Java的伪泛型变真泛型后对性能的影响》泛型擦除本质上就是擦除与泛型相关的一切信息,例如参数化类型、类型变量等,Javac还将在需要时进行类型检查及强制类型转换,甚至在必要时会合成桥方法,这篇文章主... 目录1、真假泛型2、性能影响泛型存在于Java源代码中,在编译为字节码文件之前都会进行泛型擦除(ty

Java中的getBytes()方法使用详解

《Java中的getBytes()方法使用详解》:本文主要介绍Java中getBytes()方法使用的相关资料,getBytes()方法有多个重载形式,可以根据需要指定字符集来进行转换,文中通过代... 目录前言一、常见重载形式二、示例代码三、getBytes(Charset charset)和getByt

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

《idea报错java:非法字符:‘ufeff‘的解决步骤以及说明》:本文主要介绍idea报错java:非法字符:ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现uf... 目录BOM是什么?1. BOM的作用2. 为什么会出现 \ufeff 错误?3. 如何解决 \ufeff 问题?最

使用Java编写一个字符脱敏工具类

《使用Java编写一个字符脱敏工具类》这篇文章主要为大家详细介绍了如何使用Java编写一个字符脱敏工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、字符脱敏工具类2、测试工具类3、测试结果1、字符脱敏工具类import lombok.extern.slf4j.Slf4j

Java实现按字节长度截取字符串

《Java实现按字节长度截取字符串》在Java中,由于字符串可能包含多字节字符,直接按字节长度截取可能会导致乱码或截取不准确的问题,下面我们就来看看几种按字节长度截取字符串的方法吧... 目录方法一:使用String的getBytes方法方法二:指定字符编码处理方法三:更精确的字符编码处理使用示例注意事项方

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约