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的使用 ( 五) include
Data Binding的中 include 标签的使用 inclune使用和原来一样,但要如何使数据也在 include中使用呢? 先看看我的布局文件 include的布局文件,也要使用 <l ...
- Confluence 6 空间权限概述
在 Confluence 中的每一个空间都会有自己的权限,这个权限可以被空间的管理员进行调整,也可以被空间管理员取消.当用户创建一个空间的时候,例如用户创建一个你的个人空间,创建控件的这个用户将会被自 ...
- DRF之简介以及序列化操作
1. Web应用模式. 在开发Web应用中,有两种应用模式: 前后端不分离 2.前后端分离 2. api接口 为了在团队内部形成共识.防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实 ...
- mac中 hosts地址
/etc/hosts 拉出hosts文件,修改之后再拉进去
- 『MXNet』第一弹_基础架构及API
MXNet是基础,Gluon是封装,两者犹如TensorFlow和Keras,不过得益于动态图机制,两者交互比TensorFlow和Keras要方便得多,其基础操作和pytorch极为相似,但是方便不 ...
- Android之Activity生命周期详解
Activity的生命周期方法: onCreate()--->onStart()--->onResume()--->onPause()--->onStop()--->on ...
- 回收站(recyclebin)及回滚
1. alter table table_name enable row movement; flashback table table_name to timestamp to_timestam ...
- UI基础二:下拉,F4,OP等
常用的搜索帮助有SE11的SH,域,值列表,组件等...下面介绍一下经常用的: 一:下拉 dropdown是最经常用的,也是最简单的一种. 不管是查询条件,还是结果清单,还是明细界面,下拉都是一样的 ...
- ECharts 报表事件联动系列二:柱状图,饼状图添加事件
代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...
- Web Services的学习二
1.SOAP简单对象访问协议 基于XML的简单协议,可让应用程序在HTTP上进行信息交换,或者说SOAP就是用于访问网络服务的协议.它独立于平台,独立于语言,很简单并可扩展,而且允许绕过防火墙. 2. ...