spring的另一个功能模块data access对于数据库的支持

  spring data access第一个helloword案例:

使用java程序实现访问配置

1.导包

2.测试案例

    @Test
public void test01(){
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///springtest");
dataSource.setUsername("root");
dataSource.setPassword("123");
JdbcTemplate jdbcTemplate=new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
String sql="insert into t_user values(1,'张三',123,'男')";
jdbcTemplate.execute(sql); }

  把创建对象交给spring来控制,这样就需要在applicationContext.xml文件中配置数据访问

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:c="http://www.springframework.org/schema/c"
xmlns:p="http://www.springframework.org/schema/p"
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.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 创建数据源 -->
<bean id="driverManagerDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- 配置数据库驱动 -->
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///springtest"></property>
<property name="username" value="root"></property>
<property name="password" value="123"></property>
</bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 注入数据源 -->
<property name="dataSource" ref="driverManagerDataSource"></property>
</bean> </beans>

  测试方法;

@RunWith(SpringJUnit4ClassRunner.class)  //整合junit4
@ContextConfiguration(locations="classpath:applicationContext.xml")//使用注解加载配置文件
public class SpringJDBCTest {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
public void test01(){
String sql="insert into t_user values(2,'张三',123,'男')";
jdbcTemplate.execute(sql); }
}

  CRUD操作

    创建表

CREATE DATABASE springtest;
USE springtest;
CREATE TABLE t_user(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT,
sex VARCHAR(20)
)
INSERT INTO t_user VALUES(NULL,'tom',20,'男');
INSERT INTO t_user VALUES(NULL,'fox',30,'男');
INSERT INTO t_user VALUES(NULL,'tony',40,'男');

创建表

    cud操作

@RunWith(SpringJUnit4ClassRunner.class)  //整合junit4
@ContextConfiguration(locations="classpath:applicationContext.xml")//使用注解加载配置文件
public class SpringJDBCTest {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test //添加数据
public void insertData(){
//String sql="insert into t_user values(4,'张三',123,'男')";
//jdbcTemplate.execute(sql);
String sql="insert into t_user values(?,?,?,?)";
jdbcTemplate.update(sql,5,"王五",66,"女"); }
@Test //删除数据
public void deleteData(){
//String sql="delete from t_user where id=4 ";
//jdbcTemplate.execute(sql);
String sql="delete from t_user where id=? ";
jdbcTemplate.update(sql,5);
}
@Test //修改数据
public void updateData(){
/*String sql="update t_user set name='李四' where id=3 ";
jdbcTemplate.execute(sql);*/
String sql="update t_user set name=? where id=? ";
jdbcTemplate.update(sql,"jj",1);
}
}

增删改

     查询操作

对没有封装的数据进行查询

@Test    //查询简单的一格数据
public void seachOne3(){
List<Map<String, Object>> list = jdbcTemplate.queryForObject("select * from t_user",new RowMapper<List<Map<String,Object>>>() {
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
@Override
public List<Map<String,Object>> mapRow(ResultSet rs, int rowNum) throws SQLException {
System.out.println(rowNum);
System.out.println("------");
Map<String,Object> map=null;
while(rs.next()){
map=new HashMap<String,Object>();
map.put("id",rs.getInt("id"));
map.put("name",rs.getString("name"));
map.put("age",rs.getInt("age"));
map.put("sex",rs.getString("sex"));
list.add(map);
}
return list;
}
});
System.out.println(list);
}

QueryForObject

@Test    //查询简单的一格数据
public void seachOne3(){
List<Map<String, Object>> list = jdbcTemplate.query("select * from t_user",new RowMapper<Map<String,Object>>() {
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
@Override
public Map<String,Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
Map<String,Object> map=new HashMap<String,Object>();
map.put("id",rs.getInt("id"));
map.put("name",rs.getString("name"));
map.put("age",rs.getInt("age"));
map.put("sex",rs.getString("sex"));
return map;
}
});
System.out.println(list);
}

query

对封装的数据进行查询

@Test    //查询简单的一格数据
public void seachOne2(){
List<User> list = jdbcTemplate.queryForObject("select * from t_user",new RowMapper<List<User>>() {
List<User> list=new ArrayList<User>();
@Override
public List<User> mapRow(ResultSet rs, int rowNum) throws SQLException {
//System.out.println(rs.getRow());
//do {
User u=new User();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
u.setAge(rs.getInt("age"));
u.setSex(rs.getString("sex"));
list.add(u);
//} while (rs.next());
return list;
}
});
System.out.println(list);
}

queryForObjcet

@Test    //查询简单的一格数据
public void seachOne4(){
List<User> list = jdbcTemplate.query("select * from t_user",new RowMapper<User>() {
List<User> list=new ArrayList<User>();
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User u=new User();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
u.setAge(rs.getInt("age"));
u.setSex(rs.getString("sex")); return u;
}
});
System.out.println(list);
}

query

query 和queryForObject的区别

query是底层会对查询出来的数据进行处理,比如查询结果为空会返回为空,并不会抛异常;query的返回值会根据第二个参数来对返回进行区分

@Override
public void query(String sql, RowCallbackHandler rch) throws DataAccessException {
query(sql, new RowCallbackHandlerResultSetExtractor(rch));
} @Override
public <T> List<T> query(String sql, RowMapper<T> rowMapper) throws DataAccessException { 返回值为T的集合
return query(sql, new RowMapperResultSetExtractor<T>(rowMapper));
}

  

@Override
public List<T> extractData(ResultSet rs) throws SQLException {
List<T> results = (this.rowsExpected > 0 ? new ArrayList<T>(this.rowsExpected) : new ArrayList<T>());
int rowNum = 0;//设置为第零行开始
while (rs.next()) {//没有数据 并不会报错 只是会返回为null
results.add(this.rowMapper.mapRow(rs, rowNum++));
}
return results;
}

  queryForObject在查询时候如果没有查询出数据则会抛出异常  因为会对results进行判断   如果为空则会抛出异常.

public static <T> T requiredSingleResult(Collection<T> results) throws IncorrectResultSizeDataAccessException {
int size = (results != null ? results.size() : 0);
if (size == 0) {
throw new EmptyResultDataAccessException(1);
}
if (results.size() > 1) {
throw new IncorrectResultSizeDataAccessException(1, size);
}
return results.iterator().next();
}

  Bean查询  类似于beanUtils对于javabean类进行数据赋值

public class BeanPropertyRowMapper<T> implements RowMapper<T>

  

@Test	//使用bean来进行查询数据
public void seachBean(){
List<User> list = jdbcTemplate.query("select * from t_user",new BeanPropertyRowMapper<User>(User.class));
System.out.println(list);
}

  

spring之jdbcTemplate的更多相关文章

  1. Spring利用JDBCTemplate实现批量插入和返回id

    1.先介绍一下java.sql.Connection接口提供的三个在执行插入语句后可取的自动生成的主键的方法: //第一个是 PreparedStatement prepareStatement(St ...

  2. Spring 中jdbcTemplate 实现执行多条sql语句

    说一下Spring框架中使用jdbcTemplate实现多条sql语句的执行: 很多情况下我们需要处理一件事情的时候需要对多个表执行多个sql语句,比如淘宝下单时,我们确认付款时要对自己银行账户的表里 ...

  3. spring使用jdbcTemplate和jdbcdaosupport和namedparameter

    jdbcTemplate: 首先连接数据库 <!-- 导入外部文件 --> <context:property-placeholder location="classpat ...

  4. Spring之JDBCTemplate学习

    一.Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core. ...

  5. spring+spring mvc+JdbcTemplate 入门小例子

    大家使用这个入门时候 最好能够去 搜一下 spring mvc 的 原理,我放一张图到这里,自己琢磨下,后面去学习就容易了 给个链接 (网上一把,千万不能懒)    https://www.cnblo ...

  6. spring 学习(四): spring 的 jdbcTemplate 操作

    spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层. ...

  7. Spring的jdbcTemplate 与原始jdbc 整合c3p0的DBUtils 及Hibernate 对比 Spring配置文件生成约束的菜单方法

    以User为操作对象 package com.swift.jdbc; public class User { private Long user_id; private String user_cod ...

  8. spring学习(四)spring的jdbcTemplate(增删改查封装)

    Spring的jdbcTemplate操作 1.Spring框架一站式框架 (1)针对javaee三层,每一层都有解决技术 (2)到dao 层,使用 jdbcTemplate 2.Spring对不同的 ...

  9. Spring:JdbcTemplate使用指南

    Spring:JdbcTemplate使用指南 Spring:JdbcTemplate使用指南 前言: 本文指在介绍Spring框架中的JdbcTemplate类的使用方法,涉及基本的Spring反转 ...

  10. Spring中JdbcTemplate的基础用法

    Spring中JdbcTemplate的基础用法 1.在DAO中使用JdbcTemplate 一般都是在DAO类中使用JdbcTimplate,在XML配置文件中配置好后,可以在DAO中注入即可. 在 ...

随机推荐

  1. [z]Linux下压缩与解压

    1.压缩命令: 命令格式:tar  -zcvf   压缩文件名.tar.gz   被压缩文件名 可先切换到当前目录下.压缩文件名和被压缩文件名都可加入路径. 2.解压缩命令: 命令格式:tar  -z ...

  2. ROS与深度相机入门教程-在ROS使用kinect v1摄像头

    ROS与深度相机入门教程-在ROS使用kinect v1摄像头 说明: 介绍在ros安装和使用kinect v1摄像头 介绍freenect包 安装驱动 deb安装 $ sudo apt-get in ...

  3. Numpy 索引

    1.一维索引 >>> import numpy as np >>> A = np.arange(3,15) >>> print(A[3]) 6 & ...

  4. linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO(转载)

      IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作.那么我们对与外部设备的操作都可以看做对文件进行操作.我们对一个文件的读写,都通过调用内核提供的系统调用:内核给我们返回一个file ...

  5. CH#56C 异象石

    一道LCA 原题链接 先跑一边\(dfs\),求出每个节点的时间戳,如果我们将有异象石的节点按时间戳从小到大的顺序排列,累加相邻两节点之间的距离(首尾相邻),会发现总和就是答案的两倍. 于是我们只需要 ...

  6. merge_关系

    create(olive:Person{chau:"Bill White",name:"Olive Stone",bornin:"New York&q ...

  7. MS SQMServer2008R2 连接不到远程服务的解决办法

    问题: MS SQMServer2008R2 连接不到远程服务的解决办法.程序提示的错误如下: [2017/02/19 17:46:21] 在与 SQL Server 建立连接时出现与网络相关的或特定 ...

  8. autohotkey快捷键

    ;已经基本修复了输入带shift的时候跟输入法中英文切换之间的冲突 SetStoreCapslockMode, off SetKeyDelay, ^CapsLock:: #UseHook ;用这个和下 ...

  9. 通过SD卡来安装Linux系统

    一.制作SD启动卡(安装Linux)步骤: 烧写原理:superboot-6410.bin(bootloader)+内核镜像文件+根文件系统 1.将SD卡插入USB接口的读卡器,并插在PC的USB口 ...

  10. 设置默认Browser

    电信A库要求android系统中有多个Browser时,开机自动设置一个默认浏览器,而不用弹出选择框让用户手动选择. 监听开机广播Intent.ACTION_BOOT_COMPLETED, 用Pack ...