目录
一、功能要求
二、技术要求:
三、网上银行业务系统实现过程
四、效果展示
五、总结
引言
Java是一种广泛使用的高级编程语言,具有跨平台和面向对象的特性,被广泛应用于企业级软件开发、移动应用开发、Web应用开发等领域,Java的出现极大地改变了软件开发的方式,为开发人员提供了强大的工具和框架,使开发过程更加高效和可靠。
随着互联网的飞速发展,传统的银行业务也面临着转型和改革的需求,为了提供更便捷、安全和高效的金融服务,许多银行开始投入资源开发和实现网上银行业务系统,网上银行业务系统是一个基于互联网的金融服务平台,允许用户通过网络进行银行业务的管理和操作,从而提供便利和灵活性。该系统的目标是使用户能够随时随地进行银行业务,并提供安全、可靠的服务。
设计一个网上银行业务系统,主要属性包括用户姓名、账户余额、电话、用户名、银行卡状态,用户可通过系统实现对银行业务信息的添加、删除、更新、查询、分页、排序等。
后端框架:使用Spring Boot来搭建后端应用。
数据库:使用MySQL数据库来存储银行业务信息。
数据访问:使用JPA(Spring Data JPA)来实现与数据库的交互。
前端模板引擎:使用Thymeleaf作为前端模板引擎,方便在后端渲染页面并展示银行业务信息,使用Bootstrap框架来提升用户界面的友好性和响应式设计。
1、创建项目,载入依赖包
2、model层:负责定义数据模型和业务逻辑,在model层写一个实体类Bank,定义银行业务信息及类型
package com.example.javamaven.model;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "banks")
public class Bank {
@Id
//用于指定主键的生成策略;save()时bean中的id可以为null(数据库的主键为自增)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
//姓名
@Column(name = "name")
private String name;
//账户余额(元)
@Column(name = "account")
private String account;
//电话
@Column(name = "phone")
private Long phone;
//用户名
@Column(name = "root")
private String root;
//状态
@Column(name = "state")
private String state;
}
3、Repository层:用于访问和操作持久化数据,在repository层写一个接口,用于封装数据的添加、删除、更新、查询等
package com.example.javamaven.repository;
import com.example.javamaven.model.Bank;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface BankRepository extends JpaRepository {
// 添加您的自定义查询方法 根据姓名查询
@Query("select b from Bank b where b.name like %:name%")
List findByBankName(@Param("name") String name);
}
4、service层:完成功能设计,存放业务逻辑处理和协调数据访问,提供controller层调用的方法,在service层写一个接口BankService,这个服务类用于服务后续测试,里面定义了方法,例如:将用户的银行业务信息存进一个列表里、新增银行业务信息或者更新银行业务信息、通过查询用户的银行业务信息存进一个新的列表里,将它们进行分页展示:
public interface BankService {
// 获取所有的银行业务信息
List getAllBanks(String name);
// 通过id删除一个银行业务信息
void delBankById(Long id);
// 新增/更新一个银行业务信息
void saveBank(Bank bank);
// 通过id查询银行业务信息
Bank getBankById(Long id);
// 分页查询银行业务信息
Page findPaginated(int pageNo, int pageSize, String sortField, String sortDirection);
// 通过姓名查询银行业务信息
List findByBankName(String name);
}
测试类BankServiceimpl用来继承BankService,实现获取所有用户的银行业务信息、根据姓名查找用户的银行业务信息、保存用户的银行业务信息到列表、根据id删除用户的银行业务信息、根据姓名查找列表是否存在此用户的银行业务信息、设置排序参数:
public class BankServiceImpl implements BankService {
private BankRepository bankRepository;
@Autowired
public BankServiceImpl(BankRepository bankRepository) {
this.bankRepository = bankRepository;
}
@Override
public List getAllBanks(String name) {
return bankRepository.findAll();
}
@Override
public void saveBank(Bank bank) {
bankRepository.save(bank);
}
@Override
public Bank getBankById(Long id) {
//调用数据访问层查找指定ID的用户银行信息,返回Optional对象
Optional optional = bankRepository.findById(id);
Bank bank = null;
//如果存在指定id的用户
if (optional.isPresent()) {
//从Optional对象中获取用户对象
bank = optional.get();
} else {
//否则抛出运行时异常
throw new RuntimeException("找不到银行ID: " + id);
}
return bank;
}
@Override
public void delBankById(Long id) {
bankRepository.deleteById(id);
}
@Override
public Page findPaginated(int pageNo, int pageSize, String sortField, String sortDirection) {
//设置排序参数,升序ASC/降序DESC?
Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name())
? Sort.by(sortField).ascending()
: Sort.by(sortField).descending();
//根据页号/每页记录数/排序依据返回某指定页面数据。
Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort);
return this.bankRepository.findAll(pageable);
}
@Override
public List findByBankName(String name) {
List optional = bankRepository.findByBankName(name);
return optional;
}
}
5、controller层:控制器层负责接收用户请求、处理业务逻辑,并返回响应的部分。它作为系统的入口点,将请求转发给相应的Service层进行处理,并将处理结果封装为适当的响应返回给客户端。
添加银行业务信息:
@GetMapping("/showNewBankForm")
public String showNewBankForm(Model model) {
Bank bank = new Bank();
model.addAttribute("bank", bank);
return "new_bank";
}
删除银行业务信息:
@GetMapping("/showFormForUpdate/{id}")
public String showFormForUpdate(@PathVariable(value = "id") long id, Model model) {
Bank bank = bankService.getBankById(id);
model.addAttribute("bank", bank);
return "update_bank";
}
更新银行业务信息:
查询银行业务信息:
@GetMapping("/query{name}")
public String query(@PathVariable(value = "name") String name,Model model){
List listBank = bankService.findByBankName(name);
model.addAttribute("listBanks",listBank);
return "index";
}
分页:规定每页数据超过五列就进入下一页
@GetMapping("/page/{pageNo}")
public String findPaginated(@PathVariable(value = "pageNo") int pageNo,
@RequestParam(value = "sortField", defaultValue = "id") String sortField,
@RequestParam(value = "sortDir", defaultValue = "desc") String sortDir,
@ModelAttribute("bank") Bank bank,
Model model) {
int pageSize = 5;
排序:可以根据不同的需求按照不同的列数进行排序,这里设置为升序
@Override
public Page findPaginated(int pageNo, int pageSize, String sortField, String sortDirection) {
//设置排序参数,升序ASC/降序DESC?
Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name())
? Sort.by(sortField).ascending()
: Sort.by(sortField).descending();
//根据页号/每页记录数/排序依据返回某指定页面数据。
Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort);
return this.bankRepository.findAll(pageable);
}
6、BootStrap
添加BootStrap样式
7、部署
添加数据库信息
添加页面:
删除页面:
查询页面:根据用户姓名查询(查询林小暖的相关银行业务信息)
学习Java高级程序设计课程是一个很充实和有挑战性的过程,我在这个过程中获得了很多宝贵的经验和知识,Java高级程序设计课程涵盖了很多复杂的概念和技术,而且需要不断地进行实践来巩固和应用所学的知识,通过解决实际问题、完成编程练习能够更好地理解并掌握这些知识。在学习这门课程的过程中,除了课堂学习,还需主动查阅文档、学习别人的经验分享,来提高自己的学习效果。与同学和老师的交流讨论对我的学习起到了重要的促进作用,互相交流观点、解释概念和讨论问题,不仅能够加深对知识的理解,还能够从不同的角度看待问题,拓宽思维。参与一些实际的项目,将学到的知识应用于实践中,通过实际项目的经验,我能够更好地理解和应用知识,并且发现自己在实践中的不足之处,以便进一步提升自己,学习Java高级课程只是开始,我意识到编程是一个不断学习和进步的过程,技术变化迅速,需要时刻保持学习的热情和好奇心,不断更新自己的知识和技能。
总的来说,学习Java高级程序设计课程是一次充实且有收获的经历,通过不懈的努力和持续的学习,我对Java编程语言有了更深入的理解,并且提高了自己的编程技能,我相信这些所学到的知识和经验将对我未来的职业发展能产生积极的影响。