1、最主要的代码

Spring 配置文件(beans.xml)

     <!-- 连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 注册驱动 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<!-- 数据库连接 -->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/school"></property>
<!-- 用户 -->
<property name="user" value="root"></property>
<!-- 密码 -->
<property name="password" value="123456"></property>
<!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize" value="3"></property>
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize" value="100"></property>
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
<property name="maxStatements" value="200"></property>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement" value="2"></property>
</bean> <!-- Spring提供的,用来代替JDBC连接数据库等操作 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean> <!-- Dao层 -->
<bean id="userDao" class="com.shore.dao.impl.UserDao">
<!-- jdbcTemplate:Spring提供的,用来 在做CRUD操作时,替代打开/获取连接等等(Connection、Statement、ResultSet),固定步骤 -->
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>

2、完整代码例子

我用到的jar包:

    

实例演示:

数据库建表语句

 create database school; -- 创建数据库
use school; -- 使用school数据库
create table user( -- 创建user表
id int(4) primary key auto_increment,
name varchar(20) not null,
age int(4) not null
);

User 实体类

 package com.shore.entity;

 /**
* @author DSHORE/2019-11-9
*
*/
public class User {
private Integer id;
private String name;
private Integer age; public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}

IUserDao 接口类

 package com.shore.dao;

 import java.util.List;

 import com.shore.entity.User;

 /**
* @author DSHORE/2019-11-9
*
*/
public interface IUserDao { public void save(User user);//增
public void delete(Integer id);//删
public void update(User user);//改
public User findById(Integer id);//根据id查询
public List<User> listAll();//查询所有
}

UserDao 接口实现类

 package com.shore.dao.impl;

 import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper; import com.shore.dao.IUserDao;
import com.shore.entity.User; /**
* @author DSHORE/2019-11-9
*
*/
public class UserDao implements IUserDao {
//注入jdbcTemplate(Spring提供的)
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
} @Override //添加
public void save(User user) {
String sql = "insert into user(name,age) values(?,?)";
jdbcTemplate.update(sql, user.getName(),user.getAge());
} @Override //删除
public void delete(Integer id) {
jdbcTemplate.update("delete from user where id = ?", id);
} @Override //修改
public void update(User user) {
String sql = "update user set age = ? where id = ?";
jdbcTemplate.update(sql, user.getAge(), user.getId());
} @Override //根据id查询
public User findById(Integer id) {
String sql = "select * from user where id=?";
List<User> list = jdbcTemplate.query(sql, new MyResult(), id);
if (list != null && list.size() > 0) {
return list.get(0);
}
return null;
} @Override //查询所有
public List<User> listAll() {
String sql = "select * from user";
List<User> list = jdbcTemplate.query(sql, new MyResult());
return list;
} //内部类 此处的作用:把findById()和listAll()的公共部分代码提出来
class MyResult implements RowMapper<User>{
@Override
// 要把每一行封装成一个User对象
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
return user;
}
}
}

Spring 配置文件(beans.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:aop="http://www.springframework.org/schema/aop"
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.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 注册驱动 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<!-- 数据库连接 -->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/school"></property>
<!-- 用户 -->
<property name="user" value="root"></property>
<!-- 密码 -->
<property name="password" value="root"></property>
<!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize" value="3"></property>
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize" value="100"></property>
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
<property name="maxStatements" value="200"></property>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement" value="2"></property>
</bean> <!-- Spring提供的,用来代替JDBC连接数据库等操作 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean> <!-- Dao层 -->
<bean id="userDao" class="com.shore.dao.impl.UserDao">
<!-- jdbcTemplate:Spring提供的,用来 在做CRUD操作时,替代打开/获取连接等等(Connection、Statement、ResultSet),固定步骤 -->
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
</beans>

测试类

 package com.shore.test;

 import java.util.List;

 import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.shore.dao.IUserDao;
import com.shore.entity.User; /**
* @author DSHORE/2019-11-9
*
*/
public class MyTest { private static ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); @Test //添加
public void testSaveUser() {
User user = new User();
user.setName("李四");//插入两条数据:张三,18 和 李四,20
user.setAge(20);
IUserDao userDao = (IUserDao) context.getBean("userDao");
userDao.save(user);
} @Test //删除
public void testDelete() {
IUserDao userDao = (IUserDao) context.getBean("userDao");
userDao.delete(3);
} @Test //修改
public void testUpdate() {
IUserDao userDao = (IUserDao) context.getBean("userDao");
User user = userDao.findById(2);
user.setAge(26);
userDao.update(user);
} @Test //根据id查询
public void testFindById() {
IUserDao userDao = (IUserDao) context.getBean("userDao");
User user = userDao.findById(2);
System.out.println(user); //返回值:com.shore.entity.User@7df1bd98
} @Test //查询所有
public void testListAll() {
IUserDao userDao = (IUserDao) context.getBean("userDao");
List<User> users = userDao.listAll();
System.out.println(users); //返回值:[com.shore.entity.User@58ca3783, com.shore.entity.User@4402a6ff]
}
}

以上代码,均测试成功。

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/11827880.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

Java进阶知识23 Spring对JDBC的支持的更多相关文章

  1. Java进阶知识15 Spring的基础配置详解

    1.SSH各个的职责 Struts2:是web框架(管理jsp.action.actionform等).Hibernate:是ORM框架,处于持久层.Spring:是一个容器框架,用于配置bean,并 ...

  2. Java进阶知识20 Spring的代理模式

    本文知识点(目录): 1.概念  2.代理模式      2.1.静态代理      2.2.动态代理      2.3.Cglib子类代理 1.概念 1.工厂模式  2. 单例模式 代理(Proxy ...

  3. Java进阶知识25 Spring与Hibernate整合到一起

    1.概述 1.1.Spring与Hibernate整合关键点 1) Hibernate的SessionFactory对象交给Spring创建.    2) hibernate事务交给spring的声明 ...

  4. Java进阶知识24 Spring的事务管理(事务回滚)

    1.事务控制概述   1.1.编程式事务控制         自己手动控制事务,就叫做编程式事务控制.         Jdbc代码: connection.setAutoCommit(false); ...

  5. Java进阶知识17 Spring Bean对象的创建细节和创建方式

    本文知识点(目录): 1.创建细节         1) 对象创建: 单例/多例         2) 什么时候创建?         3)是否延迟创建(懒加载)         4) 创建对象之后, ...

  6. Java进阶知识22 Spring execution 切入点表达式

    1.概述   切入点(execution ):可以对指定的方法进行拦截,从而给指定的类生成代理对象.(拦截谁,就是在谁那里切入指定的程序/方法) 格式: execution(modifiers-pat ...

  7. Java进阶知识21 Spring的AOP编程

    1.概述 Aop:(Aspect Oriented Programming)面向切面编程          功能: 让关注点代码与业务代码分离! 关注点:重复代码就叫做关注点:切面: 关注点形成的类, ...

  8. Java进阶知识18 Spring对象依赖关系的几种写法

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  9. Java进阶知识16 Spring创建IOC容器的两种方式

    1.直接得到 IOC 容器对象 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("app ...

随机推荐

  1. spring 框架的核心总结

    最近在学习Java语言,从而也学习了SpringFramework 这个大名鼎鼎的框架.从而做一些的记录. 题外话: 学习过几种不同的语言,后来知道所有的编程语言里所有的概念翻来覆去都是一样的事物,只 ...

  2. //统计报表-供水量统计主列表分页查询 Element-ui的分页插件

    <!-- //分页 --> <div class="pagination">时间(月) <el-pagination @current-change= ...

  3. Android 把枪/PDA 扫描头自回车没用 处理方法

    XML 控件加上属性 android:imeOptions="actionNone"

  4. Html5+Mui前端框架,开发记录(四):下拉菜单绑定数据、搜索、时间控件

    1.下拉菜单绑定数据,选择后回传值 1)html: <div class="mui-input-row"> <label>xxx:</label> ...

  5. CSS图片Img等比例缩放且居中显示

    常用来做图片放大显示的遮罩层imgScale HTML <div id="imgScale" > <img src=""> </d ...

  6. 当SAP云平台account的service Marke place里找不到Machine Learning服务该怎么办

    问题症状: 我在CloudFoundry环境的Service Market place里根本找不到Leonardo ML foundation这组服务. 解决方案: 进入global Account- ...

  7. 作为一个java高级工程师的进阶之路

    本文可能可能更偏向于是内心的独白篇和面试技巧总结 一.独白 之前也面试别人,现在轮到自己找工作,怎么说呢,每个面试官的看法不一样,面试的方式就不一样,比如我面试别人我喜欢问项目中他用到了那些,然后针对 ...

  8. DNS原理极限剖析

    how does DNS server work DNS Root Servers: The most critical infrastructure on the internet What is ...

  9. 网络分类及OSI七层模型

    一.网络分类: 局域网(LAN)是指在某一区域内由多台计算机互联成的计算机组.一般是方圆几千米以内.局域网可以实现文件管理.应用软件共享.打印机共享.工作组内的日程安排.电子邮件和传真通信服务等功能. ...

  10. 利用CodeBlocks结合freeglut快速搭建OpenGL开发环境

    利用CodeBlocks结合freeglut快速搭建OpenGL开发环境 2018-12-19 10:15:48 再次超越梦想 阅读数 180更多 分类专栏: 我的开发日记   版权声明:本文为博主原 ...