@

1. 环境配置

  1. maven(项目管理)
  2. idea(编译器)
  3. jdk1.8(Java环境)
  4. MySQL5.6(MySQL数据库)

2. 创建项目

  1. 在 idea 中创建普通的 maven 项目
  2. 新建 resources 目录用来存放配置文件

3. 配置 pom.xml(导入 jar 包)

<properties>
<aspectj.version>1.8.1</aspectj.version>
<aopalliance.version>1.0</aopalliance.version>
<!--spring版本-->
<spring.version>5.0.8.RELEASE</spring.version>
</properties> <dependencies> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency> <!--spring-jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency> <!--测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency> <!--spring 面向切面start-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>${aopalliance.version}</version>
</dependency>
<!--spring 面向切面end--> <!--MySQL 驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!--c3p0连接池-->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
</dependencies>

4. 配置文件(resources 目录下)

  1. db.properties
#用户名
jdbc.user=root
#登录密码
jdbc.password=123456
#驱动
jdbc.driverClass=com.mysql.jdbc.Driver
#连接路径
jdbc.jdbcUrl=jdbc:mysql:///test #初始化连接数量
jdbc.initPoolSize=5
#最大连接数
jdbc.maxPoolSize=10

db.properties 是数据库配置文件

  1. applicationContext.xml
<?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"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!--自动扫描包,此处 com.tuck.jdbc 改成自己实际项目包路径-->
<!--扫描 com.ordust 包及子包中所有的组件类-->
<context:component-scan base-package="com.ordust.jdbc"/> <!--导入资源文件-->
<context:property-placeholder location="classpath:db.properties"/> <!--配置 c3p0 数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
<property name="driverClass" value="${jdbc.driverClass}"/> <property name="initialPoolSize" value="${jdbc.initPoolSize}"/>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"/>
</bean> <!--配置 JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>

applicationContext.xml 是 spring 的配置文件

5. 创建测试数据库

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` varchar(50) NOT NULL COMMENT '姓名',
`age` int(11) NOT NULL COMMENT '年龄',
`teacher_id` int(11) NOT NULL COMMENT '老师工号',
PRIMARY KEY (`id`),
KEY `teacher_id` (`teacher_id`),
CONSTRAINT `student_ibfk_1` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '工号',
`name` varchar(50) NOT NULL COMMENT '姓名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

student 表与 teacher 表中主键为学号,为演示方便,设置成自增

插入数据

insert into `teacher` (`id`, `name`) values('1','张三');
insert into `teacher` (`id`, `name`) values('2','李四');
insert into `teacher` (`id`, `name`) values('3','王五'); insert into `student` (`id`, `name`, `age`, `teacher_id`) values('1','AA','10','1');
insert into `student` (`id`, `name`, `age`, `teacher_id`) values('2','BB','11','1');
insert into `student` (`id`, `name`, `age`, `teacher_id`) values('3','CC','12','2');

6. 新建实体类

  1. Teacher.java
public class Teacher {
private int id;//老师工号
private String name;//老师姓名 /*省略对应的 setter getter 和 toString 方法*/
}
  1. Student.java
public class Student {
private int id;//学生学号
private String studentName;//学生姓名
private int age;//年龄
private Teacher teacher;
/*省略对应的 setter getter 和 toString 方法*/
}

7. 持久层(dao)

import com.ordust.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository; import java.util.List; @Repository //标识为持久层组件
public class StudentDao { @Autowired //自动装配jdbcTemplate
private JdbcTemplate jdbcTemplate; /**
* 添加、修改、删除一个student对象
* 此处只实现 修改
*
* @param student 学生实体类
* @return 返回操作结果
*/
public int testUpdate(Student student) {
String sql = "update student set name = ?, age = ? where id = ?";
return jdbcTemplate.update(sql, student.getStudentName(), student.getAge(), student.getId());
} /**
* 执行批量更新:批量的 INSERT, UPDATE, DELETE
*
* @param batchArgs Object[] 的 list 集合
* @return 返回操作结果
*/
public int[] testBatchUpdate(List<Object[]> batchArgs) {
String sql = "INSERT INTO student VALUES(null,?,?,?)";
return jdbcTemplate.batchUpdate(sql, batchArgs);
} /**
* 从数据库中读取一条记录,得到对应的一个对象
* 注意使用的方法为 queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args)
*
* @param id 需要查找的id
* @return 返回student对象
*/
public Student testQueryForObject(int id) {
/**
* 1、使用 sql 中的列的别名完成列名和类的属性名的映射 如下面sql语句:name studentName
* 2、JdbcTemplate 不支持级联属性,此处 teacher.id 值为空
*/
String sql = "SELECT id, name studentName , age, teacher_id AS `teacher.id` FROM student WHERE id=?";
BeanPropertyRowMapper<Student> rowMapper = new BeanPropertyRowMapper<Student>(Student.class);
return jdbcTemplate.queryForObject(sql, rowMapper, id);
} /**
* 得到实体类集合
* 注意调用的不是 queryForList 方法
*
* @param id 参数
* @return student 集合
*/
public List<Student> testQueryForList(Integer id) {
String sql = "SELECT id, name studentName, age FROM student WHERE id > ?";
BeanPropertyRowMapper<Student> rowMapper = new BeanPropertyRowMapper<Student>(Student.class);
return jdbcTemplate.query(sql, rowMapper, id);
} /**
* 获取单个列的值,或做统计查询
* 使用 queryForObject(String sql, Class<T> requiredType) 方法
*/
public Integer testQueryForObject2() {
String sql = "select count(*) from student";
return jdbcTemplate.queryForObject(sql, Integer.class);
} }

8. 测试(test)

import com.ordust.dao.StudentDao;
import com.ordust.entity.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate; import java.util.ArrayList;
import java.util.List; /**
* 测试类,用来测试 StudentDao 类
*/
public class Demo {
private ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
private StudentDao studentDao = context.getBean(StudentDao.class); /**
* 执行 INSERT, UPDATE, DELETE
*/
@Test
public void testUpdate() {
Student student = new Student();
student.setStudentName("哈哈哈");
student.setAge(22);
student.setId(3);
int i = studentDao.testUpdate(student);
System.out.println(i);
} @Test
public void testBatchUpdate() {
List<Object[]> batchArgs = new ArrayList<Object[]>(); batchArgs.add(new Object[]{"鼠大王", 22, 1});
batchArgs.add(new Object[]{"东侧", 22, 2});
batchArgs.add(new Object[]{"嘻嘻", 22, 3}); studentDao.testBatchUpdate(batchArgs);
} @Test
public void testQueryForObject() {
int id = 1;
Student student = studentDao.testQueryForObject(id);
System.out.println(student);
} @Test
public void testQueryForList() {
List<Student> students = studentDao.testQueryForList(1);
for (Student student : students) {
System.out.println(student);
}
} @Test
public void testQueryForObject2() {
Integer integer = studentDao.testQueryForObject2();
System.out.println(integer);
}
}

9. 下载源码

spring-jdbctemplate-annotation

spring+JdbcTemplate简单使用(一)的更多相关文章

  1. Spring JDBCTemplate 简单使用

    Spring JDBCTemplate applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8&q ...

  2. (转)Spring JdbcTemplate 方法详解

    Spring JdbcTemplate方法详解 文章来源:http://blog.csdn.net/dyllove98/article/details/7772463 JdbcTemplate主要提供 ...

  3. [转]Spring JdbcTemplate 查询分页

    原文:http://blog.csdn.net/xiaofanku/article/details/4280128 现在进行的项目由于数据库的遗留原因(设计的不堪入目)不能用hibernate.所以用 ...

  4. Spring JdbcTemplate 的使用与学习(转)

    紧接上一篇 (JdbcTemplate是线程安全的,因此可以配置一个简单的JdbcTemplate实例,将这个共享的实例注入到多个DAO类中.辅助的文档) Spring DAO支持 http://ww ...

  5. 使用Spring JDBCTemplate简化JDBC的操作

    使用Spring JDBCTemplate简化JDBC的操作 接触过JAVA WEB开发的朋友肯定都知道Hibernate框架,虽然不否定它的强大之处,但个人对它一直无感,总感觉不够灵活,太过臃肿了. ...

  6. Apache Phoenix JDBC 驱动和Spring JDBCTemplate的集成

    介绍:Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排运行以生成标准的JDBC结果集. 直接使用HBase API.协同处理器与自己定义过滤器.对于简单查询来说,其性能 ...

  7. JAVA入门[18]-JdbcTemplate简单实例

    一.关于JdbcTemplate JdbcTemplate是最基本的Spring JDBC模板,这个模板支持简单的JDBC数据库访问功能以及基于索引参数的查询. Spring数据访问模板:在数据库操作 ...

  8. Spring JdbcTemplate框架搭建及其增删改查使用指南

    Spring JdbcTemplate框架搭建及其增删改查使用指南 前言: 本文指在介绍spring框架中的JdbcTemplate类的使用方法,涉及基本的Spring反转控制的使用方法和JDBC的基 ...

  9. Spring JdbcTemplate 与 事务管理 学习

    Spring的JDBC框架能够承担资源管理和异常处理的工作,从而简化我们的JDBC代码, 让我们只需编写从数据库读写数据所必需的代码.Spring把数据访问的样板代码隐藏到模板类之下, 结合Sprin ...

随机推荐

  1. mybatis初步理解

    mybatis概念   mybatis 是一款轻量级的orm的数据持久框架,封装jdbc 对开发提供了便利,但是性能会比jdbc低,从开发的角度来说,现在是比较流行的 掌握上比较容易,也支持缓存,级联 ...

  2. 详解微信小程序支付流程

    转发博主 https://blog.csdn.net/qq_38378384/article/details/80882980 花了几天把小程序的支付模块接口写了一下,可能有着公众号开发的一点经验,没 ...

  3. 一些基础的ES6 语法

    <script> window.onload = function () { //---------------------------let----------------------- ...

  4. VLAN 基础设置及Aceess接口

    实验内容 本实验模拟企业网络场景.公司内网是一一个大的局域网,二层交换机S1放置在一楼,在一楼办公的部门有IT部和人事部;二层交换机S2放置在二楼,在二楼办公的部门有市场部和研发部.由于交换机组成的是 ...

  5. synchronized的底层实现原理

    转自:http://www.cnblogs.com/paddix/p/5367116.html 如果对上面的执行结果还有疑问,也先不用急,我们先来了解Synchronized的原理,再回头上面的问题就 ...

  6. 使用ssh协议在linux主机之间快速上传和下载文件

    scp 要上传的文件 上传主机用户名@主机地址:要上传的主机目录 例如: scp *20181111*.gz inas@10.2.13.57:/INAS/dsgbak/20181110 表示将当前目录 ...

  7. SCUT - 11 - 被钦定的选手 - 质因数分解

    https://scut.online/p/11 T了好多次,还想用mutimap暴力分解每个数的质因数.后来记录每个数的最小质因子过了. #include <bits/stdc++.h> ...

  8. 一台电脑关联多个git账号

    一台电脑连接多个git账号 现需要一台电脑连接gitlab,github,码云,之前的操作时,用公司账号,在这几个地方都注册一遍,导致自己就有两类号,一个自己的,一个公司的,这样也是可以,但总是不太好 ...

  9. linux NFS 客户端的安装

    1. 安装 showmount [root@allentuns ~]# yum -y install showmount 2. 查看服务器共享 [root@allentuns ~]# showmoun ...

  10. pg_ctl - 启动,停止和重启 PostgreSQL 服务器

    SYNOPSIS pg_ctl start [ -w ] [ -s ] [ -D datadir] [ -l filename] [ -o options] [ -p path] pg_ctl sto ...