@

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. charles_01_打断点修改接口请求&返回数据

    前言 测试过程中,为了模拟某场景测试,经常需要修改接口请求或者返回数据.可通过抓包工具打断点,实现模拟测试场景.常用的抓包工具charles和fiddler均可打断点mock数据.由于小编安装了cha ...

  2. linux(centos7.0以上)下对mysql数据库的导入导出

    1:查看mysql安装路径: 指令 ps -ef|grep mysql 得出结果 root 968 1 0 18:25 ? 00:00:00 /bin/sh /usr/local/mysql/bin/ ...

  3. "SQLServer复制需要有实际的服务器名称才能连接到服务器,请指定实际的服务器名"

    最近在学习SQL SERVER的高级复制技术的时候,遇到一个小问题,就是用本地SQL SERVER连接服务器的数据库时,在查看复制功能的发布服务器时,连接不上,弹出一个错误提示框架,如下:原来在自己本 ...

  4. 一次特殊的“VARCHAR转numeric失败”错误记录

    今天接触到一个很有意思的问题.当我在执行一条INSERT的sql语句时,他总是报字符串转数字类型失败. 问题 首先,该表中的所有数字类型的字段都是非必填,其次,每个数字类型的字段都有默认值.最令我感到 ...

  5. 关于toString()和valueOf()以及Object.prototype.toString.call()的结合理解

    一.先说说String(): String()是全局函数,把对象的值转换为字符串. 语法:String(obj); 任何值(对象)都有String()方法,执行过程是这样的:首先,如果该对象上有toS ...

  6. java_第一年_JavaWeb(14)

    EL :EL表达式主要用于获取数据.执行运算.获取对象.调用java方法: 获取数据 语法:"${标识符}" 会调用pageContext.findAttribute方法,从pag ...

  7. java变量的类型

    变量的类型 一 按数据类型分: 1.基本数据类型 : 整型 : byte (1字节 -   (-128  ~  127)) short (2字节) int (4字节) long (8字节) 浮点型 : ...

  8. 本地启oracle实例服务无法重启,协议适配器错误

    今天遇到一位朋友的oracle实例服务无法起来,启动时报错: 分析的原因是可能早上服务器突然断电造成的,经过对tns的测试 经过我们讨论和诊断,最后诊断的处理方法是将实例删了重装,处理后服务恢复正常: ...

  9. 搜索---DFS

    DFS   广度优先一层一层遍历,每一层得到的所有新节点,要用队列存储起来以备下一层遍历的时候再遍历.   而深度优先遍历搜索在得到一个新节点时立即对新节点进行遍历:从节点0出发开始遍历,得到新节点6 ...

  10. SQL SERVER 数据库跨服务器备份

    原文:https://www.cnblogs.com/jaday/p/6088200.html 需求介绍:每天备份线上正式库并且把备份文件复制到测试服务器,测试服务器自动把数据库备份文件还原. 方案介 ...