栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SSM整合练手简单项目

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SSM整合练手简单项目

用户注册登录页面编写 过程 1、创建一个数据库
CREATE DATAbase `ssmmyself`;

USE `ssmmyself`;

DROp TABLE IF EXISTS `user`;

CREATE TABLE `user` (
                        `userID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '用户id',
                        `userPhone` VARCHAr(13) NOT NULL COMMENT '用户的手机号',
                        `userName` VARCHAr(100) NOT NULL COMMENT '用户名',
                        `pwd` VARCHAr(200) NOT NULL COMMENT '密码',
                        KEY `userID` (`userID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `user` (userPhone,userName,pwd) VALUES('19924685736','菜菜','123456');
2、创建一个空的maven项目并添加web框架支持,以及连接数据库 3、导入所需要的依赖
    

        
            junit
            junit
            4.13
            test
        

        
            mysql
            mysql-connector-java
            8.0.23
        

        
            com.mchange
            c3p0
            0.9.5.2
        

        
            javax.servlet
            servlet-api
            2.5
        
        
            javax.servlet.jsp.jstl
            jstl-api
            1.2
        
        
            javax.servlet.jsp
            jsp-api
            2.2
        

        
            org.mybatis
            mybatis
            3.5.6
        

        
            org.mybatis
            mybatis-spring
            2.0.6
        

        
            org.springframework
            spring-webmvc
            5.3.6
        

        
            org.aspectj
            aspectjweaver
            1.9.4
        

        
            org.projectlombok
            lombok
            1.18.20
        

        
            log4j
            log4j
            1.2.17
        

        
            com.alibaba
            druid
            1.0.29
        
    

为了防止静态资源过滤问题,最好配置过滤器

    
        
            
                src/main/java
                
                    ***.properties
                
                false
            
            
                src/main/resources
                
                    ***.properties
                
                false
            
        
    
4、搭建mybatis基本结构 4.1、建包 4.2、配置mybatis核心配置文件




    
        
    


4.3、建实体类
package com.caicai.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int userID;
    private String userName;
    private String pwd;
}

4.4、写Mapper接口
package com.caicai.Mapper;

import com.caicai.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserMapper {
    //查询全部的用户
    List getUserList();
    //注册时插入一个用户
    int addUser(User user);
    //注册完之后登陆,根据用户输入的手机号进行查找对应的用户
    User selectByPhone(@Param("phone") String userPhone);
    //根据输入的手机号进行查找用户如果密码相同则删除
    int deleteUser(@Param("phone")String userPhone);
}

4.4、编写Mapper.xml文件



    
        select  * from `user`where userPhone=#{phone}
    
    
        delete * from `user` where userPhone=#{phone}
    



4.5、编写连接数据库的配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssmmyself?userSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=UTC
username=root
password=123456
# 但是我发现这样命名不行,连不上,只能下面这种形式命名
jdbc.driver=com.mysql.jdbc.Driver
# 如果使用的是MySQL8.0+,要增加一个时区的配置serverTimezone=UTC  Asia/Shanghai,而且com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmmyself?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
jdbc.user=root
jdbc.password=123456


4.6、修改一下Mapper.xml文件

PS:主要是考虑到是要整合Spring框架的所以一开并不想写数据库连接的配置到mybatis核心配置文件中的,但是考虑了一下为了更好掌握还是写了一下,等到整合的时候才删掉




    
    
        
        
    
    
        
    
    
        
            
            
                
                
                
                
            
        
    

    
    
        


    


4.7、编写mybatis工具类
package com.caicai.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.mybatis.spring.SqlSessionFactoryBean;

import java.io.IOException;
import java.io.InputStream;

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        String resource="mybatis-config.xml";
        try {
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession(true);
    }
}

4.8、编写UserService接口
package com.caicai.service;

import com.caicai.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;
//调用dao层
public interface UserService {
    //查询全部的用户
    List getUserList();
    //注册时插入一个用户
    int addUser(User user);
    //注册完之后登陆,根据用户输入的手机号进行查找对应的用户
    User selectByPhone(String userPhone);
    //根据输入的手机号进行查找用户如果密码相同则删除
    int deleteUser(String userPhone);
}

4.9、编写UserService实现类,调用底下dao层即Mapper层实现
package com.caicai.service;

import com.caicai.Mapper.UserMapper;
import com.caicai.pojo.User;

import java.util.List;

public class UserServiceImpl implements UserService{
    //调用dao层的操作,设置一个set接口,方便Spring管理
    private UserMapper userMapper;

    public void setUserMapper(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @Override
    public List getUserList() {
        return userMapper.getUserList();
    }

    @Override
    public int addUser(User user) {
        return userMapper.addUser(user);
    }

    @Override
    public User selectByPhone(String userPhone) {
        return userMapper.selectByPhone(userPhone);
    }

    @Override
    public int deleteUser(String userPhone) {
        return userMapper.deleteUser(userPhone);
    }
}

4.10、测试
import com.caicai.Mapper.UserMapper;
import com.caicai.pojo.User;
import com.caicai.service.UserServiceImpl;
import com.caicai.util.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

public class Mytest {
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        UserServiceImpl userService = new UserServiceImpl();
        userService.setUserMapper(mapper);
//        List userList = userService.getUserList();
//        for (User user : userList) {
//            System.out.println(user);
//        }
//        userService.addUser(new User(0,"19216845456","菜虾","987654"));
//        userService.selectByPhone("19216845456");
//        userService.deleteUser("19216845456");
    }
}
5、搭建spring基本结构 5.1、编写实体类

已存在实体类User

5.2、编写Spring配置文件applicationContext.xml


    
    
        
        
        
        
    


5.3、测试
import com.caicai.Mapper.UserMapper;
import com.caicai.pojo.User;
import com.caicai.util.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

public class Mytest {
    @Test
    public void testSpring(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = context.getBean("user", User.class);
        System.out.println(user);
    }

}

6、Spring和Mybatis层整合 6.1、整合dao层(即Mapper层)

创建文件spring-dao.xml



    

6.1.1、关联数据库文件

记得导入context

    xmlns:context="http://www.springframework.org/schema/context"
    http://www.springframework.org/schema/context
    https://www.springframework.org/schema/context/spring-context.xsd
 
6.1.2、设置数据库连接池

    
    
    
    
    

    
    
    
    
    
    
    
    
    


6.1.3、通过SqlSessionFactoryBean获取SqlSessionFactory
    
    
    
    
    

6.1.4、通过SqlSessionFactory获取SqlSessionTemplate(相当于MyBatis的sqlSession)
    
    

6.1.5、给接口增加实现类/配置了扫描Dao接口包

方式一:如果选择给Mapper接口增加实现类则:
实现接口(也有两种方式):

通过setSqlSessionTemplate的方法

package com.caicai.Mapper;

import com.caicai.pojo.User;
import org.mybatis.spring.SqlSessionTemplate;

import java.util.List;

public class UserMapperImpl implements UserMapper{
    //    在原来mybatis我们所有的操作都使用sqlsession来执行,现在都使用SqlSessionTemplate
    private SqlSessionTemplate sqlSessionTemplate;

    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }

    @Override
    public List getUserList() {
        return sqlSessionTemplate.getMapper(UserMapper.class).getUserList();
    }

    @Override
    public int addUser(User user) {
        return sqlSessionTemplate.getMapper(UserMapper.class).addUser(user);
    }

    @Override
    public User selectByPhone(String userPhone) {
        return sqlSessionTemplate.getMapper(UserMapper.class).selectByPhone(userPhone);
    }

    @Override
    public int deleteUser(String userPhone) {
        return sqlSessionTemplate.getMapper(UserMapper.class).deleteUser(userPhone);
    }
}

通过SqlSessionDaoSupport直接获取

package com.caicai.Mapper;

import com.caicai.pojo.User;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import java.util.List;

public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{
    @Override
    public List getUserList() {
        return getSqlSession().getMapper(UserMapper.class).getUserList();
    }

    @Override
    public int addUser(User user) {
        return getSqlSession().getMapper(UserMapper.class).addUser(user);
    }

    @Override
    public User selectByPhone(String userPhone) {
        return getSqlSession().getMapper(UserMapper.class).selectByPhone(userPhone);
    }

    @Override
    public int deleteUser(String userPhone) {
        return getSqlSession().getMapper(UserMapper.class).deleteUser(userPhone);
    }
}

并且要记得注入到Spring容器中:


    


    

方式二:


    
    
    

6.2、整合service层 6.2.1、配置扫描service包

6.2.2、将service层实现类注入到IOC容器中

        

6.2.3、配置事务管理器

这里犯傻了>:_:<:
难怪一直导入事务管理器都报错,原来是没有导入spring使用数据库的包

        
            org.springframework
            spring-jdbc
            5.3.6
        

        

6.3、将spring-dao.xml和spring-service.xml导入总的配置文件applicationContext.xml中 7、整合SpringMVC层 7.1、编写web.xml文件

记得创建对应的jsp文件夹

7.1.1、DispatcherServlet配置


    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:applicationContext.xml
        
        1
    
    
        springmvc
        /
    


7.1.2、配置过滤器防止乱码


    
        encodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    
    
        encodingFilter
        /*
    


7.2、编写SpringMVC配置文件springmvc.xml

创建一个controller包



    
    
    
    
    
    
        
        
    
    
    


导入总配置文件中


8、配置到此结束,开始controller和视图层的编写 8.1、登录界面

tips:先啥都不干,随便写个页面测试是否可以跳转。就是看配置是否正确。

8.1.1、jsp页面编写

注意:我这里没有判断两次密码是否相同,还有登录密码是否正确等,可以利用ajax
主页:

<%--
  Created by IntelliJ IDEA.
  User: hecaixia
  Date: 2022/3/14
  Time: 10:52
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    首页
    
  
  
  

注册  |  登录

注册:

<%--
  Created by IntelliJ IDEA.
  User: hecaixia
  Date: 2022/3/15
  Time: 18:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    注册页面
    


登录:

<%--
Created by IntelliJ IDEA.
User: hecaixia
Date: 2022/3/15
Time: 17:45
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    登录页面


 |  注册

内容页:

<%--
  Created by IntelliJ IDEA.
  User: hecaixia
  Date: 2022/3/15
  Time: 18:59
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    内容


这是内容页~

8.1.2、控制器编写

注册控制器:

package com.caicai.controller;

import com.caicai.pojo.User;
import com.caicai.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
//@Autowired
@Controller
public class RegisterController {
    @Autowired
    @Qualifier("userServiceImpl")
    private UserService userService;
    @RequestMapping("/toRegister")
    public String toRegister(){
        return "register";
    }
    @RequestMapping("/register")
    public String Register(User user, Model model){
        System.out.println("user=>"+user);
        System.out.println(userService);
        userService.addUser(user);
        return "login";
    }
}

登录控制器:

package com.caicai.controller;

import com.caicai.pojo.User;
import com.caicai.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class LoginController {
    @Autowired
    @Qualifier("userServiceImpl")
    private UserService userService;
    @RequestMapping("/toLogin")
    public String toLogin(){
        return "login";
    }
    @RequestMapping("/Login/{phone}/{pwd}")
    public String login(String phone,String pwd){
        User user = userService.selectByPhone(phone);
        if (user.getPwd().equals(pwd)){
            return "context";
        }
        return "login";
    }
}

9、完善,加上ajax判断
<%--
  Created by IntelliJ IDEA.
  User: hecaixia
  Date: 2022/3/15
  Time: 18:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    注册页面
    
    
    


login.jsp:

<%--
  Created by IntelliJ IDEA.
  User: hecaixia
  Date: 2022/3/15
  Time: 17:45
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    登录页面
    
    


 |  注册

AjaxController.java:

package com.caicai.controller;

import com.caicai.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Controller
public class AjaxController {
    @Autowired
    @Qualifier("userServiceImpl")
    private UserService userService;
    @RequestMapping("/a1")
    public void pwdSame(String pwd, String repwd, HttpServletResponse rsp) throws IOException {
        rsp.setCharacterEncoding("utf-8");
        System.out.println("pwd=>"+pwd);
        System.out.println("repwd=>"+repwd);
        if (!pwd.equals(repwd)){
            rsp.getWriter().print("两次输入的密码不相同");
        }
    }
    @RequestMapping("/a2")
    public void pwdStand(String userPhone, HttpServletResponse rsp) throws IOException {
        rsp.setCharacterEncoding("utf-8");
        System.out.println(userPhone+" "+userPhone.length());
        if (userPhone.length()<13){
            rsp.getWriter().print(false);
        }else {
            rsp.getWriter().print(true);
        }
    }
    @RequestMapping("/a3")
    public void pwdJudge(String phone,String pwd,HttpServletResponse rsp) throws IOException {
        rsp.setCharacterEncoding("utf-8");
        System.out.println("phone=>"+phone+"pwd=>"+pwd);
        if (!userService.selectByPhone(phone).getPwd().equals(pwd)){
            rsp.getWriter().print("密码不正确!");
        }else {
            rsp.getWriter().print(true);
        }
    }
}

附上界面:



没啦,就这样啦~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/769191.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号