后端开发基础-SpringMVC框架学习-008——基础概念

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

**开源地址:https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB **

<util:properties id=“jdbc” location=“classpath:db.properties” />

<bean id=“ds” class=“org.apache.commons.dbcp.BasicDataSource”

destroy-method=“close”>

db.properties

driverclass=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@localhost:1521:orcl

user=learn

password=learn

maxActive=1

initSize=1

LoginController.java

package com.dk.oss.controller;

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.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){

//读取请求参数值

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

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

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

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

try{

Admin admin= adminService.checkLogin(adminCode, pwd);

System.out.println(admin);//Integer.valueOf(“a”);

}catch(Exception e){

if(e instanceof AppException){

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

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

System.out.println(“自定义异常。。。”);

//转发到登录页面。

return “login”;

}else{

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

System.out.println(“系统异常。。。”+e.getMessage());

return “error”;

}

}

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

return “redirect:index.do”;

}

@RequestMapping(“/index.do”)

public String toIndex(){

return “index”;

}

}

AdminService.java

package com.dk.oss.service;

import com.dk.oss.entity.Admin;

/**

  • 业务层接口

  • @author Cher_du

*/

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;

/**

  • 业务层实现

  • @author Cher_du

*/

@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;

/**

  • 应用异常类。

  • @author Cher_du

*/

public class AppException extends RuntimeException {

public AppException() {

}

public AppException(String message) {

super(message);

}

}

AdminDAO.java

package com.dk.oss.dao;

import com.dk.oss.entity.Admin;

/**

  • DAO接口

  • 注:

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

  • @author Cher_du

*/

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

  • @Resource默认按照名称方式进行bean匹配,@Autowired默认按照类型方式进行bean匹配

*/

@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;

}

}

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;

}

}

***为了使编写的每一层代码没有问题,需要对其进行单元测试,尽可能减少开发失误。

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;

public class TestCase {

@Test

//测试DataSource

public void test1() throws SQLException{

ApplicationContext ac =

new ClassPathXmlApplicationContext(

“app.xml”);

System.out.println(ac);

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

System.out.println(ds.getConnection());

}

@Test

//测试DAO

public void test2(){

ApplicationContext ac =

new ClassPathXmlApplicationContext(

“app.xml”);

AdminDAO adminDAO = ac.getBean(“adminDAO”, AdminDAO.class);

Admin admin= adminDAO.findByCode(“caocao”);

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

}

@Test

//测试AdminService

public void test3(){

ApplicationContext ac = new ClassPathXmlApplicationContext(“app.xml”);

AdminService adminService = ac.getBean(“adminService”, AdminService.class);

Admin admin = adminService.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);

}

}

启动Tomcat 运行 springcase-netctoss工程,录入请求http://localhost:8088/springcase-netctoss/toLogin.do

页面运行结果对应如下

录入账户与密码的不同情况:

正确:

错误:

对应练习 资费Cost部分参考代码:

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 “Cost [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) {

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值