本文主要是介绍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操作)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!