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. 微信小程序地图demo完整

    <block wx:for="{{data_2}}" wx:key='index' wx:if="{{data_2.length}}"> <v ...

  2. php-fpm的错误日志

  3. HDU - 4456 cdq

    题意:给一个矩阵,两种操作1:修改单点的权值,2:查询和某个点曼哈顿距离小于r点的权值和 题解:先旋转坐标轴,(x,y)->(x-y,x+y)然后就变成了cdq分治裸题,子矩阵和和单点修改一维时 ...

  4. shiro中拦截器机制

    8.1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展:所以如果对Filter不熟悉可以参考<Servlet3.1规范>http://www.iteye.com ...

  5. 基于Helm和Operator的K8S应用管理的分享

    一.为啥要用helm 对于一些微服务架构来说,会有不同的服务在上面运行,你可能要管理诸如deployment.service.有状态的Statefulset.权限的控制等等.你会发现,部署应用后还会有 ...

  6. React文档(五)组件和props

    组件可以让你将UI分割成独立的,可复用的模块,然后考虑将每个模块彼此隔离.从概念上理解,组件就像js中的函数.他们接受随意的输入(被称为props)然后返回React元素来描述屏幕上应该出现什么. 函 ...

  7. 将你的Vim 打造成轻巧强大的IDE

    Vim和Emacs一个称为神之编辑器一个被称为编辑器之神,固然很是夸张,但也足以说明这两 款软件的优秀和在程序员界的地位.但是它们都已漫长的学习曲线让人望而生畏,阻止了大 多数人进入.作为一名几乎完全 ...

  8. html中传递信息

    <div class="card" data-username="ArgenBarbie"> </div> JS: var userna ...

  9. 如何把一个杯子卖到上万元,不学你就OUT了

    我们可以看看一个产品卖到多少钱需要占有什么样的资源: 第1种卖法:卖产品本身的使用价值,只能卖3元/个 如果你将他仅仅当一只普通的杯子,放在普通的商店,用普通的销售方法,也许它最多只能卖3元钱,还可能 ...

  10. maven打包上传到本地中央库

    pom文件中添加插件如下 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins< ...