后端开发基础-SpringMVC框架学习-011——Springjdbc,常见面试题目及答案

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return “User [id=” + id + “, name=” + name + “, age=” + age + “]”;

}

}

Cost.java

package com.dk.oss.entity;

import java.sql.Timestamp;

/**

  • 实体类

  • @author Cher_du

*/

public class Cost {

private Integer costId;

private String name;

//基本时长

private Integer baseDuration;

//基本费用

private Double baseCost;

//单位费用

private Double unitCost;

//状态:0-启用;1-禁用;

private String status;

//描述

private String descr;

//创建时间

private Timestamp creatime;

//开通时间

private Timestamp startime;

//资费类型:1-包月;2-套餐;3-计时;

private String costType;

@Override

public String toString() {

return “User [costId=” + costId + “, name=” + name + “, baseDuration=” + baseDuration + “, baseCost=” + baseCost

  • “, unitCost=” + unitCost + “, status=” + status + “, descr=” + descr + “, creatime=” + creatime

  • “, startime=” + startime + “, costType=” + costType + “]”;

}

public Integer getCostId() {

return costId;

}

public void setCostId(Integer costId) {

this.costId = costId;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getBaseDuration() {

return baseDuration;

}

public void setBaseDuration(Integer baseDuration) {

this.baseDuration = baseDuration;

}

public Double getBaseCost() {

return baseCost;

}

public void setBaseCost(Double baseCost) {

this.baseCost = baseCost;

}

public Double getUnitCost() {

return unitCost;

}

public void setUnitCost(Double unitCost) {

this.unitCost = unitCost;

}

public String getStatus() {

return status;

}

public void setStatus(String status) {

this.status = status;

}

public String getDescr() {

return descr;

}

public void setDescr(String descr) {

this.descr = descr;

}

public Timestamp getCreatime() {

return creatime;

}

public void setCreatime(Timestamp creatime) {

this.creatime = creatime;

}

public Timestamp getStartime() {

return startime;

}

public void setStartime(Timestamp startime) {

this.startime = startime;

}

public String getCostType() {

return costType;

}

public void setCostType(String costType) {

this.costType = costType;

}

}

Admin.java

package com.dk.oss.entity;

import java.sql.Timestamp;

/**

  • 实体类

  • 注:

  • 与要操作的表保持一致。

  • @author Cher_du

*/

public class Admin {

private Integer adminId;

private String adminCode;

private String password;

private String name;

private String telephone;

private String email;

private Timestamp enrolldate;

public Integer getAdminId() {

return adminId;

}

public void setAdminId(Integer adminId) {

this.adminId = adminId;

}

public String getAdminCode() {

return adminCode;

}

public void setAdminCode(String adminCode) {

this.adminCode = adminCode;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getTelephone() {

return telephone;

}

public void setTelephone(String telephone) {

this.telephone = telephone;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public Timestamp getEnrolldate() {

return enrolldate;

}

public void setEnrolldate(Timestamp enrolldate) {

this.enrolldate = enrolldate;

}

}


DAO层:

UserDAO.java

package com.dk.oss.dao;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.core.RowMapper;

import org.springframework.stereotype.Repository;

import com.dk.oss.entity.User;

/**

  • 使用JdbcTemplate实现数据库访问

  • @author Cher_du

*/

@Repository(“userDAO”)

public class UserDAO {

@Resource(name=“jt”)

private JdbcTemplate jt;

public void save(User user){

jt.update("INSERT INTO user_dk "+

“VALUES(1,?,?)”,

new Object[]{user.getName(),user.getAge()});

}

/*

  • 需要写一个实现了RowMapper接口的类,

  • 该类规定了如何将结果集中的一条记录

  • 转换成相应的java对象(比如User对象)。

*/

public List findAll(){

List users = new ArrayList();

String sql = “SELECT * FROM user_dk”;

users = jt.query(sql, new UserRowMapper());

return users;

}

/*

  • queryForObject方法:

  • 如果找不到相应的记录,会抛出异常。

*/

public User findById(int id){

User user = null;

String sql = "SELECT * FROM user_dk "

+“WHERE ID=?”;

user = jt.queryForObject(sql, new Object[]{id}, new UserRowMapper());

return user;

}

public User findById2(int id){

User user = null;

String sql = "SELECT * FROM user_dk "

+“WHERE id=?”;

List users = jt.query(sql, new Object[]{id}, new UserRowMapper());

if(users !=null && users.size() >0){

return users.get(0);

}

return user;

}

public void update(User user){

String sql = "UPDATE user_dk "

+“SET name=?,age=? WHERE id=?”;

jt.update(sql,new Object[]{user.getName(),user.getAge(),user.getId()});

}

public void delete(int id){

String sql =“DELETE FROM user_dk WHERE id=?”;

jt.update(sql,new Object[]{id});

}

/*

  • 获得总的记录数。

  • 建议使用queryForObject方法。

  • 不建议使用queryForInt方法。

*/

public int getTotalRow(){

String sql = “SELECT COUNT(*) FROM user_dk”;

return jt.queryForObject(sql, Integer.class);

}

class UserRowMapper implements RowMapper{

/*

  • rst:结果集。

  • rowNum:记录的下标,从0开始。

*/

public User mapRow(ResultSet rst, int rowNum)

throws SQLException {

User user = new User();

user.setId(rst.getInt(“id”));

user.setName(rst.getString(“name”));

user.setAge(rst.getInt(“age”));

return user;

}

}

}

CostDAO.java

package com.dk.oss.dao;

import java.util.List;

import com.dk.oss.entity.Cost;

/**

  • DAO接口

*/

public interface CostDAO {

public List findAll();

}

CostDAOJdbcImpl.java

package com.dk.oss.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import javax.annotation.Resource;

import javax.sql.DataSource;

import org.springframework.stereotype.Repository;

import com.dk.oss.entity.Cost;

/**

  • DAO实现类

*/

@Repository(“costDAO”)

public class CostDAOJdbcImpl implements

CostDAO{

//注入DataSource

@Resource(name=“ds”)

private DataSource ds;

//查询出所有资费信息

public List findAll() {

List costs =

new ArrayList();

Connection conn = null;

PreparedStatement prep = null;

ResultSet rst = null;

try {

conn = ds.getConnection();

String sql = "SELECT * FROM cost "

  • “ORDER BY cost_id”;;

prep =

conn.prepareStatement(sql);

rst = prep.executeQuery();

while(rst.next()){

Cost c = createCost(rst);

costs.add©;

}

} catch (SQLException e) {

e.printStackTrace();

throw new RuntimeException(e);

}finally{

if(conn != null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

return costs;

}

//将结果集中的记录转换成一个对象。

private Cost createCost(ResultSet rst) throws SQLException {

Cost c = new Cost();

c.setCostId(rst.getInt(“cost_id”));

c.setName(rst.getString(“name”));

c.setBaseDuration(rst.getInt(“base_duration”));

c.setBaseCost(rst.getDouble(“base_cost”));

c.setUnitCost(rst.getDouble(“unit_cost”));

c.setStatus(rst.getString(“status”));

c.setDescr(rst.getString(“descr”));

c.setCreatime(rst.getTimestamp(“creatime”));

c.setStartime(rst.getTimestamp(“startime”));

c.setCostType(rst.getString(“cost_type”));

return c;

}

}

AdminDAO.java

package com.dk.oss.dao;

import com.dk.oss.entity.Admin;

/**

  • DAO接口

* 注:

*  任何接口,都不要涉及任何具体的实现。

*/

public interface AdminDAO {

public Admin findByCode(String code);

}

AdminDAOJdbcImpl.java

package com.dk.oss.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import javax.annotation.Resource;

import javax.sql.DataSource;

import org.springframework.stereotype.Repository;

import com.dk.oss.entity.Admin;

/**

  • DAO实现类

  • @author Cher_du

*/

@Repository(“adminDAO”)

public class AdminDAOJdbcImpl implements AdminDAO{

//注入datasource。

@Resource(name=“ds”)

private DataSource ds;

public Admin findByCode(String code) {

Admin admin = null;

Connection conn = null;

PreparedStatement prep = null;

ResultSet rst = null;

try {

conn = ds.getConnection();

String sql = "SELECT * FROM admin_info "

+“WHERE admin_code=?”;

prep = conn.prepareStatement(sql);

prep.setString(1, code);

rst = prep.executeQuery();

if(rst.next()){

admin = new Admin();

admin.setAdminId(rst.getInt(“admin_id”));

admin.setAdminCode(rst.getString(“admin_code”));

admin.setPassword(rst.getString(“password”));

admin.setName(rst.getString(“name”));

admin.setTelephone(rst.getString(“telephone”));

admin.setEmail(rst.getString(“email”));

admin.setEnrolldate(rst.getTimestamp(“enrolldate”));

}

} catch (SQLException e) {

//记日志(保留现场)

e.printStackTrace();

/*

  • 异常是否恢复,如果不能够恢复

  • (发生了系统异常,比如数据库服务

  • 暂停,网络中断),则提示用户稍后

  • 重试。如果能够恢复,则立即恢复。

*/

throw new RuntimeException(e);

}finally{

if(conn != null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

return admin;

}

}


Service层:

AdminService.java

package com.dk.oss.service;

import com.dk.oss.entity.Admin;

/**

  • 业务层接口

*/

public interface AdminService {

//用于登录处理

public Admin checkLogin(String code,

String pwd);

}

AdminServiceImpl.java

package com.dk.oss.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.dk.oss.dao.AdminDAO;

import com.dk.oss.entity.Admin;

/**

  • 业务层实现

*/

@Service(“adminService”)

public class AdminServiceImpl implements AdminService{

@Resource(name=“adminDAO”)

private AdminDAO adminDAO;

public Admin checkLogin(String code, String pwd) {

//调用AdminDAO访问数据库

Admin admin = adminDAO.findByCode(code);

if(admin == null){

//账户不存在,需要提示用户。

//抛出一个应用异常(用户在使用系统

//的过程当中,做了一些错误的操作,比如

//输出入错误的账户或密码)。

throw new AppException(“账户错误”);

}

if(!admin.getPassword().equals(pwd)){

//密码错误,需要提示用户

throw new AppException(“密码错误”);

}

//登录成功

return admin;

}

}

AppException.java

package com.dk.oss.service;

/**

  • 应用异常类。

*/

public class AppException

extends RuntimeException {

public AppException() {

}

public AppException(String message) {

super(message);

}

}

CostService.java

package com.dk.oss.service;

import java.util.List;

import com.dk.oss.entity.Cost;

public interface CostService {

public List list();

}

CostServiceImpl.java

package com.dk.oss.service;

import java.util.ArrayList;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.dk.oss.dao.CostDAO;

import com.dk.oss.entity.Cost;

@Service(“costService”)

public class CostServiceImpl implements CostService{

@Resource(name=“costDAO”)

private CostDAO dao;

public List list() {

List costs = new ArrayList();

costs = dao.findAll();

return costs;

}

}


Controller层:

CostController.java

package com.dk.oss.controller;

import java.util.List;

import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import com.dk.oss.entity.Cost;

import com.dk.oss.service.CostService;

@Controller

public class CostController {

@Resource(name=“costService”)

private CostService costService;

@RequestMapping(“/cost.do”)

public String cost(HttpServletRequest request){

try{

List costs = costService.list();

request.setAttribute(“costs”, costs);//Integer.valueOf(“w”);

}catch(Exception e){

e.printStackTrace();

//系统异常,提示用户稍后重试。

return “error”;

}

return “cost”;

}

}

LoginController.java

package com.dk.oss.controller;

import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import com.dk.oss.entity.Admin;

import com.dk.oss.service.AdminService;

import com.dk.oss.service.AppException;

@Controller

public class LoginController {

@Resource(name=“adminService”)

private AdminService adminService;

@RequestMapping(“/toLogin.do”)

public String toLogin(){

return “login”;

}

@RequestMapping(“/login.do”)

public String checkLogin(HttpServletRequest request,

HttpSession session){

//读取请求参数值

String adminCode = request.getParameter(“adminCode”);

String pwd = request.getParameter(“pwd”);

System.out.println(“adminCode:”+adminCode+" pwd:"+pwd);

//调用业务层模块来进行登录处理

Admin admin = null;

try{

admin = adminService.checkLogin(adminCode, pwd);

System.out.println(admin);

}catch(Exception e){

if(e instanceof AppException ){

//应用异常,需要明确提示用户。

request.setAttribute(“errorMsg”, e.getMessage());

//转发到登录页面。

return “login”;

}else{

//系统异常,提示用户稍后重试

return “error”;

}

}

//登录成功,重定向到首页。

//将一些数据绑定到session对象上,用于

//session验证。

session.setAttribute(“admin”, admin);

return “redirect:index.do”;

}

@RequestMapping(“/index.do”)

public String toIndex(){

return “index”;

}

}

SessionInterceptor.java

package com.dk.oss.interceptors;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

/**

  • 拦截器,用于session验证。

  • @author Cher_du

*/

public class SessionInterceptor implements HandlerInterceptor{

public boolean preHandle(HttpServletRequest request,

HttpServletResponse response,

Object handler)

throws Exception {

System.out.println(“SessionInterceptor的preHandle方法…”);

//session验证

HttpSession session = request.getSession();

Object obj = session.getAttribute(“admin”);

if(obj == null){

//没有登录,跳转到登录页面

response.sendRedirect(“toLogin.do”);

//中断处理流程。

return false;

}

//已经登录,继续向后调用

return true;

}

public void postHandle(HttpServletRequest request,

HttpServletResponse response,

Object handler,

ModelAndView modelAndView) throws Exception {

}

public void afterCompletion(HttpServletRequest request,

HttpServletResponse response,

Object handler,

Exception ex)

throws Exception {

}

}

TestCase.java

package test;

import java.sql.SQLException;

import java.util.List;

import javax.sql.DataSource;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dk.oss.dao.AdminDAO;

import com.dk.oss.dao.CostDAO;

import com.dk.oss.entity.Admin;

import com.dk.oss.entity.Cost;

import com.dk.oss.service.AdminService;

import com.dk.oss.service.CostService;

public class TestCase {

@Test

//测试DataSource

public void test1() throws SQLException{

ApplicationContext ac =

new ClassPathXmlApplicationContext(

“app.xml”);

DataSource ds =

ac.getBean(“ds”,DataSource.class);

System.out.println(

ds.getConnection());

}

@Test

//测试DAO

public void test2() {

ApplicationContext ac =

new ClassPathXmlApplicationContext(

“app.xml”);

AdminDAO dao =

ac.getBean(“adminDAO”,

AdminDAO.class);

Admin admin =

dao.findByCode(“caocao”);

System.out.println(admin);

}

@Test

//测试AdminService

public void test3() {

ApplicationContext ac =

new ClassPathXmlApplicationContext(

“app.xml”);

AdminService service =

ac.getBean(“adminService”,

AdminService.class);

Admin admin =

service.checkLogin(“caocao”,

“123”);

System.out.println(admin.getTelephone());

}

@Test

//测试CostDAO

public void test4() {

ApplicationContext ac =

new ClassPathXmlApplicationContext(

“app.xml”);

CostDAO dao =

ac.getBean(“costDAO”,CostDAO.class);

List costs =

dao.findAll();

System.out.println(costs);

}

@Test

//测试CostService

public void test5() {

ApplicationContext ac =

new ClassPathXmlApplicationContext(

“app.xml”);

CostService service =

ac.getBean(“costService”,CostService.class);

List costs =

service.list();

System.out.println(costs);

}

}

TestCase2.java

package test;

import java.util.List;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dk.oss.dao.UserDAO;

import com.dk.oss.entity.User;

public class TestCase2 {

@Test

总结

面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。

以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考

一份还热乎的蚂蚁金服面经(已拿Offer)面试流程4轮技术面+1轮HR

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
ationContext(

“app.xml”);

AdminDAO dao =

ac.getBean(“adminDAO”,

AdminDAO.class);

Admin admin =

dao.findByCode(“caocao”);

System.out.println(admin);

}

@Test

//测试AdminService

public void test3() {

ApplicationContext ac =

new ClassPathXmlApplicationContext(

“app.xml”);

AdminService service =

ac.getBean(“adminService”,

AdminService.class);

Admin admin =

service.checkLogin(“caocao”,

“123”);

System.out.println(admin.getTelephone());

}

@Test

//测试CostDAO

public void test4() {

ApplicationContext ac =

new ClassPathXmlApplicationContext(

“app.xml”);

CostDAO dao =

ac.getBean(“costDAO”,CostDAO.class);

List costs =

dao.findAll();

System.out.println(costs);

}

@Test

//测试CostService

public void test5() {

ApplicationContext ac =

new ClassPathXmlApplicationContext(

“app.xml”);

CostService service =

ac.getBean(“costService”,CostService.class);

List costs =

service.list();

System.out.println(costs);

}

}

TestCase2.java

package test;

import java.util.List;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dk.oss.dao.UserDAO;

import com.dk.oss.entity.User;

public class TestCase2 {

@Test

总结

面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。

以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考

[外链图片转存中…(img-A3Dm395u-1713458496804)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-xevkpsYm-1713458496805)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringMVC 中,我们可以通过 ResponseBody 注解返回音频流,具体步骤如下: 1. 在 Controller 中定义一个返回类型为 ResponseEntity<byte[]> 的方法,该方法需要使用 @ResponseBody 注解标注。 2. 在方法中获取音频文件的字节数组,并将其放入 ResponseEntity 对象中返回。 3. 在 ResponseEntity 对象中设置 Content-Type、Content-Disposition 等响应头,以便浏览器正确解析音频流并进行播放。 示例代码如下: ```java @RequestMapping("/audio") @ResponseBody public ResponseEntity<byte[]> getAudio() throws IOException { // 读取音频文件字节数组 InputStream in = getClass().getResourceAsStream("/static/audio/sample.mp3"); byte[] audioBytes = IOUtils.toByteArray(in); // 设置响应头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.parseMediaType("audio/mpeg")); headers.setContentDispositionFormData("attachment", "sample.mp3"); // 返回音频流 return new ResponseEntity<>(audioBytes, headers, HttpStatus.OK); } ``` 上述代码中,我们将音频文件 sample.mp3 放在了项目的 /static/audio 目录下。在方法中,我们使用 IOUtils.toByteArray() 方法将音频文件转换为字节数组,并将其放入 ResponseEntity 对象中返回。在设置响应头时,我们使用 MediaType.parseMediaType() 方法设置 Content-Type,使用 setContentDispositionFormData() 方法设置 Content-Disposition。最后,我们通过 new ResponseEntity<>(audioBytes, headers, HttpStatus.OK) 创建 ResponseEntity 对象并返回。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值