Java进阶知识23 Spring对JDBC的支持

1、最主要的代码

Spring 配置文件(beans.xml)

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

2、完整代码例子

我用到的jar包:

    

实例演示:

数据库建表语句

1 create database school; -- 创建数据库
2 use school; -- 使用school数据库3
4 create table user( -- 创建user表
5   id int(4) primary key auto_increment,
6   name varchar(20) not null,
7   age INT(4) not null
8 );

User 实体类

 1 package com.shore.entity;
 2
 3 /**
 4  * @author DSHORE/2019-11-9
 5  *
 6  */
 7 public class User {
 8     private Integer id;
 9     private String name;
10     private Integer age;
11
12     public Integer getId() {
13         return id;
14     }
15     public void setId(Integer id) {
16         this.id = id;
17     }
18
19     public String getName() {
20         return name;
21     }
22     public void setName(String name) {
23         this.name = name;
24     }
25
26     public Integer getAge() {
27         return age;
28     }
29     public void setAge(Integer age) {
30         this.age = age;
31     }
32 }

IUserDao 接口类

 1 package com.shore.dao;
 2
 3 import java.util.List;
 4
 5 import com.shore.entity.User;
 6
 7 /**
 8  * @author DSHORE/2019-11-9
 9  *
10  */
11 public interface IUserDao {
12
13     public void save(User user);//增
14     public void delete(Integer id);//删
15     public void update(User user);//改
16     public User findById(Integer id);//根据id查询
17     public List<User> listAll();//查询所有
18 }

UserDao 接口实现类

 1 package com.shore.dao.impl;
 2
 3 import java.sql.ResultSet;
 4 import java.sql.SQLException;
 5 import java.util.List;
 6
 7 import org.springframework.jdbc.core.JdbcTemplate;
 8 import org.springframework.jdbc.core.RowMapper;
 9
10 import com.shore.dao.IUserDao;
11 import com.shore.entity.User;
12
13 /**
14  * @author DSHORE/2019-11-9
15  *
16  */
17 public class UserDao implements IUserDao {
18     //注入jdbcTemplate(Spring提供的)
19     private JdbcTemplate jdbcTemplate;
20     public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
21         this.jdbcTemplate = jdbcTemplate;
22     }
23
24     @Override  //添加
25     public void save(User user) {
26         String sql = "insert into user(name,age) values(?,?)";
27         jdbcTemplate.update(sql, user.getName(),user.getAge());
28     }
29
30     @Override  //删除
31     public void delete(Integer id) {
32         jdbcTemplate.update("delete from user where id = ?", id);
33     }
34
35     @Override  //修改
36     public void update(User user) {
37         String sql = "update user set age = ? where id = ?";
38         jdbcTemplate.update(sql, user.getAge(), user.getId());
39     }
40
41     @Override  //根据id查询
42     public User findById(Integer id) {
43         String sql = "select * from user where id=?";
44         List<User> list = jdbcTemplate.query(sql, new MyResult(), id);
45         if (list != null && list.size() > 0) {
46             return list.get(0);
47         }
48         return null;
49     }
50
51     @Override  //查询所有
52     public List<User> listAll() {
53         String sql = "select * from user";
54         List<User> list = jdbcTemplate.query(sql, new MyResult());
55         return list;
56     }
57
58     //内部类     此处的作用:把findById()和listAll()的公共部分代码提出来
59     class MyResult implements RowMapper<User>{
60         @Override
61         // 要把每一行封装成一个User对象
62         public User mapRow(ResultSet rs, int rowNum) throws SQLException {
63             User user = new User();
64             user.setId(rs.getInt("id"));
65             user.setName(rs.getString("name"));
66                 return user;
67         }
68     }
69 }

Spring 配置文件(beans.xml)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:aop="http://www.springframework.org/schema/aop"
 5     xmlns:tx="http://www.springframework.org/schema/tx"
 6     xsi:schemaLocation="
 7        http://www.springframework.org/schema/beans
 8        http://www.springframework.org/schema/beans/spring-beans.xsd
 9        http://www.springframework.org/schema/tx
10        http://www.springframework.org/schema/tx/spring-tx.xsd
11        http://www.springframework.org/schema/aop
12        http://www.springframework.org/schema/aop/spring-aop.xsd">
13
14     <!-- 连接池 -->
15     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
16         <!-- 注册驱动 -->
17         <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
18         <!-- 数据库连接 -->
19         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/school"></property>
20         <!-- 用户 -->
21         <property name="user" value="root"></property>
22         <!-- 密码 -->
23         <property name="password" value="root"></property>
24         <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
25         <property name="initialPoolSize" value="3"></property>
26         <!--连接池中保留的最大连接数。Default: 15 -->
27         <property name="maxPoolSize" value="100"></property>
28         <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
29           属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
30          如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
31         <property name="maxStatements" value="200"></property>
32         <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
33         <property name="acquireIncrement" value="2"></property>
34     </bean>
35
36     <!-- Spring提供的,用来代替JDBC连接数据库等操作 -->
37     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
38         <property name="dataSource" ref="dataSource"></property>
39     </bean>
40
41     <!-- Dao层 -->
42     <bean id="userDao" class="com.shore.dao.impl.UserDao">
43         <!-- jdbcTemplate:Spring提供的,用来 在做CRUD操作时,替代打开/获取连接等等(Connection、Statement、ResultSet),固定步骤 -->
44         <property name="jdbcTemplate" ref="jdbcTemplate"></property>
45     </bean>
46 </beans>

测试类

 1 package com.shore.test;
 2
 3 import java.util.List;
 4
 5 import org.junit.Test;
 6 import org.springframework.context.ApplicationContext;
 7 import org.springframework.context.support.ClassPathXmlApplicationContext;
 8
 9 import com.shore.dao.IUserDao;
10 import com.shore.entity.User;
11
12 /**
13  * @author DSHORE/2019-11-9
14  *
15  */
16 public class MyTest {
17
18     private static ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
19
20     @Test  //添加
21     public void testSaveUser() {
22         User user = new User();
23         user.setName("李四");//插入两条数据:张三,18 和 李四,20
24         user.setAge(20);
25         IUserDao userDao = (IUserDao) context.getBean("userDao");
26         userDao.save(user);
27     }
28
29     @Test  //删除
30     public void testDelete() {
31         IUserDao userDao = (IUserDao) context.getBean("userDao");
32         userDao.delete(3);
33     }
34
35     @Test  //修改
36     public void testUpdate() {
37         IUserDao userDao = (IUserDao) context.getBean("userDao");
38         User user = userDao.findById(2);
39         user.setAge(26);
40         userDao.update(user);
41     }
42
43     @Test  //根据id查询
44     public void testFindById() {
45         IUserDao userDao = (IUserDao) context.getBean("userDao");
46         User user = userDao.findById(2);
47         System.out.println(user); //返回值:[email protected]
48     }
49
50     @Test  //查询所有
51     public void testListAll() {
52         IUserDao userDao = (IUserDao) context.getBean("userDao");
53         List<User> users = userDao.listAll();
54         System.out.println(users); //返回值:[[email protected], [email protected]]
55     }
56 }

以上代码,均测试成功。


原创作者:DSHORE

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

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

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

原文地址:https://www.cnblogs.com/dshore123/p/11827880.html

时间: 2024-10-29 17:11:54

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

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

1.概述   切入点(execution ):可以对指定的方法进行拦截,从而给指定的类生成代理对象.(拦截谁,就是在谁那里切入指定的程序/方法) 格式: execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?) 参数解析: modifiers-pattern?:指定方法的修饰符,支持通配符,该部分可以省略.(public/pr

Java进阶学习第十七天——JDBC入门学习

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.05.11 lutianfei none JDBC JDBC介绍 JDBC是什么? JDBC(Java Data Base Connectivity,java数据库连接) SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC. 简单说,就是可以直接通过java语言去操作数据库. jdbc是一套标准,它是由一些接口与类组成的. 组成JDBC的类和接口 java.sql 类:Drive

spring对JDBC的支持

传统应用程序开发中,进行JDBC编程是相当痛苦的,如下所示: Java代码   //cn.javass.spring.chapter7. TraditionalJdbcTest @Test public void test() throws Exception { Connection conn = null; PreparedStatement pstmt = null; try { conn = getConnection();              //1.获取JDBC连接 //2.声

(7)Spring对JDBC的支持

使用Spring JDBC的步骤 1.引入jar包 spring-jdbc-3.2.5.RELEASE.jar spring-tx-3.2.5.RELEASE.jar c3p0-0.9.1.2.jar mysql-connector-java-5.1.38-bin.jar 2.配置 c3p0数据库连接池的配置 JdbcTemplate对象 Dao对象 3.测试 applicationContext.xml <?xml version="1.0" encoding="UT

Spring框架学习六:Spring对JDBC的支持

JdbcTemplate简介 为了使JDBC更加易于使用,Spring 在 JDBC API 上定义了一个抽象层,以此建立一个 JDBC 存取框架 作为 Spring JDBC 框架的核心,JDBC 模板的设计目的是为不同类型的 JDBC 操作提供模板方法.每个模板方法都能控制整个过程,并允许覆盖过程中的特定任务.通过这种方式,可以在尽可能保留灵活性的情况下,将数据库存取工作量降到最低. #添加c3p0数据库连接池 jdbc.user=root jdbc.password=000 jdbc.jd

Java基础知识强化25:JDBC(Java Data Base Connectivity,java数据库连接)

JDBC  1.    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名. 2.     有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事.换言之,有了JDBC API,就不必为访问Sybase数据库专门写一

Java进阶知识

常见异常: 空指针异常NullPointerException,调用了未经初始化的对象或不存在的对象,或访问或修改了null对象的属性或方法; 找不到类名异常ClassNotFoundException,的确不存在,开发环境进行了调整或,如类的根目录结构.编译运行时发生变化的等; 类名不合法异常IllegalAgreementException,向方法传递了不合法或不正确的参数: 输入不匹配异常InputMismatchException,由scanner抛出表获取内容与期望类型的模式不一致或内

Spring 对JDBC的支持(JdbcTemplate)

Spring对数据库的操作,使用JdbcTemplate对象 需要引入相关的jar文件 如版本:(Spring核心jar包就不列了) spring-jdbc-3.2.5.RELEASE.jar spring-tx-3.2.5.RELEASE.jar C3P0连接池:c3p0-0.9.1.2.jar 数据库驱动包:mysql-connector-java-5.1.22-bin.jar 例:(对象的获取及注入通过spring来实现) 核心jdbc操作 1 package test.jdbc; 2 3

Spring对 JDBC 的支持,JdbcTemplate类的使用

导包:spring框架的包 和 连接数据库连接池的c3p0包 连接mysql数据库的包; 在src目录下建立jdbc.properties文件:存放连接数据库的属性值 jdbc.user=root jdbc.password=lxn123 jdbc.driverClass=com.mysql.jdbc.Driver jdbc.jdbcUrl=jdbc:mysql:///spring1 jdbc.initPoolSize=5 jdbc.maxPoolSize=10 在src目录下建立spring