实验1:测试数据源
@Test
public void test() throws SQLException {
ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource bean = ioc.getBean(DataSource.class);
System.out.println(bean.getConnection());
}

实验2:将emp_id=5的记录的salary字段更新为1300.00【更新操作】
public class TestDataSource {
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
private JdbcTemplate template=ioc.getBean(JdbcTemplate.class);

@Test
public void test01(){
//实验2:将emp_id=5的记录的salary字段更新为1300.00
String sql = "UPDATE employee SET salary = ? WHERE emp_id = ?";
template.update(sql, 1300,5);//第一个是sql语句,后面的按着顺序传入参数即可,这个update方法是接收的可变参数!
}
}
从上述实验中就可以看到,该操作不用我们自己再去获取数据库连接信息了,而是直接传递sql语句及其参数!

实验3:批量插入
public class TestDataSource {
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
private JdbcTemplate template=ioc.getBean(JdbcTemplate.class);
@Test
public void testBatch(){
String sql="INSERT INTO employee(`emp_name`,`salary`) VALUES(?,?)";
//执行sql语句需要传递的参数
// Object[][] params = new Object[3][2];
// params[0] = new Object[]{"Tom2015",1000};
// params[1] = new Object[]{"Tom2016",2000};
// params[2] = new Object[]{"Tom2017",3000};
//
List<Object[]> list = new ArrayList<Object[]>();
list.add(new Object[]{"Tom2015",1000});
list.add(new Object[]{"Tom2016",2000});
list.add(new Object[]{"Tom2017",3000});

template.batchUpdate(sql, list);
}
}

实验4:查询emp_id=5的数据库记录,封装为一个Java对象返回
分析:封装为一个对象返回的话,首先我们需要有一个与数据表对应的实体类!

public class TestDataSource {
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
private JdbcTemplate template=ioc.getBean(JdbcTemplate.class);

@Test
public void test01(){
//需要注意的是:sql语句中的别名要与对应实体类的属性名保持一致!
String sql = "SELECT emp_id AS empId,emp_name AS empName,salary FROM employee WHERE emp_id=?";

//RowMapper是一个接口,这里我们使用其子类
RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<Employee>(Employee.class);
//最后一个参数是可变参数,用于向sql语句中依次传递参数!
Employee employee = template.queryForObject(sql, rowMapper, 5);
System.out.println(employee);
}
}

实验5:查询salary>4000的数据库记录,封装为List集合返回
public class TestDataSource {
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
private JdbcTemplate template=ioc.getBean(JdbcTemplate.class);

@Test
public void test01(){
//需要注意的是:sql语句中的别名要与对应实体类的属性名保持一致!
String sql = "SELECT emp_id AS empId,emp_name AS empName,salary FROM employee WHERE salary > ?";

//RowMapper是一个接口,这里我们使用其子类
RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<Employee>(Employee.class);
//该query方法查询出来的是一个list列表,query方法的最后一个参数是可变参数!
List<Employee> list = template.query(sql, rowMapper, 4000);

for (Employee employee : list) {
System.out.println(employee);
}
}
}

//从上面可以看出,查询结果是一个实体还是一个list列表是靠template对象的不同方法实现的!

实验6:查询最大salary
public class TestDataSource {
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
private JdbcTemplate template=ioc.getBean(JdbcTemplate.class);

@Test
public void test01(){
String sql = "SELECT MAX(salary) FROM employee";
//需要指定返回值的类型,而且类型必须是包装类型
Double maxSalary = template.queryForObject(sql, Double.class);
System.out.println(maxSalary);
}
}

实验7:使用带有具名参数的SQL语句插入一条员工记录,并以Map形式传入参数值
具名参数:是指基于名称的,前面我们使用的都是用?作为占位符,然后是使用基于位置的!
如果要使用具名参数的sql语句就必须在spring配置文件中配置NamedParameterJdbcTemplat这个模板类,而不能使用
原来的JdbcTemplate,因为JdbcTemplate不能完成这样的任务!

<!-- 加载properties文件中 信息 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置数据源 -->
<bean id="comboPooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.passowrd}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="driverClass" value="${jdbc.driver}"></property>
</bean>

<!-- 配置JdbcTemplate对应的bean, 并装配dataSource数据源属性-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="comboPooledDataSource"></property>
</bean>
<!-- 为了执行带有具名参数的SQL语句,需要配置NamedParameterJdbcTemplate -->
<!-- 该NamedParameterJdbcTemplate类没有无参构造器,需要传入JdbcTemplate对象或者数据源对象[DataSource] -->
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<!-- 不能使用property标签配置哦 -->
<constructor-arg ref="jdbcTemplate"></constructor-arg>
</bean>

public class TestDataSource {
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
private NamedParameterJdbcTemplate namedJdbcTemplate = ioc.getBean(NamedParameterJdbcTemplate.class);

@Test
public void test01(){
String sql="INSERT INTO employee(`emp_name`,`salary`) VALUES(:paramName,:paramSalary)";
Map<String,Object> paramMap = new HashMap<String,Object>();
paramMap.put("paramName","张学友" );
paramMap.put("paramSalary",1000);

namedJdbcTemplate.update(sql, paramMap);
}
}

实验8:重复实验7,以SqlParameterSource形式传入参数值

public class TestDataSource {
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
private NamedParameterJdbcTemplate namedJdbcTemplate = ioc.getBean(NamedParameterJdbcTemplate.class);

@Test
public void test01(){
String sql="INSERT INTO employee(`emp_name`,`salary`) VALUES(:empName,:salary)";
//该BeanPropertySqlParameterSource类构造器需要一个对象参数,该对象参数是一个封装了sql语句参数的对象!
//此时要求对象的属性名要和sql中的参数名保持一致!这里我们使用Employee对象来完成
Employee employee= new Employee(null, "郭富城", 1500);
//以实体对象的形式封装具名参数和值
SqlParameterSource source = new BeanPropertySqlParameterSource(employee);

namedJdbcTemplate.update(sql, source);
}
}

实验9:创建JdbcTemplateDao,自动装配JdbcTemplate对象
1.创建dao类:
@Repository
public class JdbcTemplateDao {
@Autowired
private JdbcTemplate jdbcTemplate;

public void update(String sql,Object ...args){
jdbcTemplate.update(sql, args);
}
}
2.配置spring的配置文件
<!-- 配置扫描的包 -->
<context:component-scan base-package="com.neuedu.dao"></context:component-scan>
<!-- 加载properties文件中 信息 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置数据源 -->
<bean id="comboPooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.passowrd}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="driverClass" value="${jdbc.driver}"></property>
</bean>

<!-- 配置JdbcTemplate对应的bean, 并装配dataSource数据源属性-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="comboPooledDataSource"></property>
</bean>

3.测试该dao
public class TestDataSource {
private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
private NamedParameterJdbcTemplate namedJdbcTemplate = ioc.getBean(NamedParameterJdbcTemplate.class);

@Test
public void test01(){
JdbcTemplateDao dao = ioc.getBean(JdbcTemplateDao.class);
String sql = "INSERT INTO employee(`emp_name`,`salary`) VALUES(?,?)";
dao.update(sql, "比尔盖茨",10000000);

}
}

JdbcTemplate实验的更多相关文章

  1. Spring(一)--作用、IOC容器细节、搭配环境、Spring实验

    1.Spring作用:      1.生态体系庞大,全能型选手![springmvc是其一个子模块,jdbcTemplate能直接操作数据库!]      2.将其他组件粘合在一起      比如将S ...

  2. Spring(四)-- JdbcTemplate、声明式事务

    1.Spring提供的一个操作数据库的技术JdbcTemplate,是对Jdbc的封装.语法风格非常接近DBUtils.   JdbcTemplate可以直接操作数据库,加快效率,而且学这个JdbcT ...

  3. JDBCTemplate

    1.Spring提供的一个操作数据库的技术JdbcTemplate,是对Jdbc的封装.语法风格非常接近DBUtils. JdbcTemplate可以直接操作数据库,加快效率,而且学这个JdbcTem ...

  4. JDBCTemplate执行增删改查(CDUR)操作

    1.JdbcTemplate简介 (1)Spring提供的一个操作数据库的技术JdbcTemplate,是对Jdbc的封装.语法风格非常接近DBUtil. JdbcTemplate可以直接操作数据库, ...

  5. Spring && 实验IOC

    一.Spring作用 1.生态体系庞大,全能型选手![springmvc是其一个子模块,jdbcTemplate能直接操作数据库!]    2.将其他组件粘合在一起    3.IOC容器和AOP[As ...

  6. 170830-关于JdbcTemplate的练习题以及其中的问题

    实验1:测试数据源 在spring文件中配置: 测试数据源: 结果: 实验2:将emp_id=5的记录的salary字段更新为1300.00[更新操作] update函数中,第一个是sql语句,后面的 ...

  7. JdbcTemplate+PageImpl实现多表分页查询

    一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...

  8. [原] 利用 OVS 建立 VxLAN 虚拟网络实验

    OVS 配置 VxLAN HOST A ------------------------------------------ | zh-veth0(10.1.1.1) VM A | | ---|--- ...

  9. Android中Activity的四大启动模式实验简述

    作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握.今天我们就来通过实验演示,来帮助大家理解Activ ...

随机推荐

  1. Jmeter4.0----设置集合点_并发(11)

    1.说明 LR中集合点可以设置多个虚拟用户等待到一个点,同时触发一个事务,以达到模拟真实环境下多个用户同时操作,实现性能测试的最终目的. jmeter中使用Synchronizing Timer实现L ...

  2. Spark Mllib里决策树二元分类使用.areaUnderROC方法计算出以AUC来评估模型的准确率和决策树多元分类使用.precision方法以precision来评估模型的准确率(图文详解)

    不多说,直接上干货! Spark Mllib里决策树二元分类使用.areaUnderROC方法计算出以AUC来评估模型的准确率 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的 ...

  3. Kaggle八门神器(一):竞赛神器之XGBoost介绍

    Xgboost为一个十分有效的机器学习模型,在各种竞赛中均可以看到它的身影,同时Xgboost在工业届也有着广泛的应用,本文以Titanic数据集为研究对象,简单地探究Xgboost模型建模过程,同时 ...

  4. 数据结构之Hyperloglog

    前置知识 调和平均数 通常我们求一堆数的平均数 就是把一堆数加起来除以这堆数的数量,如 x1, x2, x3, x4, .... ,xn的平均数 H = (x1 + x2 + x3 + x4 + xn ...

  5. c# 基础字符串

    ToLower():得到字符串的小写形式.注意字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回.s.ToLower()与s=s.ToLower ...

  6. EF批量插入数据耗时对比

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. Java面向对象(类、封装)

    面向对象 今日内容介绍 u 面向对象 u 封装 第1章 面向对象 1.1 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. l 面向过程的程序设计方式,是遇到一 ...

  8. Kendo MVVM 数据绑定(一) attr

    Kendo MVVM 数据绑定(一) attr Kendo UI MVVM 数据绑定支持的绑定属性有 attr, checked, click, custom , disabled,enabled, ...

  9. 使用 Kendo UI 库实现对象的继承

    使用 Kendo UI 库实现对象的继承 javaScript 也是一种面向对象的开发语言,但和 C++,Java,C# 所不同的是,它的对象不是基于类(Class),而是基于对象原型(ProtoTy ...

  10. VC中包含的头文件名不区分大小写

    VC中包含的头文件名,不区分大小写如 #include "my.h" = #include "MY.H".