当前位置:编程学习 > JAVA >>

java控制器Controller层直接执行SQL查询并返回结果

适用场景:数据可视化大屏、纯取数据的场景(一些简单查询)
想要快速上线接口,不想写service、mapper、xml层代码
别问,问就是敏捷开发(摆烂


@RestController

@RequestMapping("/user")
public class UserController {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @GetMapping()
    public Result test() {
        String sql = "select * from sys_user where user_id = 1";
        Map<String, Object> map = jdbcTemplate.queryForMap(sql);
        return Result.success(map);
    }
}
 
优化代码1
避免被前端吐槽,字段名使用驼峰形式
规避SQL 注入风险,使用参数化查询
@GetMapping("{id}")
public Result getUserById(@PathVariable Long id) {
    String sql = "select * from sys_user where user_id = ?";
    Map<String, Object> map = jdbcTemplate.queryForMap(sql, id);
    return MapUtils.isEmpty(map) ? Result.error() : Result.success(MapUtil.toCamelCaseMap(map));
}
 
优化代码2
查询结果映射到 Java 实体类
异常处理,这里使用的是 queryForObject,预期查询结果只有一行。如果查询结果为空或有多行,将会抛出异常。
String sql = "select * from sys_user where user_id = ?";
try {
    User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), id);
    return Result.success(user);
} catch (EmptyResultDataAccessException e) {
    log.error("Ops!", e);
    return Result.error("查询结果为空!");
}
 
多个占位符情况
SQL 查询语句中有多个占位符时,按照顺序依次填入即可

String sql = "select * from sys_user where user_name = ? and sex = ?";
User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), "ry", "1");
System.out.println(JSON.toJSONString(user));
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,