• Java进阶知识24 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); //返回值:com.shore.entity.User@7df1bd98
    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); //返回值:[com.shore.entity.User@58ca3783, com.shore.entity.User@4402a6ff]
    55     }
    56 }

    以上代码,均测试成功。

    原创作者:DSHORE

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

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

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

  • 相关阅读:
    在日期选择轮中选择的时间转换成年龄
    字符串转换成NSDate类型的 为nil解决方法
    字符串与数组互转
    使用ASI传递post表单..参数是数组
    java synchronized的四种用法
    java 多线程实现的四种方式
    java 高性能Server —— Reactor模型单线程版
    java nio socket使用示例
    java.nio.Buffer 中的 flip()方法
    java NIO 详解
  • 原文地址:https://www.cnblogs.com/dshore123/p/11827880.html
Copyright © 2020-2023  润新知