Spring的jdbc支持

1配置db.properties,将有关JDBC的信息载入

2bean文件配置数据源,这里用e3p0作为数据源载入db.properties

3配置template的bean 之后,可以直接使用。

JUnit的测试

代码如下

db.proeprties

jdbc.username=root
jdbc.password=s1127736971
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/school
jdbc.iniPoolSize=5
jdbc.maxPoolSize=10
//强烈注意!!!!! 每行空格也要删掉,因为载入的时候会读取空格

bean文件如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <!-- 配置配置文件 -->
<context:property-placeholder location="classpath:db.properties"/> <!-- 配置数据源文件 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="initialPoolSize" value="${jdbc.iniPoolSize}"></property>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
</bean> <!-- 配置template -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean> <context:component-scan base-package="Test"></context:component-scan>
</beans>

java文件如下

package Test;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import javax.sql.DataSource; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper; public class test {
private ApplicationContext ctx= null;
private JdbcTemplate jdbcTemplate=null;
private StudentDao dao;
{
ctx=new ClassPathXmlApplicationContext("SpringJDBC.xml");
jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate");//里面就已经配置了datasource的配置,所以可以更改。
dao=ctx.getBean(StudentDao.class);
} @Test
public void testStudentDao(){
System.out.println(dao.getById(2));
} @Test
public void testQueryForObject(){//用于数据统计类型
String sql = "SELECT COUNT(id) FROM student ";
long count = jdbcTemplate.queryForObject(sql, Long.class);
System.out.println(count); } @Test
public void testQueryForList(){//收集属性集合类型
String sql = "SELECT id,name,age,address FROM student WHERE id>? ";
RowMapper<Student> rowMapper= new BeanPropertyRowMapper<Student>(Student.class);
List<Student> students =jdbcTemplate.query(sql, rowMapper,1);//一个不同的集合语句
System.out.println(students); } /*
* 这里要用BeanPropertyRowMapper,不要在queryForObject里面用另一个,格式如下。
* 1 可以在里面配置类对应的名字,比如 name name 前一个是类属性名字,后一个是database里面名字
* 2 不支持级联属性
* 3 RowMapper 是映射属性行,BeanPropertyRowMapper是其一个实现类
* */
@Test
public void testQueryById(){
String sql = "SELECT id,name,age,address FROM student WHERE id=? ";
RowMapper<Student> rowMapper= new BeanPropertyRowMapper<Student>(Student.class);
Student student =jdbcTemplate.queryForObject(sql, rowMapper,1);
System.out.println(student);
} @Test
public void testUpdateBatch(){
String sql = "INSERT INTO student(id,name,age,address) Values(?,?,?,?)";
List<Object[]> date = new ArrayList<>();
date.add(new Object[]{"5","xiaohong","52","shanghai"});
date.add(new Object[]{"6","xiaobai","22","fujian"});
jdbcTemplate.batchUpdate(sql, date); } @Test//这个更新可以是 UPDATE DELETE INSERT
public void testUpdate (){
String sql = "UPDATE student SET Address = ? where id=?";
jdbcTemplate.update(sql, "beijing",4);
} @Test
public void testDataSource() throws SQLException {//测试 DataSource是否可行
DataSource datasource = (DataSource) ctx.getBean(javax.sql.DataSource.class);//记一个非常不科学的错误,db.properties里面不要有空格,他会把空格也当成命令。
System.out.println(datasource.getConnection());
} }

注,一般用Dao类文件,是将Dao里面添加jdbcTemplate成员属性。而不用另一种extends 的方法,不考虑。

package Test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository; @Repository//自动装配
public class StudentDao { @Autowired
private JdbcTemplate jdbcTemplate; public Student getById(int id){
String sql = "SELECT id,name,age,address FROM student WHERE id=? ";
RowMapper<Student> rowMapper= new BeanPropertyRowMapper<Student>(Student.class);
Student student =jdbcTemplate.queryForObject(sql, rowMapper,id);
return student;
}
}

使用jdbc的具名参数设置

配置NamedParameterJdbcTemplate   Bean文件

xml添加

<!-- 配置带参template -->
<bean id="namedtemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
</bean>

java代码添加测试

@Test//这是利用对象来具名参数,要求Values(:id,:name,:age,:address)和类的名字要一样,mysql的名字要一样。
public void testNamedTemplate2(){
String sql = "INSERT INTO student(id,name,age,address) Values(:id,:name,:age,:address)";
Student student = new Student();
student.setId(11);
student.setAge(4);
student.setName("xiaoxiaobai");
student.setAddress("hong shang lu ");
SqlParameterSource ss = new BeanPropertySqlParameterSource(student);
namedParameterJdbcTemplate.update(sql, ss);
} @Test//利用具名参数来构造template 优点当参数多的时候维护比较容易 不需要按照固定顺序。缺点是相对于estUpdateBatch()比较复杂
public void testNamedTemplate(){
String sql = "INSERT INTO student(id,name,age,address) Values(:id,:name,:age,:address)";
Map<String,Object> paramMap = new HashMap<String,Object>();
paramMap.put("id", 10);
paramMap.put("name", "xiaobai");
paramMap.put("age",51 );
paramMap.put("address", "tongbei");
namedParameterJdbcTemplate.update(sql, paramMap);
}

Spring学习五(JDBC支持)的更多相关文章

  1. 框架应用:Spring framework (三) - JDBC支持

    Spring框架是一个一站式的框架,也就是对很多技术和框架做了封装,使其应用更加简便. JDBC的代码过程 /STEP 1. Import required packages import java. ...

  2. spring学习(五) ———— 整合web项目(SSM)

    一.SSM框架整合 1.1.整合思路 从底层整合起,也就是先整合mybatis与spring,然后在编写springmvc. 1.2.开发需求 查询商品列表(从数据库中查询) 1.3.创建web工程 ...

  3. Spring学习(五)--构建Spring Web应用程序

    一.Spring MVC起步 看过猫和老鼠的小伙伴都可以想象Tom猫所制作的捕鼠器:它的目标 是发送一个小钢球,让它经过一系列稀奇古怪的装置,最后触发捕鼠 器.小钢球穿过各种复杂的配件,从一个斜坡上滚 ...

  4. Spring学习(五)-----注入bean属性的三种方式( 1: 正常的方式 2: 快捷方式 3: “p” 模式)

    在Spring中,有三种方式注入值到 bean 属性. 正常的方式 快捷方式 “p” 模式 看到一个简单的Java类,它包含两个属性 - name 和 type.稍后将使用Spring注入值到这个 b ...

  5. Spring学习五

    1: servlet生命周期:  Servlet加载    ->   实例化->   服务 ->  销毁 2:Servlet重要函数: init():在Servlet的生命周期中,仅 ...

  6. Spring学习五----------Bean的配置之Bean的生命周期

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的生命周期 1.定义 2.初始化 3.使用 4.销毁 初始化和销毁的三种方式 1.实现org.springframework.beans.fa ...

  7. Spring学习(五)

    自动装备 1.定义 自动装配(autowiring): 将某个Bean实例中所引用的其它的Bean自动注入到当前Bean实例中 自动装配就是指由Spring来自动地注入依赖对象,无需人工参与. 自动装 ...

  8. spring学习五:Spring Bean 定义继承

    Bean 定义继承 bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的定义继承父定义的配置数据.子定义可以根据需要 ...

  9. spring学习 五 依赖注入的方式

    依赖注入有两种方式: 1 构造注入,如果<bean>标签下使用<contructor-arg>,则是构造注入 2 setter注入,就是调用setter方法注入,如果<b ...

随机推荐

  1. android--------自定义控件 之 方法篇

    前面简单的讲述了Android中自定义控件的理论和流程图,今天通过代码来详细的讲解一下其中的方法 首先先创建一个类 CircularView 继承于 View,之后实现构造方法(初始化步骤) publ ...

  2. python3 mail

    # !usr/bin/python3# -*-coding=UTF-8-*-import smtplib # python 对SMTP的支持,smtplib这个库负责发送邮件from email.mi ...

  3. spring boot(十一)MongoDB的使用

    mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置 ...

  4. leetcode-algorithms-20 Valid Parentheses

    leetcode-algorithms-20 Valid Parentheses Given a string containing just the characters '(', ')', '{' ...

  5. fastjson如何指定字段不序列化

    fastjson是一款由阿里巴巴提供的性能出色的json序列化与反序列化库,而且使用很方便,我们可以使用JSON.toJSONString(object)将一个对象序列化为json格式,但是如果我们不 ...

  6. Python print打印

    1.Python运算符: +:加 -:减 *:乘 /:除以 %:去除法后的余数 //:取整除 2.字符串center方法: a='111'print(a.center(4,'2')) #让字符串占位 ...

  7. python heapq模块使用

    Python内置的heapq模块 Python3.4版本中heapq包含了几个有用的方法: heapq.heappush(heap,item):将item,推入heap >>> it ...

  8. QPainter、QPainterPath、QBrush

    参考资料: https://blog.csdn.net/qq_35488967/article/details/70802973https://blog.csdn.net/wanghualin033/ ...

  9. 转Generative Model 与 Discriminative Model

    没有完全看懂,以后再看,特别是hmm,CRF那里,以及生成模型产生的数据是序列还是一个值,hmm应该是序列,和图像的关系是什么. [摘要]    - 生成模型(Generative Model) :无 ...

  10. 【CSV文件】CSV文件内容读取

    CSV(逗号分隔值文件格式) 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本).纯文本 ...