Controller层执行SQL查询并返回结果

写在前面

  • 适用场景:数据可视化大屏、纯取数据的场景(一些简单查询)
  • 想要快速上线接口,不想写servicemapperxml层代码
  • 别问,问就是敏捷开发(摆烂
@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));
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个基于Web API的带参数查询SQL Server并返回JSON数据的示例代码: 1. 首先,需要安装NuGet包“System.Data.SqlClient”,以便连接SQL Server数据库。 2. 在您的Web API项目中,创建一个控制器类(例如,名为“DataController”),并添加以下代码: using System.Data.SqlClient; using System.Web.Http; namespace YourProject.Controllers { public class DataController : ApiController { [HttpGet] public IHttpActionResult Get(int id) { string connectionString = "Data Source=YourServerName;Initial Catalog=YourDatabaseName;Integrated Security=True"; string query = "SELECT * FROM YourTableName WHERE Id = @Id"; using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(query, connection)) { command.Parameters.AddWithValue("@Id", id); connection.Open(); using (SqlDataReader reader = command.ExecuteReader()) { if (reader.HasRows) { while (reader.Read()) { var result = new { Id = reader.GetInt32(reader.GetOrdinal("Id")), Name = reader.GetString(reader.GetOrdinal("Name")), Age = reader.GetInt32(reader.GetOrdinal("Age")) }; return Json(result); } } return NotFound(); } } } } } } 3. 在上面的控制器代码中,我们使用了HTTP GET请求,并且通过“Get”方法接收一个“id”参数。 4. 在“Get”方法内部,我们首先创建了一个用于连接SQL Server的“SqlConnection”对象。 5. 然后,我们定义了一个SQL查询字符串,并使用“SqlCommand”对象来执行该查询,并使用“SqlParameter”对象将“id”参数传递给查询。 6. 接下来,我们使用“SqlDataReader”对象来遍历查询结果,并将结果封装在一个匿名对象中。 7. 最后,使用Web API的“Json”方法将结果返回为JSON格式。 这是一个基本的例子,您可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值