• Spring JdbcTemplate详解及项目中的运用


    1.Spring对不同的持久化支持:

    Spring为各种支持的持久化技术,都提供了简单操作的模板和回调

    ORM持久化技术 模板类
    JDBC org.springframework.jdbc.core.JdbcTemplate
    Hibernate5.0 org.springframework.orm.hibernate5.HibernateTemplate
    IBatis(MyBatis) org.springframework.orm.ibatis.SqlMapClientTemplate
    JPA org.springfrmaework.orm.jpa.JpaTemplate

    2.JdbcTemplate简介

      Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。

      JdbcTemplate位于中。其全限定命名为org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate还需一个这个包包含了一下事务和异常控制

      

    3.JdbcTemplate主要提供以下五类方法:

    • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;

    • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;

    • query方法及queryForXXX方法:用于执行查询相关语句;

    • call方法:用于执行存储过程、函数相关语句。

    4.batchUpdate()批量插入、更新和删除方法

     

    复制代码
    1 String sql="insert into user (name,deptid) values (?,?)";
    2 
    3 List<Object[]> batchArgs=new ArrayList<Object[]>();
    4 batchArgs.add(new Object[]{"caoyc",6});
    5 batchArgs.add(new Object[]{"zhh",8});
    6 batchArgs.add(new Object[]{"cjx",8});
    7 
    8 jdbcTemplate.batchUpdate(sql, batchArgs);
    复制代码

    增:

    AspDaoUtil.getJdbcTemplate().executeUpdate(INSERT_SQL,new Object[]{

    pkid,field_main.get("mdjlx") 
    });

    删:

    AspDaoUtil.getJdbcTemplate().executeUpdate(DELETE_SQL,new Object[]{
    pkid
    });

    改:

    AspDaoUtil.getJdbcTemplate().executeUpdate(update_electronicarchives_sql,new Object[]{
    dzwjh,dzwjh,pk_id
    });

    查1:查询条件为主键,数据唯一

    FieldList field_main = AspDaoUtil.getJdbcTemplate().queryField(QUERY_SQL, new Object[]{ pkid });

    查2:查询条件不为主键,数据可能出现多条

    RowList rowList_gdpz = AspDaoUtil.getJdbcTemplate().queryRowList(gdpz_query_sql, new Object[]{pk_id,mdjlx});
    for (int r = 0; r < rowList_gdpz.size(); r++) {
    FieldList field_gdpz = rowList_gdpz.get(r);

    int xh = r + 1;
    fjmc = field_gdpz.get("FCAPTION")+xh;
    fileurl = field_gdpz.get("fpath");

    AspDaoUtil.getJdbcTemplate().executeUpdate(gdpz_insert_sql,new Object[]{
    pk_id,qlsxbm,qlsxmc,bmmc,bgqx,sxbbh,fjmc,field_gdpz.get("sfby"),fzxx2,"",bmbm,qlsxlx,fileurl
    });
    }

    5.事务

    事务开启:        AspDaoUtil.getJdbcTemplate().startTransaction();

    执行事务:   AspDaoUtil.getJdbcTemplate().commitTransaction();

    回滚事务:  AspDaoUtil.getJdbcTemplate().rollbackTransaction();

    6.项目模板:

    public class XXXXX {

    private static final String QUERY_BJ_SQL = "SELECT * FROM XXXX WHERE projid = ? ";


    private static final String UPDATE_CG_SQL = "UPDATE XXXXX SET tszt=?,tsjg=? WHERE projid=? ";
    protected static Logger log = Logger.getRootLogger();

    public void finish(String projid){

    AspDaoUtil.getJdbcTemplate().startTransaction();
    try{
    XXXXXX
    }catch (Exception e){
    e.printStackTrace();
    AspDaoUtil.getJdbcTemplate().rollbackTransaction();
    }
    }
    }

    7.选择自己的数据源

    7.1数据源配置 global-datasource.xml

    <?xml version="1.0" encoding="gb2312"?>
    <datasource-config>


    <!-- 数据库连接配置-Mysql版本-->
    <datasource name="XXX" class="jos.framework.jdbc.datasource.DruidDataSource" load="true" default="true" dialect="mysql">
    <!-- <property name="driver">com.mysql.jdbc.Driver</property>
    <property name="url">jdbc:mysql://ip地址:端口号/数据库名称?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=utf8</property>
    <property name="username">用户名</property>
    <property name="password">密码</property> -->


    <property name="initialPoolSize">2</property>
    <property name="maxPoolSize">200</property>
    <property name="minPoolSize">5</property>
    <property name="maxIdleTime">25000</property>
    <property name="maxStatements">0</property>
    <property name="preferredTestQuery">SELECT 1 FROM C3P0TESTTABLE</property>
    <property name="testConnectionOnCheckin">false</property>
    <property name="testConnectionOnCheckout">true</property>
    <property name="acquireIncrement">5</property>
    <property name="idleConnectionTestPeriod">18000</property>
    <property name="poolPreparedStatements">true</property>
    </datasource>

    <!-- 数据库连接配置-Mysql版本-->
    <datasource name="XXX" class="jos.framework.jdbc.datasource.DruidDataSource" load="true" default="false" dialect="mysql">
    <property name="driver">com.mysql.jdbc.Driver</property>
    <property name="url">jdbc:mysql://ip地址:端口号/数据库名称?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=utf8</property>
    <property name="username">用户名</property>
    <property name="password">密码</property>
    <property name="initialPoolSize">2</property>
    <property name="maxPoolSize">200</property>
    <property name="minPoolSize">5</property>
    <property name="maxIdleTime">25000</property>
    <property name="maxStatements">0</property>
    <property name="preferredTestQuery">SELECT 1 FROM C3P0TESTTABLE</property>
    <property name="testConnectionOnCheckin">false</property>
    <property name="testConnectionOnCheckout">true</property>
    <property name="acquireIncrement">5</property>
    <property name="idleConnectionTestPeriod">18000</property>
    <property name="poolPreparedStatements">true</property>
    </datasource>

    </datasource-config>

    7.2代码JdbcTemplate jdbcTemplate = new JdbcTemplate("XXX"); 

    7.2.1开启事务:jdbcTemplate.startTransaction();

      执行事务:jdbcTemplate.commitTransaction();

      回滚事务:jdbcTemplate.rollbackTransaction();

  • 相关阅读:
    黄聪:手机移动端建站Jquery+CSS3+HTML5触屏滑动特效插件、实现触屏焦点图、图片轮展图
    黄聪:VS2010开发如何在c#中使用Ctrl、Alt、Tab等全局组合快捷键
    利用python实现汉字转拼音
    python 获得质数
    将你的python转成exe格式
    python 动画
    python 饼状图
    python 抓屏
    python 图像迷糊
    python-opencv-圆、椭圆与任意多边形的绘制
  • 原文地址:https://www.cnblogs.com/tongcc/p/11011846.html
Copyright © 2020-2023  润新知