上篇写了构思与界面层,本篇写一下业务逻辑层、数据访问层

目录

业务逻辑层

包:pojo

用户类(JavaBean):User

public class User {
private String userName;
private String userPwd; public User(String userName, String userPwd) {
this.userName = userName;
this.userPwd = userPwd;
} public User() {
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getUserPwd() {
return userPwd;
} public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
}

包:service

接口:IUserService

public interface IUserService {
public boolean register(User user);
public boolean login(User user);
}

类:UserServiceImpl

public class UserServiceImpl implements IUserService {
@Override
public boolean register(User user) {
IUserDao dao=new UserDaoImpl();
User userByName = dao.findUserByName(user);
if(userByName==null){
//如果数据库里没有找到同名的,就注册
try {
int i = dao.addUser(user);
if(i>0){
System.out.println("注册成功");
}else {
return false;
}
return true;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return false;
} @Override
public boolean login(User user) {
IUserDao dao=new UserDaoImpl();
User checkUser = dao.checkUser(user);
if(checkUser==null){
//如果数据库里没有找到同名、同密码的
System.out.println("登录失败");
return false;
}else {
System.out.println("欢迎登录");
return true;
}
}
}

数据访问层

包:dao

接口:IUserDao

public interface IUserDao {
public User findUserByName(User u);
public User checkUser(User u);//检查用户名密码是否与数据库中一致
public int addUser(User u);//向数据库中添加用户信息
}

实现接口的类:UserDaoImpl

public class UserDaoImpl implements IUserDao{
private JdbcTemplate jt=new JdbcTemplate(JDBCUtils.getDataSource()); @Override
public User findUserByName(User user) {
User u=null;
try{
u=jt.queryForObject("select userName from userinfo where userName=?",
new BeanPropertyRowMapper<User>(User.class),user.getUserName());
}catch (Exception e){
}
return u;
} @Override
public User checkUser(User user) {
User u=null;
try{
u=jt.queryForObject("select userName,userPwd from userinfo where userName=? and userPwd=?",
new BeanPropertyRowMapper<User>(User.class),user.getUserName(),user.getUserPwd());
}catch (Exception e){
}
return u;
} @Override
public int addUser(User user) {
int c=0;
String status="正常";
try {//c为添加数据库影响的行数,添加成功则c=1,失败则c=0
c=jt.update("insert into userinfo(userName,userPwd,typeId,userStatus) values (?,?,?,?)",
user.getUserName(),user.getUserPwd(),3,status);
}catch (Exception e){
}
return c;
}
}

工具类:JDBCUtils (创建连接池)

public class JDBCUtils {
private static DataSource ds; static {
Properties p=new Properties();
try {
p.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
ds= DruidDataSourceFactory.createDataSource(p);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
} public static DataSource getDataSource(){
return ds;
}
}

到这里就结束了,可以正常运行了。

【SpringMVC】使用三层架构实现登录,注册。(下篇)的更多相关文章

  1. winform学习日志(十九)----------真正三层架构之登录

    摘要:一:三层构架的基础知识在项目开发的过程中,有时把整个项目分为三层架构,其中包括:表示层(UI).业务逻辑层(BLL)和数据访问层(DAL).三层的作用分别如下: 表示层:为用户提供交互操作界面, ...

  2. 【SpringMVC】使用三层架构实现登录,注册。(上篇)

    构思 界面层 1.jsp [见名知义] failed.jsp-->失败页面,登录.注册失败就跳转至失败页面 index.jsp-->默认生成的界面,没什么用 login.jsp--> ...

  3. Springmvc+Spring+Mybatis实现员工登录注册功能

    ssm实现用户注册以及登录功能..转载请标明出处  http://www.cnblogs.com/smfx1314/p/smfx1314.html 前端bootstrap 所使用的IDE是eclips ...

  4. asp.net mvc 三层加EF 登录注册 增删改查

    首先打开vs软件新建项目创建web中的mvc项目再右击解决方案创建类库项目分别创建DAL层和BLL层再把DAL层和BLL层的类重命名在mvc项目中的Models文件夹创建model类在DAL创建ADO ...

  5. C# 三层架构之系统的登录验证与添加数据的实现

    利用三层架构体系,实现学生管理系统中用户的登录与添加班级信息的功能,一下代码为具体实现步骤的拆分过程: 一.用户登录界面功能的实现 1.在数据访问层(LoginDAL)进行对数据库中数据的访问操作 u ...

  6. 三层架构,Struts2,SpringMVC实现原理图

    三层架构,Struts2,SpringMVC实现原理图 三层架构实现原理 Struts2实现原理 SpringMVC实现原理

  7. c#利用三层架构做一个简单的登录窗体

    就个人而言,三层架构有点难理解,不知道该如何下手,各层与各层之间怎么调用 最近一直在研究三层架构,经过网上学习与多方打听写一下自己的心得.有不足之处,可以评论和私聊探讨 言归正传: 三层架构(3-ti ...

  8. C# 使用三层架构实例演示-winForm 窗体登录功能

    ---------------------------------------------------------------------------------------------------华 ...

  9. 三层架构(MVC)实现简单登陆注册验证(含验证码)

    前言在我的上一篇微博里我已经提出了登陆的方法,当时我采取的是纯servlet方式,因为当时刚接触到servlet,正好网上没有这方面的全面讲解,所以我就发飙了.不过在现实生产中我们大多采用的三层架构. ...

随机推荐

  1. Linux编程实现递归查找文件

    命令格式如下:SCRIPT_NAME       SEARCH_ON_DIR       SEARCH_FILENAME #!/bin/bash Find(){ files=`` for file i ...

  2. 【Kafka】实时看板案例

    目录 项目需求 项目模型 实现步骤 项目需求 快速计算双十一当天的订单量和销售金额 项目模型 实现步骤 一.创建topic bin/kafka-topics.sh --create --topic i ...

  3. 中文分词工具简介与安装教程(jieba、nlpir、hanlp、pkuseg、foolnltk、snownlp、thulac)

    2.1 jieba 2.1.1 jieba简介 Jieba中文含义结巴,jieba库是目前做的最好的python分词组件.首先它的安装十分便捷,只需要使用pip安装:其次,它不需要另外下载其它的数据包 ...

  4. .NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)

    依赖倒置原则(DIP) 依赖倒置(Dependency Inversion Principle,缩写DIP)是面向对象六大基本原则之一.他是指一种特定的的解耦形式,使得高层次的模块不依赖低层次的模块的 ...

  5. What?废柴, 模拟登陆,代码控制滑动验证真的很难吗?Are you kidding???

    1.简介 在前边的python接口自动化的时候,我们由于博客园的登录机制的改变,没有用博客园的登录测试接口.那么博客园现在变成了滑动验证登录,而且现在绝大多数的登录都变成这种滑动验证和验证码的登录验证 ...

  6. shiro 实现自定义权限规则校验

    <span style="font-family: Arial, Helvetica, sans-serif;">在系统中使用shiro进行权限管理,当用户访问没有权限 ...

  7. Docker 镜像制作教程:针对不同语言的精简策略

    本系列文章将分为三个部分: 第一部分着重介绍多阶段构建(multi-stage builds),因为这是镜像精简之路至关重要的一环.在这部分内容中,我会解释静态链接和动态链接的区别,它们对镜像带来的影 ...

  8. java基础一(标识符、数据类型及注释)

    1.标识符 标识符可以由字母.数字(不能以数字开头).下划线(_).美元符($)组成: 标识符不能包含 @.%.空格等其它特殊字符: 标识符区分大小写: 2.数据类型 int->整型->4 ...

  9. css中height, width默认值

    转载自:https://www.cnblogs.com/heyode/p/5973960.html <body> <div class="wrap"> &l ...

  10. Angular路由知识点

    路由跳转 1. 模板方式:<ANY  routerLink='/ucenter'></ANY> 2. 脚本方式:  constructor(private router:Rou ...