• spring jdbc


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

    DBCP(DataBase Connection Pool)数据库连接池,是java数据库连接池的一种,由
    Apache开发,通过数据库连接池,可以让程序自动管理数据库连接的释放和断开。

    DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池
    项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-
    dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以
    通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时
    直接到连接池中申请一个就行,用完后再放回去。

    使用,首先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);--查询聚合函数 count avg max min

    ---注意我们也可以是用匿名类简化一下
    -------------------------------------
    public List<User> getAllUser(){
    String sql="select * from users";
    List<User> list=jdbcTemplate.query(sql,new RowMapper(){

    @Override
    public Object mapRow(ResultSet arg0, int arg1)
    throws SQLException {
    User u=new User();
    if(arg0!=null){
    u.setUserId(arg0.getInt("user_id"));
    u.setUserName(arg0.getString
    ("user_name"));
    u.setUserPwd(arg0.getString("user_pwd"));
    u.setUserId(arg0.getInt("user_type"));
    }
    return u;
    }

    });
    return list;
    }
    ----------------------------------
    ----------------------------------
    多表
    public List<User> getAllUserAndInfo(){
    String sql="select
    u.user_name,u.user_type,i.info_nickName,i.info_email from users u left
    join userInfo i on u.user_id=i.user_id ";
    List<User> list=jdbcTemplate.query(sql,new RowMapper(){

    @Override
    public Object mapRow(ResultSet arg0, int arg1)
    throws SQLException {
    User u=new User();
    if(arg0!=null){
    u.setUserName(arg0.getString
    ("user_name"));
    u.setUserType(arg0.getInt("user_type"));
    UserInfo info=new UserInfo();
    info.setInfoEmail(arg0.getString
    ("info_email"));
    info.setInfoNickName(arg0.getString
    ("info_nickName"));
    u.setInfo(info);
    }
    return u;
    }

    });
    return list;
    }
    ----------------------------------

    注意这里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了

    注意命名规则user_id---userId

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

    <context:property-placeholder location="classpath:db.properties"/>
    配置jdbc的 properties 文件时。把这一句加在配jdbc上面,用el表达式从中取值
    properties 文件

    jdbc.user=root
    jdbc.password=796969
    jdbc.driverClass=com.mysql.jdbc.Driver
    jdbc.jdbcUrl=jdbc:mysql://localhost:3306/forestpro?
    useUnicode=true&amp;characterEncoding=utf8
    ------------------------------------------------
    <context:property-placeholder location="classpath:db.properties"/>
    <bean id="dataSource" destroy-method="close"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"
    value="${jdbc.driverClass}"></property>
    <property name="url" value="${jdbc.jdbcUrl}"></property>
    <property name="username" value="${jdbc.user}"></property>
    <property name="password"
    value="${jdbc.password}"></property>
    <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"></property>
    </bean>

  • 相关阅读:
    【计算机网络】WebSocket实现原理分析
    【计算机网络】如何让Ajax通信过程携带Cookie呢?
    【计算机网络】HTTPS协议的传输细节及过程分析
    【计算机网络】UDP基础知识总结
    前端知识体系-NodeJS相关】NodeJS基础知识全面总结
    【前端知识体系-NodeJS相关】对NodeJS模块机制的理解
    【前端知识体系-NodeJS相关】对于EventLoop(事件轮询)机制你到底了解多少?
    【前端知识体系-JS相关】你真的了解JavaScript编译解析的流程吗?
    【前端知识体系-NodeJS相关】浅谈NodeJS中间件
    linux安装electron
  • 原文地址:https://www.cnblogs.com/ZXiaocui/p/6556524.html
Copyright © 2020-2023  润新知