Spring 中的特殊查询

Special query in Spring

我想使用这种查询将 table 上的数据插入到另一个

insert into mytable1 ( c1, c2 ) SELECT b1,b2 from mytable2;

我正在使用 spring,其中有一个我使用的 DAO class 的工作示例

    package gp.dao;

import gp.model.Medic;
import gp.model.MvtMedic;
import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedProperty;
import javax.sql.DataSource;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import gp.interfaces.InterfaceDao;

public class MvtMedicDaoImpl implements InterfaceDao, Serializable {

private static final long serialVersionUID = 1L;
private DataSource dataSource;



public DataSource getDataSource() {
    return dataSource;
}

public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
}


@Override
public void insert(Object obj) {
    // TODO Auto-generated method stub

    MvtMedic mvtMedic = (MvtMedic) obj;

    String sql = "INSERT INTO mvtstock ( codeproduit, typemvt,  quantite,"+
                "date_arrivee, date_expir, fournisseur, numbco, prix_unit)"+
                " VALUES (?,?,?,?,?,?,?,?)";

    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

    jdbcTemplate.update(sql, new Object[]{  mvtMedic.getCodeproduit(),"E",mvtMedic.getQuantite(),
                        mvtMedic.getDate_arrivee(), mvtMedic.getDate_expir(), mvtMedic.getFournisseur(), mvtMedic.getNumbco(),
                        mvtMedic.getPrix_unit()});


}

@Override
public void delete(Object obj) {
    // TODO Auto-generated method stub

}


@Override
public Object findById(Object ref) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void modify(Object obj) {
    // TODO Auto-generated method stub

}

@Override
public List<?> execRequete(String sql) {
    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

    @SuppressWarnings("unchecked")
    List<MvtMedic> listMvtMed = jdbcTemplate.query(sql, new BeanPropertyRowMapper(MvtMedic.class));

    return listMvtMed;
}

@Override
public List<MvtMedic> findAll() {
    // TODO Auto-generated method stub
    String sql = " SELECT m.codeproduit as codeproduit ,p.libelle as libelle,m.quantite as quantite,"
                + "coalesce(m.prix_unit, 0) as prix_unit,coalesce(m.prix_total, 0) as prix_total,m.fournisseur as fournisseur,m.numbco  as numbco,"
                + "m.date_arrivee as date_arrivee,m.date_expir as date_expir"
                + " FROM mvtstock m LEFT JOIN stockpharm p  ON m.codeproduit=p.codeproduit where typemvt='E'"
                + "order by m.date_arrivee desc"  ;

    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

    @SuppressWarnings("unchecked")
    List<MvtMedic> listMvtMed = jdbcTemplate.query(sql, new BeanPropertyRowMapper(MvtMedic.class));

    return listMvtMed;
}

@Override
public Object getLastId() {
    // TODO Auto-generated method stub
    return null;
}

}

现在我的问题是我应该如何使用插入方法来提供 select

(插入我的table1 ( c1, c2 ) SELECT b1,b2 from mytable2;) jdbcTemplate.update(...

的结果值
public void insert(Object obj) {
    // TODO Auto-generated method stub
    MvtMedic mvtMedic = (MvtMedic) obj;
    String sql = "INSERT INTO mvtstock ( codeproduit, typemvt,  quantite,"+
                "date_arrivee, date_expir, fournisseur, numbco, prix_unit)"+
                " VALUES (?,?,?,?,?,?,?,?)";

    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

    jdbcTemplate.update(sql, new Object[]{ // DATAS of The selec});


}

jdbcTemplate 执行您告诉它执行的任何内容。所以你可以这样做:

@Override
public void insert(Object obj) {   
    String sql = "insert into mytable1 ( c1, c2 ) SELECT b1,b2 from mytable2";

    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

    jdbcTemplate.update(sql);
}

PS: 最好创建一个 JdbcTemplate bean 作为单例并注入到 dao.Dont' 每次创建一个新的。