spring(10)通过spring 和 JDBC征服数据库
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
way1)通过JDBC 驱动程序定义的数据源;way2)通过JNDI 查找的数据源;way3)连接池的数据源;
@Bean // 使用JNDI 数据源.public DataSource dataSource() {JndiTemplate jndiTemplate = new JndiTemplate();DataSource dataSource = null;try {dataSource = (DataSource) jndiTemplate.lookup("java:comp/env/jdbc/spring");} catch (NamingException e) {e.printStackTrace();}return dataSource;}
scheme1)Apache Commons DBCP(http://commons.apache.org/proper/commons-dbcp/configuration.html)scheme2)c3p0(https://sourceforge.net/projects/c3p0/)scheme3)BoneCP(http://www.jolbox.com/)
@Beanpublic BasicDataSource getDataSource() {BasicDataSource ds = new BasicDataSource();ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setUrl("jdbc:mysql://localhost:3306/t_spring");ds.setUsername("root");ds.setPassword("root");return ds;}
![](/assets/blank.gif)
type1)DriverManagerDataSource:在每个连接请求时都会返回一个新建的连接。与 DBCP 的 BasicDataSource 不同,由DriverManagerDataSource 提供的连接并没有进行池化管理;(干货——引入了池化管理)type2)SimpleDriverDataSource:它直接使用 JDBC驱动,来解决再特定环境下的类加载问题,这样的环境包括 OSGi 容器;type3)SingleConnectionDataSource: 在每个连接请求时都会返回同一个的连接。尽管 SingleConnectionDataSource不是严格意义上的连接池数据源,但是你可以将其视为只有一个连接的池;
![](/assets/blank.gif)
@Configuration
public class RepositoryConfig {@Beanpublic BasicDataSource getDataSource() {BasicDataSource ds = new BasicDataSource();ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setUrl("jdbc:mysql://localhost:3306/t_spring");ds.setUsername("root");ds.setPassword("root");return ds;}@Beanpublic JdbcTemplate getJdbcTemplate(DataSource ds) {return new JdbcTemplate(ds);}
}
![](/assets/blank.gif)
@Repository
public class SpittleRepositoryImpl implements SpittleRepository {private JdbcOperations jdbc;@Autowiredpublic SpittleRepositoryImpl(JdbcOperations jdbc) {this.jdbc = jdbc;}public List<Spittle> findSpittles(long limit, int offset) {return jdbc.query("select id, name from t_two limit ? offset ?", new SpittleRowMapper(), limit, offset);}private static class SpittleRowMapper implements RowMapper<Spittle> {public Spittle mapRow(ResultSet rs, int rowNum) throws SQLException {return new Spittle(rs.getInt("id"), rs.getString("name"));}}@Overridepublic Spittle findSpittle(int id) {return jdbc.queryForObject("select id,name,address from t_two where id=?", new RowMapper<Spittle>() { // �����ڲ���@Overridepublic Spittle mapRow(ResultSet rs, int rowNum) throws SQLException {return new Spittle(rs.getInt("id"), rs.getString("name"),rs.getString("address"));}}, id);}@Overridepublic int getItemSum() {return (int) jdbc.queryForObject("select count(*) as item_sum from t_two", new RowMapper<Object>() {@Overridepublic Object mapRow(ResultSet rs, int rowNum) throws SQLException {return rs.getInt("item_sum");}});}
}
parameter1)String对象:包含了要从数据库中查找数据的SQL;parameter2)RowMapper对象:用来从 ResultSet 中提取数据并构建域对象;parameter3)可变参数列表:列出了要绑定到查询上的索引参数值;(Prepared Statement==预备语句)
private static final String SQL_INSERT_SPITTER ="insert into spitter (username, password, fullname) " +"values (:username, :password, :fullname)";
@Bean
public NamedParameterJdbcTemplate jdbcTemplate(DataSource dataSource) {return new NamedParameterJdbcTemplate(dataSource);
}
![](/assets/blank.gif)
private static final String INSERT_SPITTER ="insert into Spitter " +" (username, password, fullname, email, updateByEmail) " +"values " +" (:username, :password, :fullname, :email, :updateByEmail)";
public void addSpitter(Spitter spitter) {Map<String, Object> paramMap = new HashMap<String, Object>();paramMap.put("username", spitter.getUsername());paramMap.put("password", spitter.getPassword());paramMap.put("fullname", spitter.getFullName());paramMap.put("email", spitter.getEmail());paramMap.put("updateByEmail", spitter.isUpdateByEmail());jdbcOperations.update(INSERT_SPITTER, paramMap);
}
spring(10)通过spring 和 JDBC征服数据库相关推荐
- chapter10_通过Spring和JDBC征服数据库_2_配置数据源
在声明模板和Repository之前, 我们需要先在Spring中配置一个数据源用于数据库连接 Spring提供了多种配置数据源bean的方式 (1) JDBC驱动程序定义的数据源 (2) JNDI查 ...
- Spring JDBC-使用Spring JDBC访问数据库
概述 使用Spring JDBC 基本的数据操作 更改数据 返回数据库表的自增主键值 批量更改数据 查询数据 使用RowCallbackHandler处理结果集 使用RowMapperT处理结果集 R ...
- Spring实战6-利用Spring和JDBC访问数据库
主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRep ...
- Java程序员从笨鸟到菜鸟之(七十八)细谈Spring(七)spring之JDBC访问数据库及配置详解
利用spring访问数据库是我们ssh程序中必不可少的步骤,在没有hibernate之前,我们一般都用jdbc访问数据库,所以用jdbc访问数据库必不可少的要进行一些配置,spring中为我们提供了访 ...
- Spring JDBC 访问数据库
Spring JDBC是Spring所提供的持久层技术,它以一种更直接.更简单的方式使用JDBC API.在Spring JDBC里,用户仅需要做那些必不可杀的事儿,而将资源获取.Statement创 ...
- spring cloud config将配置存储在数据库中
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! Spring Cloud Config Server最常见是将配置文件放在本地或者远程Git仓库, ...
- Spring Boot中使用Flyway来管理数据库版本
久违了的Spring Boot系列,今天抽空更新一篇.之前写过很多篇关于数据访问的文章了,比如下面这些: 使用JdbcTemplate 使用Spring-data-jpa简化数据访问层(推荐) 多数据 ...
- Spring-学习笔记10【Spring事务控制】
Java后端 学习路线 笔记汇总表[黑马程序员] Spring-学习笔记01[Spring框架简介][day01] Spring-学习笔记02[程序间耦合] Spring-学习笔记03[Spring的 ...
- spring boot ---- jpa连接和操作mysql数据库
环境: centos6.8,jdk1.8.0_172,maven3.5.4,vim,spring boot 1.5.13,mysql-5.7.23 1.引入jpa起步依赖和mysql驱动jar包 1 ...
最新文章
- 论文标题,这么写才算好!
- 多协议底层攻击工具Yesinia
- VC++6.0和VC++2010的区别
- web页面屏蔽鼠标右键
- Cordova创建你的第一个App
- php+正则匹配qq,正则表达式对qq号进行验证的实例
- Spring Boot application.yml文件语法
- 平扫加重建什么意思_在这款“奸商模拟器”里,帮助战场老兵重建家园吧!
- UI设计素材|app表单模板,临摹学习,有效提高设计水平!
- FTPClient删除linux文件夹,使用ftp读取文件夹中的多个文件,并删除
- 数据福利|各种分辨率DEM数据下载
- 企业如何从CMMI3升级为CMMI5,有哪些优势?
- 常用z变换及其收敛域
- 税控盘是服务器系统,税控盘系统设置服务器地址
- The Rust Programming Language - 第7章 使用包、crate和模块管理不断增长的项目 - 7.1 包和crate
- vue原生js打印插件
- Docker 定制容器镜像的2种方法
- ffmpeg实现视频和音频分离,并且将声音切片
- Java课程实验报告 实验四 Java网络编程及安全
- 优达的Python入门课
热门文章
- Deltix Round, Spring 2021 E. Crypto Lights 组合数学 + 推公式
- 【NOIP模拟】彩色树【树形dp】【树链剖分性质】【复杂度分析】
- 2021牛客第一场H.Hash Function—FFT求差值的卷
- [TJOI2012] 旅游(树的直径)
- 学习KMP (概念 + 模板 + 例题: 子串查找)
- 洛谷P4322 最佳团伙(树上dp)
- ARC115D-Odd Degree【dp,欧拉回路】
- P4001-[ICPC-Beijing 2006]狼抓兔子【对偶图】
- ssl2294-打包【dp练习】
- 【模拟】交换(jzoj 1518)