Spring的jdbcTemplate查询执行原生sql

  在spring与hibernate整合时进行数据库检索,执行原生sql:

  

复制代码
public AppointmentEvaluateVo searchMyfeedbackDetail(String accountId, String fbId) {

        String sql = "select ae.id as fbId ,ae.app_id as appId, a.app_no as appNo,"
                + "    si.service_item AS serItem,a.app_service_time as feedTime,ae.remark as"
                + " feedCon, cou.attitudeScore AS attitudeScore,cou.qualityScore AS qualityScore,"
                + "cou.prescriptionScore AS prescriptionScore from appointment_evaluate ae LEFT JOIN"
                + " appointment a ON ae.app_id=a.id LEFT JOIN organization_service_item     osi  "
                + "ON a.item_id=osi.id LEFT JOIN service_item si ON osi.service_item_id=si.id "
                + "LEFT JOIN  ( SELECT _a.item_id, count(_a.id)    AS orderNum,  _ae.attitude as "
                + "attitudeScore, _ae.quality as qualityScore, _ae.prescription as prescriptionScore  "
                + " FROM appointment _a RIGHT JOIN appointment_evaluate _ae ON `_a`.id = `_ae`.app_id "
                + " GROUP BY _a.item_id) cou ON osi.id = cou.item_id where 1=1 and     ae.creator='" + accountId
                + "'  and ae.id='" + fbId + "';";

        List rows = jdbcTemplate.queryForList(sql);
        AppointmentEvaluateVo av = new AppointmentEvaluateVo();
        Iterator ite = rows.iterator();
        while (ite.hasNext()) {
            Map avMap = (Map) ite.next();
            av.setFbId(avMap.get("fbId").toString());
            av.setAppId(avMap.get("appId").toString());
            av.setAppNo(avMap.get("appNo").toString());
            av.setSerItem(avMap.get("serItem").toString());
            av.setFeedTime(avMap.get("feedTime").toString());
            av.setFeedCon(avMap.get("feedCon").toString());
            av.setTotScore(avMap.get("prescriptionScore").toString());
            av.setTquaScore(avMap.get("qulityScore").toString());
            av.setSerScore(avMap.get("attitudeScore").toString());
        }
        return av;
    }
复制代码

  第二种:

  

1
2
3
4
5
6
7
8
9
10
11
public  Student findStudentById( int  id){
     String sql =  "select * from tb_student where id=?" ;
     final  Student student =  new  Student();
     jdbcTemplate.query(sql, new  Object[]{id}, new  RowCallbackHandler(){
         public  void  processRow(ReultSet resultSet)  throws  SQLException{
             student.setId(resultSet.getInt( "id" ));
             student.setName(resultSet.getString( "name" ));
         }
     });
     return  student;
}

  

 

 

增删改查简单示例:

复制代码
package com.demo.manager;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;

import com.demo.pojo.Account;

@Repository
public class AccountManager {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    /**
     * 添加
     * 
     * @param ac
     */
    public void addAccount(Account account) {

        jdbcTemplate.update("insert into tb_account(id,name,address,age) values (?,?,?,?)",
                new Object[] { StringUtils.hasText(account.getId()) ? account.getId() : UUID.randomUUID(),
                        StringUtils.hasText(account.getName()) ? account.getName() : "",
                        StringUtils.hasText(account.getAddress()) ? account.getAddress() : "", account.getAge() });
    }

    /**
     * 根据id获取账户信息
     * @param a
     * @return
     */
    public Account getAccount(Account a) {
        Account account = jdbcTemplate.queryForObject("select * from tb_account where id=?", new Object[] { a.getId() },
                new BeanPropertyRowMapper<>(Account.class));
        return account;
    }

    public List<Account> getAll() {
        List<Account> accounts = jdbcTemplate.query("select * from tb_account",new RowMapper<Account>() {

            @Override
            public Account mapRow(ResultSet rs, int num) throws SQLException {
                
                Account account = new Account();
                account.setId(rs.getString(1));
                account.setName(rs.getString(2));
                account.setAddress(rs.getString(3));
                account.setAge(rs.getInt(4));
                return account;
            }
        });
        return accounts;
    }
    
    /**
     * 删除
     * 
     * @param ac
     */
    public void deleteAccount(Account account) {

        jdbcTemplate.update("delete from tb_account where id=?",
                new Object[] { account.getId() });
    }
    
    /**
     * 更新
     * 
     * @param ac
     */
    public void updateAccount(Account account) {

        jdbcTemplate.update("update  tb_account set name=?,address=? where id=?",
                new Object[] { account.getName(),account.getAddress(),account.getId() });
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你想了解 Spring Boot 中使用原生 SQL 进行分页查询的相关内容,是吗?那我来回答你的问题。 在 Spring Boot 中,使用原生 SQL 进行分页查询需要进行以下几个步骤: 1. 在 pom.xml 文件中添加相关依赖,例如 mysql-connector-java: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> ``` 2. 在 application.properties 文件中配置数据源信息,例如: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 3. 在代码中使用原生 SQL 进行分页查询,例如: ```java @Autowired private JdbcTemplate jdbcTemplate; public Page<User> findPage(int pageNum, int pageSize) { String countSql = "SELECT COUNT(*) FROM user"; int totalCount = jdbcTemplate.queryForObject(countSql, Integer.class); int pageCount = totalCount / pageSize + (totalCount % pageSize == 0 ? 0 : 1); int startIndex = (pageNum - 1) * pageSize; String listSql = "SELECT * FROM user LIMIT ?, ?"; List<User> list = jdbcTemplate.query(listSql, new Object[]{startIndex, pageSize}, new BeanPropertyRowMapper<>(User.class)); return new Page<>(pageNum, pageSize, totalCount, pageCount, list); } ``` 以上代码中,我们使用了两个 SQL 语句,一个用于查询总记录数,另一个用于查询分页数据。在查询总记录数时,我们直接使用了 JdbcTemplate 的 queryForObject 方法,并将返回结果转换为 Integer 类型;在查询分页数据时,我们使用了 LIMIT 关键字来限制查询范围,并使用了 BeanPropertyRowMapper 将查询结果转换为 User 对象的列表。 最后,我们将分页查询结果封装为一个 Page 对象,并返回给调用者。 需要注意的是,上述代码中使用的是原生 SQL,需要根据实际情况进行 SQL 注入和 SQL 注解的处理。同时,在实际项目中,还需要进行参数校验,例如 pageNum 和 pageSize 是否合法、是否超出范围等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值