Java进阶知识23 Spring对JDBC的支持
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的支持的更多相关文章
- Java进阶知识15 Spring的基础配置详解
1.SSH各个的职责 Struts2:是web框架(管理jsp.action.actionform等).Hibernate:是ORM框架,处于持久层.Spring:是一个容器框架,用于配置bean,并 ...
- Java进阶知识20 Spring的代理模式
本文知识点(目录): 1.概念 2.代理模式 2.1.静态代理 2.2.动态代理 2.3.Cglib子类代理 1.概念 1.工厂模式 2. 单例模式 代理(Proxy ...
- Java进阶知识25 Spring与Hibernate整合到一起
1.概述 1.1.Spring与Hibernate整合关键点 1) Hibernate的SessionFactory对象交给Spring创建. 2) hibernate事务交给spring的声明 ...
- Java进阶知识24 Spring的事务管理(事务回滚)
1.事务控制概述 1.1.编程式事务控制 自己手动控制事务,就叫做编程式事务控制. Jdbc代码: connection.setAutoCommit(false); ...
- Java进阶知识17 Spring Bean对象的创建细节和创建方式
本文知识点(目录): 1.创建细节 1) 对象创建: 单例/多例 2) 什么时候创建? 3)是否延迟创建(懒加载) 4) 创建对象之后, ...
- Java进阶知识22 Spring execution 切入点表达式
1.概述 切入点(execution ):可以对指定的方法进行拦截,从而给指定的类生成代理对象.(拦截谁,就是在谁那里切入指定的程序/方法) 格式: execution(modifiers-pat ...
- Java进阶知识21 Spring的AOP编程
1.概述 Aop:(Aspect Oriented Programming)面向切面编程 功能: 让关注点代码与业务代码分离! 关注点:重复代码就叫做关注点:切面: 关注点形成的类, ...
- Java进阶知识18 Spring对象依赖关系的几种写法
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Java进阶知识16 Spring创建IOC容器的两种方式
1.直接得到 IOC 容器对象 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("app ...
随机推荐
- python之SQLite笔记
sqlite3 打开文件并创建游标 conn = sqlite3.connect('adressbook.db')c = conn.cursor() 连接对象:sqlite3.connect('数据文 ...
- 基于搜索的贝叶斯网络结构学习算法-K2
基于搜索的贝叶斯网络结构学习算法-K2 2018-04-05 19:34:18 ItsBlue 阅读数 3172更多 分类专栏: 贝叶斯网络 网络结构学习 版权声明:本文为博主原创文章,遵循CC ...
- Html Agility Pack 使用 XPath 选择器
想做一个爬虫程序,以前用的一直使用CSS选择器的html解析插件,最近做的项目想使用 Html Agility Pack 来做解析 Html Agility Pack使用 XPath 和 Linq 来 ...
- Html 中scroll offset client 总结
HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对 ...
- 冒泡(bubblesort)、选择排序、插入排序、快速排序
冒泡排序(bubblesort) 特点:通过换位置的方式,一直向上冒泡 package main import "fmt" func bubbleSortAsc(arrayA [] ...
- IE6图片透明问题
网上很多解决IE6下png透明问题的方案,但是经本人实践,有的时候有用,有的时候并不能解决自己的问题.当是后者的时候,想到另外一种办法,就是当在IE6.IE7下使用gif图片,自己在测试的时候,如果g ...
- 如何在 vue 2.0+ 中引入全局的stylus文件,且能正常
由于stylus在引用时,不能像一般的css文件直接在main.js中引用,就算引用了也会只能使用转换后的css,不能使用里面的函数,方法等,原因可能是:在这里引入会被直接编译成css,不能在别的模板 ...
- Python TCP通信之仿文件下载
TCP_文件下载_Client.py import socket def main(): # 创建TCP套接字 tcp_socket = socket.socket(socket.AF_INET, s ...
- 十年阿里架构师教你如何一举拿下阿里的Offer,(附面试技巧)
前言: 现在很多人即将毕业或者换工作面临找工作,为了帮助大家,遂写下这篇文章.如果你想进入BAT,抑或拿到高工资,无论你的基础如何,你至少要花三个月时间来准备简历.笔试题.面试题.对于没有项目经验,没 ...
- URL - Fiddler - IIS
URL和URI URI:Uniform Resource Identifier,唯一标识一个网络资源 URL:Uniform Resource Locator,指向网络资源地址 URL是URI的子集, ...