Spring学习五(JDBC支持)
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支持)的更多相关文章
- 框架应用:Spring framework (三) - JDBC支持
Spring框架是一个一站式的框架,也就是对很多技术和框架做了封装,使其应用更加简便. JDBC的代码过程 /STEP 1. Import required packages import java. ...
- spring学习(五) ———— 整合web项目(SSM)
一.SSM框架整合 1.1.整合思路 从底层整合起,也就是先整合mybatis与spring,然后在编写springmvc. 1.2.开发需求 查询商品列表(从数据库中查询) 1.3.创建web工程 ...
- Spring学习(五)--构建Spring Web应用程序
一.Spring MVC起步 看过猫和老鼠的小伙伴都可以想象Tom猫所制作的捕鼠器:它的目标 是发送一个小钢球,让它经过一系列稀奇古怪的装置,最后触发捕鼠 器.小钢球穿过各种复杂的配件,从一个斜坡上滚 ...
- Spring学习(五)-----注入bean属性的三种方式( 1: 正常的方式 2: 快捷方式 3: “p” 模式)
在Spring中,有三种方式注入值到 bean 属性. 正常的方式 快捷方式 “p” 模式 看到一个简单的Java类,它包含两个属性 - name 和 type.稍后将使用Spring注入值到这个 b ...
- Spring学习五
1: servlet生命周期: Servlet加载 -> 实例化-> 服务 -> 销毁 2:Servlet重要函数: init():在Servlet的生命周期中,仅 ...
- Spring学习五----------Bean的配置之Bean的生命周期
© 版权声明:本文为博主原创文章,转载请注明出处 Bean的生命周期 1.定义 2.初始化 3.使用 4.销毁 初始化和销毁的三种方式 1.实现org.springframework.beans.fa ...
- Spring学习(五)
自动装备 1.定义 自动装配(autowiring): 将某个Bean实例中所引用的其它的Bean自动注入到当前Bean实例中 自动装配就是指由Spring来自动地注入依赖对象,无需人工参与. 自动装 ...
- spring学习五:Spring Bean 定义继承
Bean 定义继承 bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的定义继承父定义的配置数据.子定义可以根据需要 ...
- spring学习 五 依赖注入的方式
依赖注入有两种方式: 1 构造注入,如果<bean>标签下使用<contructor-arg>,则是构造注入 2 setter注入,就是调用setter方法注入,如果<b ...
随机推荐
- android -------- Data Binding的使用(三)Observable
解决:databinding 中 ViewModel数据发生改变,View中也要改变(实时更新) BaseObservable 在ViewModel 中可以继承 BaseObservable publ ...
- 发送http请求,get和post两种请求方式
GET请求 GetMethod getMethod=null; String datas = "json=" + plain; HttpClient httpClient = ne ...
- Spring的几种注入bean的方式
在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入 这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的se ...
- Leetcode 970. 强整数
970. 强整数 显示英文描述 我的提交返回竞赛 用户通过次数223 用户尝试次数258 通过次数231 提交次数801 题目难度Easy 给定两个正整数 x 和 y,如果某一整数等于 x^i ...
- python使用MySQLdb模块连接MySQL
1.安装驱动 目前有两个MySQL的驱动,我们可以选择其中一个进行安装: MySQL-python:是封装了MySQL C驱动的Python驱动:mysql-connector-python:是MyS ...
- Hive的用法
1.Hive是Hadoop的一个子项目 利用MapReduce编程技术,实现了部分SQL语句.而且还提供SQL的编程接口.Hive推进Hadoop在数据仓库方面的发展. Hive是一个基于Hadoop ...
- Hadoop---日志服务器
Hadoop---日志服务器 1.历史服务器: 启动: 1)测试使用: 1.做一个任务: 2.接受任务: 3.执行任务: 4.执行任务完成: 2)日志文件产生: 成功后: 失败后: 点击进入His ...
- Hadoop---桥接集群的搭建
Hadoop---桥接群的搭建 集群分配:(一主四从) 我电脑的虚拟机:hadoop4:namenode+datanode+resourceManager 我one-friend的电脑虚拟机:hm ...
- 音频 API 一览
iOS 和 OS X 平台都有一系列操作音频的 API,其中涵盖了从低到高的全部层级.随着时间的推移.平台的增长以及改变,不同 API 的数量可以说有着非常巨大的变化.本文对当前可以使用的 API 以 ...
- Python学习之路【第二篇】-pyc简介、Python常用的数据类型及其用法和常用运算符
1.pyc简介 python程序在运行时也有编译过程,编译后会产生.pyc文件.这是一种由python虚拟机执行的二进制文件(字节码),用于保存内存中PyCodeObject,以便加快程序的加载运行. ...