博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习《Spring 3.x 企业应用开发实战》Day-1
阅读量:5241 次
发布时间:2019-06-14

本文共 8418 字,大约阅读时间需要 28 分钟。

Day-1 记录自己学习spring的笔记

提要:根据《Spring 3.x 企业应用开发实战》开头一个用户登录的例子,按照上面敲的。

1.项目分层

 

dao:持久层

domain:领域对象(个人理解为数据表映射成一个Java类)

service:业务层

web:展现层

2.构建数据表

 2.1 数据库采用MySql 5.x 版本

 2.2 建立两个数据表 user 和 user_log 表 user 用来存放用户信息,user_log用来存放user登录信息

 2.3 user:

   

     user_log:

   

3.编写UserDao、LoginLogDao类

    3.1 UserDao

    

1 package com.zwy.dao; 2  3 import java.sql.ResultSet; 4 import java.sql.SQLException; 5  6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.jdbc.core.JdbcTemplate; 8 import org.springframework.jdbc.core.RowCallbackHandler; 9 import org.springframework.stereotype.Repository;10 11 import com.zwy.domain.User;12 13 /**14  * 通过@Repository注解定义一个DAO15  * */16 @Repository17 public class UserDao {18     @Autowired//自动注入JdbcTemplate19     private JdbcTemplate jdbcTemplate;20     21     /**22      * 查询用户是否存在23      * */24     public int getMacthCount(String username,String password){25         String sql="SELECT COUNT(*) FROM user WHERE user_name=? and password=? ";26         return jdbcTemplate.queryForInt(sql, username,password);27     }28     /**29      * 根据username找到相应的user 记录(对象)30      * */31     public User findUserByUserName(final String username){32         String sql="SELECT id,user_name,credits FROM user WHERE user_name=?";33         final User user=new User();34         jdbcTemplate.query(sql, new Object[]{username}, new RowCallbackHandler() {35                     public void processRow(ResultSet reSet) throws SQLException {36                         user.setId(reSet.getInt("id"));37                         user.setUserName(reSet.getString("user_name"));38                         user.setCredits(reSet.getInt("credits"));39                     }40         });41         return user;42     }43     /**44      * 根据useid更新相应的user (对象)在数据库中的记录45      * 更新积分,登录IP,登录时间46      * */47     public void updateLoginInfo(User user){48         String sql="UPDATE user  SET      credits=?,last_ip=?,last_time=?"49             +"  WHERE id=?";50         jdbcTemplate.update(sql, user.getCredits(),user.getLastIp(),user.getLastTime(),user.getId());51     }52 }

  3.2 LoginLogDao类

package com.zwy.dao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Repository;import com.zwy.domain.UserLog;@Repositorypublic class LoginLogDao {    @Autowired        private JdbcTemplate jdbcTemplate;        /**     * 插入一条登录记录     * */    public void insertLoginLog(UserLog user){        String sql="INSERT INTO user_log(user_id,ip,log_time)"            +" VALUES (?,?,?)";        jdbcTemplate.update(sql,user.getUserId(),user.getIp(),user.getLogTime());    }}

  省略了domain 实体类的代码

4.业务层UserService的代码

  通过业务层组织持久化层的DAO完成业务逻辑操作

package com.zwy.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.zwy.dao.LoginLogDao;import com.zwy.dao.UserDao;import com.zwy.domain.User;import com.zwy.domain.UserLog;@Servicepublic class UserService {    @Autowired    private UserDao userDao;    @Autowired    private LoginLogDao loginLogDao;    /**     * 登录业务     * */    public boolean userLogin(String username,String password){        int count=userDao.getMacthCount(username, password);        return count>0;    }    /**     * 根据username找到User对象     * */    public User finUserByUserName(String username){        User user=userDao.findUserByUserName(username);        return user;    }    /**     * 成功登录,更新user的积分并添加到user_log     * */    public void successLoginLog(User user){        if(user!=null){            user.setCredits(5+user.getCredits());            UserLog userLog=new UserLog();            userLog.setUserId(user.getId());            userLog.setIp(user.getLastIp());            userLog.setLogTime(user.getLastTime());            userDao.updateLoginInfo(user);            loginLogDao.insertLoginLog(userLog);        }    }}

5.配置applicationContext.xml

6.在Junit4下测试Service的方法

package com.zwy.service;import java.util.Date;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.zwy.domain.User;@RunWith(SpringJUnit4ClassRunner.class)//1.基于junit4的spring测试框架@ContextConfiguration(locations={"/applicationContext.xml"})//2.启动spring容器public class TestService {    @Autowired    private UserService userService;        @org.junit.Test    public void userLogin(){        boolean b1=userService.userLogin("admin", "123456");        boolean b2=userService.userLogin("admin", "1111");        System.out.println(b1+","+b2);    }    @org.junit.Test    public void findUser(){        User user=userService.finUserByUserName("admin");        System.out.println(user);    }    @Test    public void successLog(){        User user=userService.finUserByUserName("admin");        user.setLastIp("192.168.1.101");        user.setLastTime(new Date());        userService.successLoginLog(user);    }}

7.编写Web层,用到SpringMVC框架

ModelAndView 是这个包下的org.springframework.web.servlet.ModelAndView;不要搞成其他包下相同名字的类

package com.zwy.web;import java.util.Date;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import com.zwy.domain.User;import com.zwy.service.UserService;//标注成为springMVC controller@Controllerpublic class LoginController {        @Autowired    private UserService userService;    //来自处理index.html    @RequestMapping(value="/index.html")    public String loginPage(){        return "login";    }    //来自处理loginCheck.html的请求    @RequestMapping(value="/loginCheck.html")    public ModelAndView loginCheck(HttpServletRequest request,LoginCommod loginCommod){        boolean isLogin=userService.userLogin(loginCommod.getUsername(), loginCommod.getPassword());        if(isLogin){            User user=userService.finUserByUserName(loginCommod.getUsername());            user.setLastIp(request.getRemoteAddr());            user.setLastTime(new Date());            userService.successLoginLog(user);            request.getSession().setAttribute("user", user);            return new ModelAndView("main");        }else {            //参数1:逻辑视图名 参数2:数据模型 ---参数3:数据对象              //request会以(数据模型,数据对象)的形势返回。            return new ModelAndView("login", "error", "用户名或者密码错误!");        }    }    }
1 package com.zwy.web; 2 //封装了form表单提交的信息 3 public class LoginCommod { 4     private String username; 5     private String password; 6     public String getUsername() { 7         return username; 8     } 9     public void setUsername(String username) {10         this.username = username;11     }12     public String getPassword() {13         return password;14     }15     public void setPassword(String password) {16         this.password = password;17     }18     19 }

8配置web.xml

web容器自动启动Spring容器

1 
2
3
4
5
contextConfigLocation
6
classpath:applicationContext.xml
7
8
9
10
org.springframework.web.context.ContextLoaderListener
11
12
13
14
15
zwy
16
org.springframework.web.servlet.DispatcherServlet
17
21
2
22
23
24
25
zwy
26
*.html
27
28
29
index.jsp
30
31

9.配置zwy-servlet.xml

放在WEB-INF目录下,放在src目录下报错

**注意 加入log4j日志框架,否则Spring框架会报错

转载于:https://www.cnblogs.com/zwyblog/p/6028297.html

你可能感兴趣的文章
服务器内存泄露 , 重启后恢复问题解决方案
查看>>
ajax post 传参
查看>>
2.1命令行和JSON的配置「深入浅出ASP.NET Core系列」
查看>>
android一些细节问题
查看>>
KDESVN中commit时出现containing working copy admin area is missing错误提示
查看>>
利用AOP写2PC框架(二)
查看>>
【动态规划】skiing
查看>>
java定时器的使用(Timer)
查看>>
Android实现静默安装与卸载
查看>>
ef codefirst VS里修改数据表结构后更新到数据库
查看>>
boost 同步定时器
查看>>
[ROS] Chinese MOOC || Chapter-4.4 Action
查看>>
简单的数据库操作
查看>>
解决php -v查看到版本与phpinfo()版本不一致问题
查看>>
iOS-解决iOS8及以上设置applicationIconBadgeNumber报错的问题
查看>>
亡灵序曲-The Dawn
查看>>
Redmine
查看>>
帧的最小长度 CSMA/CD
查看>>
xib文件加载后设置frame无效问题
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>