一. 配置数据源
无论选择Spring的哪种数据访问方式,你都需要配置一个数据源的引用。Spring提供了在Spring上下文中配置数据源bean的多种方式,包括:

通过JDBC驱动程序定义的数据源
通过JNDI查找的数据源
连接池的数据源

1.1 使用JNDI数据源

使用Java配置的话,我们可以借助JndiObjectFactoryBean中查找DataSource:

@Bean
public DataSource productionDataSource(){
//使用JNDI数据源
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiName("org.h2.Driver");
jndiObjectFactoryBean.setResourceRef(true);
jndiObjectFactoryBean.setProxyInterface(DataSource.class);
return (DataSource) jndiObjectFactoryBean.getObject();
}

1.2 使用数据源连接池

使用Java配置,借助BasicDataSource类的bean声明如下:

@Bean
public DataSource quDataSource(){
//数据源连接池
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("org.h2.Driver");
basicDataSource.setUrl("jdbc:h2:tcp://localhost/~/spitter");
basicDataSource.setUsername("sa");
basicDataSource.setPassword("");
return basicDataSource;
}

1.3 基于JDBC驱动的数据源
在Spring中,通过JDBC驱动定义数据源是最简单的配置方式。Spring提供了三个这样的数据源类供选择:

DriverManagerDataSource:在每个连接请求时都会返回一个新建的连接。与JDBC的BasicDataSource不同,由DriverManagerDataSource提供的连接并没有进行池化管理。
SimpleDriverDataSource:与DriverManagerDataSource工作方式类似,但是它直接使用JDBC驱动,来解决在特定环境下的类加载问题,这样的环境包括OSGi容器。
SingleConnectionDataSource:在每个连接请求时都会返回同一个的连接。尽管SingleConnectionDataSource不是严格意义上的连接池数据源,但是可以将其视为只有一个连接的池。
注意:SingleConnectionDataSource有且只有一个数据库连接,不适于多线程,DriverManagerDataSource和SimpleDriverDataSource尽管支持多线程,但是在每次请求的时候都会创建新连接,这是以性能为代价的。

使用Java配置,借助DriverManagerDataSource类的bean声明:

//基于JDBC驱动的数据源
@Bean
public DataSource jdbcDataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUrl("jdbc:h2:tcp://localhost/~/spitter");
dataSource.setUsername("sa");
dataSource.setPassword("");
return dataSource;
}

1.4 使用嵌入式的数据源

使用Java配置,借助EmbeddedDatabaseBuilder类的bean声明:

@Bean
public DataSource developmentDataSource(){
//嵌入式数据原:每次重启应用或运行测试的时候,都能够重新填充测试数据
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:schema.sql")
.addScript("classpath:test-data.sql")
.build();
}

使用JdbcTemplate来读取数据:

@Component
public class DbUserDaoImpl implements DbUserDao { @Autowired
private JdbcTemplate jdbcTemplate; private static final String SQL_INSERT_DBUSER = "insert into user_list (username, mobile, cardnumber) values (?, ?, ?)";
private static final String SQL_CHECK_DBUSER = "select id,username,mobile,cardnumber from user_list";
private static final String SQL_FINDBYID_DBUSER = "select id,username,mobile,cardnumber from user_list where id = ?";
private static final String SQL_UPDATE_DBUSER = "update user_list set username = ?,mobile = ?,cardnumber = ? where id = ?"; @Override
public void addDbUser(DbUser dbUser) {
jdbcTemplate.update(SQL_INSERT_DBUSER, dbUser.getUsername(), dbUser.getMobile(), dbUser.getCardnumber());
} @Override
public List<DbUser> findAll() {
return jdbcTemplate.query(SQL_CHECK_DBUSER, new DbUserRowMapper());
} @Override
public DbUser findById(int id) {
return jdbcTemplate.queryForObject(SQL_FINDBYID_DBUSER, new DbUserRowMapper(), id);
} public static final class DbUserRowMapper implements RowMapper<DbUser>{
public DbUser mapRow(ResultSet rs, int rowNum) throws SQLException {
int id = rs.getInt("id");
String username = rs.getString("username");
String mobile = rs.getString("mobile");
String cardnumber = rs.getString("cardnumber"); DbUser dbUser = new DbUser();
dbUser.setId(id);
dbUser.setUsername(username);
dbUser.setMobile(mobile);
dbUser.setCardnumber(cardnumber); return dbUser;
}
} public DbUser save(DbUser dbUser){
if(dbUser.getId() == null){
int id = insertDbUserAndReturnId(dbUser);
return jdbcTemplate.queryForObject(SQL_FINDBYID_DBUSER, new DbUserRowMapper(), id);
} jdbcTemplate.update(SQL_UPDATE_DBUSER, dbUser.getUsername(), dbUser.getMobile(), dbUser.getCardnumber(), dbUser.getId()); return dbUser;
} public int insertDbUserAndReturnId(DbUser dbUser){
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate).withTableName("user_list");
jdbcInsert.setGeneratedKeyName("id");
Map<String, Object> map = new HashMap<>();
map.put("username", dbUser.getUsername());
map.put("mobile", dbUser.getMobile());
map.put("cardnumber", dbUser.getCardnumber());
int id = jdbcInsert.executeAndReturnKey(map).intValue();
return id;
}
}

此文来源于:https://blog.csdn.net/qq_22314145/article/details/81562244

配置数据源和jdbc的使用的更多相关文章

  1. bean.xml配置数据源和读取配置文件配置数据源

    一.bean.xml配置数据源 bean.xml装配bean,依赖注入其属性的时候,对应实体类中属性一定要有set方法, 二.读取配置文件配置数据源 1.配置文件 bean.xml配置: classp ...

  2. centos配置数据源和java环境配置

    ---恢复内容开始--- 一:前言 今天送走了一位同事,看着别人走勾起了我蠢蠢欲动的心啊,但是我知道,我不能那么的任性,我是men,这几天难得的清闲,所以我就弄一弄linux,昨天把网给配通了,今天配 ...

  3. 配置数据源和配置jpa的yml文件

    spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: root url: j ...

  4. JDBC五数据源和数据池(web基础学习笔记十一)

    一.为什么使用数据源和连接池 现在开发的应用程序,基本上都是基于数据的,而且是需要频繁的连接数据库的.如果每次操作都连接数据库,然后关闭,这样做性能一定会受限.所以,我们一定要想办法复用数据库的连接. ...

  5. 如何正确的在java web配置数据池

    在tomcat context.xml中配置数据 <Context reloadable="true"> <!-- Default set of monitore ...

  6. OLEDB数据源和目标组件

    在SSIS工程的开发过程中,OLEDB 数据源和目标组件是最常用的数据流组件.从功能上讲,OLEDB 数据源组件用于从OLEDB 提供者(Provider)中获取数据,传递给下游组件,OLEDB提供者 ...

  7. .NET Core采用的全新配置系统[1]: 读取配置数据

    提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义在这两个文 ...

  8. .NET Core配置文件加载与DI注入配置数据

    .NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config等XML格式的配置文件,而.NET Core中建议使用以JSON为格式的配置文件,因为使用起来更 ...

  9. win7下IIS错误:"无法访问请求的页面,因为该页的相关配置数据无效"的解决方法(转)

    今天新装win7,然后在IIS下布署了一个网站,布署完成后运行,提示如下错误:HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效 ...

随机推荐

  1. 多线程使用@Async注解创建多线程,自定义线程池

    转载自博客https://www.jianshu.com/p/7ac04a501eba

  2. Mysql定时器定时删除表数据

    由于测试环境有张日志表没定时2分钟程序就狂插数据,导致不到1一个月时间,这张日志表就占用了6.7G的空间,但是日志刷新较快,有些日志就没什么作用,就写了个定时器,定期删除这张表的数据 首先先查看mys ...

  3. spring boot 2.0(三)使用docker部署springboot

    Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...

  4. 2018微信小程序官方示例源码最新版

    忘记从哪获得的 CSDN  可以支持一下 谢谢你们 https://download.csdn.net/download/lan1128/10197682 当然也有免费的 代码在码云上免费公开 点个关 ...

  5. C语言字符串追加,双色球等案例

    //C语言中没有字符串概念,有的只是字符型数组,以str1[]的值为例,该字符数组的长度为11--->包含了字母,空格,以及结束字符'\0'(斜杠0)//基于上述原因,读取一个字符型数组的有效方 ...

  6. jQuery、JS读取xml文件里的内容(JS先通过document.implementation.createDocument方法将xml转换成document对象,jQuery将读取到的xml转成table)

    xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...

  7. Spring Boot Starters 究竟是怎么回事

    Spring Boot 对比 Spring MVC 最大的优点就是使用简单,约定大于配置.不会像之前用 Spring MVC 的时候,时不时被 xml 配置文件搞的晕头转向,冷不防还因为 xml 配置 ...

  8. scipy.sparse 稀疏矩阵

    from 博客园(华夏35度)http://www.cnblogs.com/zhangchaoyang 作者:Orisun 本文主要围绕scipy中的稀疏矩阵展开,也会介绍几种scipy之外的稀疏矩阵 ...

  9. 通过web传大文件

    上传文件的jsp中的部分 通过form表单向后端发送请求 <form id="postForm" action="${pageContext.request.con ...

  10. C++STL中的unique函数

    头文件:#include<iostream> 函数原型:iterator unique(iterator it_1,iterator it_2); 作用:元素去重,即”删除”序列中所有相邻 ...