spring与Dbcp

基于jdbc,操作数据库速度比较快,优于hibernate但是功能没hibernate强大,增删改可以用,查询用起来比较麻烦

使用,首先jar包支持
commons-pool.jar
commons-dbcp.jar
mysql-connector-java-5.1.12-bin.jar
在之前的基础上加上spring-tx-4.2.0.RELEASE 这个包
基础jar包

这里要使用dbcp的话我们首先需要做的是配置spring的dataSource 同样的这也是我们以后要使用数据库主要的核心
<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/emp" />
<property name="username" value="root" />
<property name="password" value="admin"/>
<property name="maxActive" value="10"></property>
<property name="initialSize" value="2"></property>
<property name="minIdle" value="2"></property>
<property name="maxIdle" value="3"></property>
</bean>
解释:
<property name="maxActive" value="10"></property> 连接池中最多10个链接
<property name="initialSize" value="2"></property> 池子创建好后一开始就有2个链接
<property name="minIdle" value="2"></property> 最小空闲数
<property name="maxIdle" value="3"></property>最大空闲数

配置好了之后我们就可以正常使用了,在类中要使用我们首先要见过这个dbcp注入到类中去
完成注入:
<bean name="userDaoImpl" class="com.spring.dbcp.UserDaoImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>

然后需要让你的类继承JdbcDaoSupport这个类就可以了(最简单的方式)
public class UserDaoImpl extends JdbcDaoSupport

最后this.getJdbcTemplate()--获得jdbc模板就可以了

不过这里很麻烦,因为要继承类,我们有一种不需要继承的写法
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>

然后在我们的类中
@Resource
private JdbcTemplate template;
这样就能获得了
案例:
演示增删改的操作

注意这个我们用的这个函数函数的有两个常用的参数update(sql,new Object[]{})----注意第一个参数是sql语句,如果有参数用占位符,第二个参数为设置占位符参数的位置

那我们的查询呢?
除了这个方法我们还有
queryForObject(sql,new UserMapper());---查处一个对象放在一个OBJECT中
queryForList(sql)---返回list数组对象

query(sql,rowMappwe)--查询结果集

queryForInt(sql);--查询聚合函数

这里比较麻烦的是查询这个东西,因为它首先需要的是一个映射表
public class UserMapper implements RowMapper

public Object mapRow(ResultSet rs, int index) throws SQLException {
User user=new User();
user.setId(rs.getInt("id"));
user.setEmail(rs.getString("email"));
user.setNickName(rs.getString("nickname"));
if(rs.getString("is_email_verify").equals("Y")){
user.setEmailVerify(true);
}else{
user.setEmailVerify(false);
}
user.setEmailVerifyCode(rs.getString("email_verify_code"));
user.setLastLoginIp(rs.getString("last_login_time"));
return user;
}

注意这里Spring2.5开始新增了一个类BeanPropertyRowMapper

我们可以这么玩
public List<User> findAll() {
String sql="select * from d_user";
return (List<User>) this.getJdbcTemplate().query(sql,new BeanPropertyRowMapper(User.class));---这里
}

我们就不用那么麻烦的去做一对mapper了

想一想它的好处坏处都有啥

配置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:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.2.xsd">
    <context:component-scan base-package="com.wode">
    </context:component-scan>
    <bean id="dataSource" destroy-method="close"
        class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/test" />
        <property name="username" value="root" />
        <property name="password" value="lovo" />
        <property name="maxActive" value="10"></property>
        <property name="initialSize" value="2"></property>
        <property name="minIdle" value="2"></property>
        <property name="maxIdle" value="3"></property>
    </bean>
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource" />
    </bean>

</beans>

在dao层:

@Repository
public class UserDaoImpl implements UserDao{
    @Resource
    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    /**
     * 增加用户
     */
    @Override
    public int addUser(User user) {
        String sql="INSERT INTO users VALUES(null,?,?)";
        int result=jdbcTemplate.update(sql, new Object[]{user.getUserName(),user.getUserPwd()});
        return result;
    }

    /**
     * 删除用户
     */
    @Override
    public int delUserById(int id) {
        String sql="DELETE FROM users WHERE USER_id=?";
        int result=jdbcTemplate.update(sql, new Object[]{id});
        return result;
    }

    /**
     * 修改用户
     */
    @Override
    public int updateUserById(int id,User user) {
        String sql="UPDATE users SET user_name=?,user_pwd=? WHERE user_id=?";
        int result=jdbcTemplate.update(sql, new Object[]{user.getUserName(),user.getUserPwd(),id});
        return result;
    }

    /**
     * 查看用户
     */
    @Override
    public User selectUserById(int id) {
        String sql="select * from users where user_id=?";
        User user=jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));
     return user;
    }

}

然后:

AbstractApplicationContext  atx=new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService  userService=(UserService) atx.getBean("userServiceImpl");

通过类似userService.updateUserById(user)的方法实现增删改查

时间: 2024-10-29 04:40:38

spring与Dbcp的相关文章

spring配置DBCP数据连接

DBCP连接池介绍 ----------------------------- 目前 DBCP 有两个版本分别是 1.3 和 1.4. DBCP 1.3 版本需要运行于 JDK 1.4-1.5 ,支持 JDBC 3. DBCP 1.4 版本需要运行于 JDK 1.6 ,支持 JDBC 4. 1.3和1.4基于同一套源代码,含有所有的bug修复和新特性.因此在选择DBCP版本的时候,要看你用的是什么JDK版本. DBCP1.2版本性能一般,比c3p0差挺多.DBCP1.4和1.3,配合(依赖)co

SSM整合(spring,spirngmvc,mybatis)

整合思路   准备环境:导入jar包(spring mybatis  dbcp连接池  mysql驱动包 log4j) 工程结构: --------------------------- 1.  整合dao mybatis和spring进行整合   applicationContext-dao.xml 配置: 1.数据源 2.SqlSessionFactory 3.mapper扫描器 创建po以及mapper(通过逆向工程,这里不再演示) 针对综合查询mapper,一般情况会有关联查询,建议自定

玩转spring boot——properties配置

前言 在以往的java开发中,程序员最怕大量的配置,是因为配置一多就不好统一管理,经常出现找不到配置的情况.而项目中,从开发测试环境到生产环境,往往需要切换不同的配置,如测试数据库连接换成生产数据库连接,若有一处配错或遗漏,就会带来不可挽回的损失.正因为这样,spring boot给出了非常理想的解决方案——application.properties.见application-properties的官方文档:http://docs.spring.io/spring-boot/docs/curr

[Spring框架]Spring JDBCTmplate基础入门总结.

前言:前面有讲过 Spring IOC以及AOP的基本使用方法, 这里就再来讲下Spring JDBCTemplate的使用方法. 一, 概述这里先说一下Spring 整合的一些模板: 从上图中可以看出 Spring为各种支持的持久化技术,都提供了简单操作的模板和回调. 二, 使用JdbcTemplate 2.1 Spring JDBC是Spring提供的持久层技术简化JDBC API开发,使用上和Apache公司的DBUtils框架非常类似 具体开发使用的jar包结构如图:    | 2.2,

jdbc基础 (五) 连接池与数据源 DBCP以及C3P0的使用

一.连接池的概念和使用 在实际应用开发中,特别是在WEB应用系统中,如果JSP.Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接.打开数据库.存取数据和关闭数据库连接等步骤,而连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃.数据库连接池技术是解决这个问题最常用的方法. 数据库连接池的主要操作如下: (1)建立数据库连接池对象. (2)按照事先指定的参数创建初始数量的数据库连

Spring配置连接池

---------------------siwuxie095 Spring 配置连接池 1.Spring 配置内置连接池 在 applicationContext.xml 中添加如下内容: <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName&qu

CP30,DBCP数据源配置

Spring中 CP30数据源配置 <!-- 加载属性文件 01--> <bean id= "propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" > <property name="location" > <value> classpath:jdbc.pr

Spring Boot application.properties

1 # =================================================================== 2 # COMMON SPRING BOOT PROPERTIES 3 # 4 # This sample file is provided as a guideline. Do NOT copy it in its 5 # entirety to your own application. ^^^ 6 # =======================

Spring Boot 揭秘与实战 附录 - Spring Boot 公共配置

Spring Boot 公共配置,配置 application.properties/application.yml 文件中. 摘自:http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html # =================================================================== # COMMON SPRING