spring4-4-jdbc-01
1.建立数据属性文件db.properties
jdbc.user=root
jdbc.password=root
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/spring-1?characterEncoding=UTF-8 jdbc.initialPoolSize=5
jdbc.maxPoolSize=10
2.建立配置文件
添加命名空间context,beans.
2.1 读入数据属性文件
<!-- 1.导入资源文件 -->
<context:property-placeholder location="classpath:db.properties"/>
2.2 配置C3P0数据源:
<!-- 2.配置C3P0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="initialPoolSize" value="${jdbc.initialPoolSize}"></property>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
</bean>
2.3 配置JdbcTemplate bean:
<!-- 3.配置 jdbc template -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
3.应用
3.1加载Sping IOC容器
private ApplicationContext ctx = null;
private JdbcTemplate jdbcTemplate;
@Before
public void init(){
ctx = new ClassPathXmlApplicationContext("applicationContext-jdbc.xml");
jdbcTemplate = ctx.getBean("jdbcTemplate",JdbcTemplate.class);
}
@Test
public void testJdbc() throws SQLException {
DataSource dataSource = ctx.getBean("dataSource",DataSource.class);
System.out.println(dataSource.getConnection());
}
3.2测试连接:
DataSource dataSource = ctx.getBean("dataSource",DataSource.class);
System.out.println(dataSource.getConnection());
3.3 测试插入,更新,删除
//insert
String insertSql = "insert employees(name,email,dept_id) values(?,?,?)";
jdbcTemplate.update(insertSql, "张三","zhangsan@si.com","3"); //update
String updateSql = "update employees set name= ? where id = ?";
jdbcTemplate.update(updateSql, "张四","1"); //delete
String deleteSql = "delete from employees where id=?";
jdbcTemplate.update(deleteSql, "1");
3.4 批处理 插入,修改,删除
//insert
String insertSql = "insert employees(name,email,dept_id) values(?,?,?)";
List<Object[]> batchArgs = new ArrayList<Object[]>();
batchArgs.add(new Object[]{"张三","zhang@si.com","1"});
batchArgs.add(new Object[]{"李四","li@si.com","2"});
batchArgs.add(new Object[]{"王五","wang@si.com","3"});
batchArgs.add(new Object[]{"钱六","qian@si.com","4"});
jdbcTemplate.batchUpdate(insertSql, batchArgs); // update
String updateSql = "update employees set email=? where id=?";
batchArgs.clear();
batchArgs.add(new Object[]{"zhangsan@si.com","1"});
batchArgs.add(new Object[]{"lisi@si.com","2"});
batchArgs.add(new Object[]{"wangwu@si.com","3"});
batchArgs.add(new Object[]{"qianliu@si.com","4"});
jdbcTemplate.batchUpdate(updateSql, batchArgs); // delete
String deleteSql = "delete from employees where id = ?";
batchArgs.clear();
batchArgs.add(new Object[]{"1"});
batchArgs.add(new Object[]{"2"});
batchArgs.add(new Object[]{"3"});
batchArgs.add(new Object[]{"4"});
jdbcTemplate.batchUpdate(deleteSql, batchArgs);
4. 查询一行,返回对象
/**
* 从数据库中获取一条记录, 实际得到对应的一个对象
* 注意不是调用 queryForObject(String sql, Class<Employee> requiredType, Object... args) 方法!
* 而需要调用 queryForObject(String sql, RowMapper<Employee> rowMapper, Object... args)
* 1. 其中的 RowMapper 指定如何去映射结果集的行, 常用的实现类为 BeanPropertyRowMapper
* 2. 使用 SQL 中列的别名完成列名和类的属性名的映射. 例如 last_name lastName
* 3. 不支持级联属性. JdbcTemplate 到底是一个 JDBC 的小工具, 而不是 ORM 框架
*/
@Test
public void testQueryForObject(){
String sql = "SELECT id, last_name lastName, email, dept_id as \"department.id\" FROM employees WHERE id = ?";
RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class);
Employee employee = jdbcTemplate.queryForObject(sql, rowMapper, 1); System.out.println(employee);
}
5.查询类的集合
/**
* 查到实体类的集合
* 注意调用的不是 queryForList 方法
*/
@Test
public void testQueryForList(){
String sql = "SELECT id, last_name lastName, email FROM employees WHERE id > ?";
RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class);
List<Employee> employees = jdbcTemplate.query(sql, rowMapper,5); System.out.println(employees);
}
6.查询单列值
/**
* 获取单个列的值, 或做统计查询
* 使用 queryForObject(String sql, Class<Long> requiredType)
*/
@Test
public void testQueryForObject2(){
String sql = "SELECT count(id) FROM employees";
long count = jdbcTemplate.queryForObject(sql, Long.class); System.out.println(count);
}
spring4-4-jdbc-01的更多相关文章
- Spring4:JDBC
数据库连接池 对一个简单的数据库应用,由于对数据库的访问不是很频繁,这时可以简单地在需要访问数据库时,就新创建一个连接,就完后就关闭它,这样做也不会带来什么性能上的开销.但是对于一个复杂的数据库应用, ...
- jdbc 01: 连接mysql,并实现数据插入
jdbc连接mysql,并实现数据插入 package com.examples.jdbc.o1_连接与插入; import java.sql.*; /* jdbc数据库连接六步 */ public ...
- Spring4 JDBC详解
Spring4 JDBC详解 在之前的Spring4 IOC详解 的文章中,并没有介绍使用外部属性的知识点.现在利用配置c3p0连接池的契机来一起学习.本章内容主要有两个部分:配置c3p0(重点)和 ...
- Spring笔记05(Spring JDBC三种数据源和ORM框架的映射)
1.ORM框架的映射 01.JDBC连接数据库以前的方式代码,并给对象赋值 @Test /** * 以前的方式jdbc */ public void TestJdbc(){ /** * 连接数据库的四 ...
- 【SSH网上商城项目实战01】整合Struts2、Hibernate4.3和Spring4.2
转自:https://blog.csdn.net/eson_15/article/details/51277324 今天开始做一个网上商城的项目,首先从搭建环境开始,一步步整合S2SH.这篇博文主要总 ...
- 01、JDBC连接
① 下载JDBC-MySQL数据库驱动 链接:https://pan.baidu.com/s/1KtSZZ5hXlxu2QrmsXg3lkA 提取码:1pbl ② 加载JDBC-MySQL数据库驱动 ...
- Java 使用 JDBC 连接数据库的代码整合[MySql、SqlServer、Oracle]-[经过设计模式改造](2020年寒假小目标01)
日期:2020.01.08 博客期:121 星期三 今天对过去整个大二和大三上半学期用到的数据库的方法进行汇总,可以有效的使用.套用,每一个部分都有<软件设计模式>知识,上述代码满足了开闭 ...
- 01.JDBC操作数据库-快速入门操作
/** * 简单入门操作 * 注:先将mysql-connector-java-5.1.36.jar 构建 Build Path环境当中去 * @param args * @throws Except ...
- Java连接数据库 #01# JDBC单线程适用
官方教程(包括 javase的基础部分):JDBC Basics 重新梳理.学习一下“Java连接数据库”相关的内容. 因为最开始没有认真学多线程和JDBC,一直在自己写的多线程程序中维持下面的错误写 ...
- 01 JDBC的问题
jdbc编程步骤: 1. 加载.注册数据库驱动 DriverManager 2. 创建并获取数据库链接 Connection 3. 创建jdbc statement/preparedState ...
随机推荐
- zipkin之brave
brave是同步收集信息,及计算调用时间,但是异步发送日志信息给zipkin:所以很多时候你无法在第一时间获取日志数据可能需要等一会.另外在写一个demo的时候,因为最后睡了1秒,经常会发现丢了一些日 ...
- 深入理解java虚拟机-第二章:java内存区域与内存泄露异常
2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2 ...
- centos7下安装docker 17.x
docker的17.X版本与以前的docker安装有些不同,参考了下这篇文章http://www.itmuch.com/docker/docker-2/,以下是我的docker 17.X版本安装过程, ...
- “FPGA+云"助力高性能计算
用AI防鲨鱼.用AI学写中国书法.用AI预测人类死亡时间.用AI审判罪犯……在人工智能方兴未艾的今天,越来越廉价和普及的AI领域真的是什么都不值钱,除了想象力.那在这无所不能的AI盛世,一定没道理让算 ...
- windows平台最简单的rtmp/hls流媒体服务器
feature: rtmp/hls live server for windows, double click to run,don't need config. run and quit: doub ...
- java web 程序---猜数字游戏
思路:1.第一个是随机产生的数字,告诉我们去猜 cai.jsp 2.第二个是一个form表单,提交按钮后,将连接到验证页面 test1.jsp 3.第三个是比较猜的数和随机数.对了,提示再玩一次,不 ...
- java代码---------再练习ChatAt()的用法
总结: 没有理解方法的含义.瞎用 package com.mmm; //实现字符串中某个字符出现的次数 public class Mo { public static void main(String ...
- 非常漂亮js动态球型云标签特效代码
<%@ page contentType="text/html;charset=UTF-8" language="java" import="j ...
- docker 学习(十一) 镜像常用命令
1 创建账户,创建仓库 首先在dockerhub上有自己的账户,然后创建一个repository(如上图), 然后创建一个名字为robinfei/consumer的仓库. 2 本地镜像打标签(比 ...
- 安装Oracle 10g RAC是否需要安装HACMP
实际上无论在哪个操作系统(AIX,HP-UX,Solaris,Linux)上安装Oracle10g RAC都不再需要Vendor Clusterware(IBM的HACMP,HP的Service Gu ...