Bootstrap

SSM整合实现增删改查操作【保姆式教学】,阿里web前端面试题

业务层实现类编写


UserServiceImpl :

package com.keafmd.service.impl;

import com.keafmd.entity.User;

import com.keafmd.service.IUserService;

import java.util.List;

/**

  • Keafmd

  • @ClassName: UserService

  • @Description: user业务层实现类

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-19 9:25

  • @Blog: https://keafmd.blog.csdn.net/

*/

public class UserServiceImpl implements IUserService {

@Override

public List findAll() {

System.out.println(“user业务层实现类–findAll”);

return null;

}

@Override

public void saveUser(User user) {

System.out.println(“user业务层实现类–saveUser”);

}

}

表现层编写


UserController :

package com.keafmd.controller;

/**

  • Keafmd

  • @ClassName: UserController

  • @Description: user控制层

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-19 9:28

  • @Blog: https://keafmd.blog.csdn.net/

*/

public class UserController {

}

整合步骤


保证 Spring 框架在 web 工程中独立运行

第一步:编写 spring 配置文件并导入约束

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns:context=“http://www.springframework.org/schema/context”

xmlns:aop=“http://www.springframework.org/schema/aop” xmlns:tx=“http://www.springframework.org/schema/tx”

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd">

<context:component-scan base-package=“com.keafmd”>

<context:exclude-filter type=“annotation” expression=“org.springframework.stereotype.Controller”/>

</context:component-scan>

第二步:使用注解配置业务层

在 UserServiceImpl 方法上加上 @Service("userService").

package com.keafmd.service.impl;

import com.keafmd.entity.User;

import com.keafmd.service.IUserService;

import org.springframework.stereotype.Service;

import java.util.List;

/**

  • Keafmd

  • @ClassName: UserService

  • @Description: user业务层实现类

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-19 9:25

  • @Blog: https://keafmd.blog.csdn.net/

*/

@Service(“userService”)

public class UserServiceImpl implements IUserService {

@Override

public List findAll() {

System.out.println(“user业务层实现类–findAll”);

return null;

}

@Override

public void saveUser(User user) {

System.out.println(“user业务层实现类–saveUser”);

}

}

第三步:导入log4j.properties配置文件

Set root category priority to INFO and its only appender to CONSOLE.

#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal

log4j.rootCategory=info, CONSOLE, LOGFILE

Set the enterprise logger category to FATAL and its only appender to CONSOLE.

log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

CONSOLE is set to be a ConsoleAppender using a PatternLayout.

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

LOGFILE is set to be a File appender using a PatternLayout.

log4j.appender.LOGFILE=org.apache.log4j.FileAppender

log4j.appender.LOGFILE.File=d:\axis.log

log4j.appender.LOGFILE.Append=true

log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout

log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

第四步:测试 spring 能否独立运行

测试代码:

package com.keafmd;

import com.keafmd.service.IUserService;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**

  • Keafmd

  • @ClassName: TestSpring

  • @Description: 测试 spring 能否独立运行

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-19 9:38

  • @Blog: https://keafmd.blog.csdn.net/

*/

public class TestSpring {

@Test

public void test1(){

//加载配置文件

ApplicationContext ac = new ClassPathXmlApplicationContext(“classpath:applicationContext.xml”);

//获取对象

IUserService userService = (IUserService)ac.getBean(“userService”);

//调用方法

userService.findAll();

}

}

测试效果:

在这里插入图片描述

保证 SpringMVC 在 web 工程中独立运行

第一步:编写 SpringMVC 的配置文件

springmvc.xml:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:mvc=“http://www.springframework.org/schema/mvc”

xmlns:context=“http://www.springframework.org/schema/context”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=" http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">

<context:component-scan base-package=“com.keafmd”>

<context:include-filter type=“annotation” expression=“org.springframework.stereotype.Controller”/>

</context:component-scan>

<bean id=“viewResolver”

class=“org.springframework.web.servlet.view.InternalResourceViewResolver”>

<mvc:resources location=“/css/” mapping=“/css/**”/>

<mvc:resources location=“/images/” mapping=“/images/**”/>

<mvc:resources location=“/js/” mapping=“/js/**”/>

mvc:annotation-driven/

第二步:在 web.xml 中配置核心控制器(DispatcherServlet)

web.xml:

Archetype Created Web Application

dispatcherServlet

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:springmvc.xml

1

dispatcherServlet

/

characterEncodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

characterEncodingFilter

/*

第三步:编写 Controller 和 jsp 页面

UserController :

package com.keafmd.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

/**

  • Keafmd

  • @ClassName: UserController

  • @Description: user控制层

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-19 9:28

  • @Blog: https://keafmd.blog.csdn.net/

*/

@Controller

@RequestMapping(“/user”)

public class UserController {

@RequestMapping(“/findAll”)

public String findAll(){

System.out.println(“表现层–查询所有用户”);

return “user_list”;

}

}

index.jsp:

<%–

Created by IntelliJ IDEA.

User: lenovo

Date: 2021/4/19

Time: 9:52

To change this template use File | Settings | File Templates.

–%>

<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

Title

查询所有用户

user_list.jsp:

<%–

Created by IntelliJ IDEA.

User: lenovo

Date: 2021/4/19

Time: 9:55

To change this template use File | Settings | File Templates.

–%>

<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

Title

查询所有用户

第四步:部署tomcat服务器

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

-Dfile.encoding=utf-8

在这里插入图片描述

第五步:启动服务器,进行测试

在这里插入图片描述

点击后的效果:

在这里插入图片描述

在这里插入图片描述

Spring 整合 SpringMVC 的框架

第一步:配置监听器实现启动服务创建容器

org.springframework.web.context.ContextLoaderListener

contextConfigLocation

classpath:applicationContext.xml

完整的web.xml:

Archetype Created Web Application

dispatcherServlet

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:springmvc.xml

1

dispatcherServlet

/

org.springframework.web.context.ContextLoaderListener

contextConfigLocation

classpath:applicationContext.xml

characterEncodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

characterEncodingFilter

/*

第二步:在controller中注入service对象,调用service对象的方法进行测试

UserController :

package com.keafmd.controller;

import com.keafmd.service.IUserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

/**

  • Keafmd

  • @ClassName: UserController

  • @Description: user控制层

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-19 9:28

  • @Blog: https://keafmd.blog.csdn.net/

*/

@Controller

@RequestMapping(“/user”)

public class UserController {

@Autowired

private IUserService userService;

@RequestMapping(“/findAll”)

public String findAll(){

System.out.println(“表现层–查询所有用户”);

//调用service的方法

userService.findAll();

return “user_list”;

}

}

重启Tomcat点击查询所有用户,控制台输出效果如下:

在这里插入图片描述

保证 MyBatis 框架在 web 工程中独立运行

第一步:在web项目中编写SqlMapConfig.xml的配置文件,编写核心配置文件

SqlMapConfig.xml:

<?xml version="1.0" encoding="UTF-8"?>

jdbcConfig.properties:

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/ssmtest

jdbc.username=root

jdbc.password=18044229

第二步:在IUserDao接口的方法上添加注解,编写SQL语句

IUserDao :

package com.keafmd.dao;

import com.keafmd.entity.User;

import org.apache.ibatis.annotations.Insert;

import org.apache.ibatis.annotations.Select;

import java.util.List;

/**

  • Keafmd

  • @ClassName: IUserDao

  • @Description: 用户dao接口

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-19 9:20

  • @Blog: https://keafmd.blog.csdn.net/

*/

public interface IUserDao {

//查询所有

@Select(“select * from user”)

public List findAll();

//保存用户

@Insert(“insert into user(username,password) values(#{userName},#{password})”)

public void saveUser(User user);

}

第三步:编写测试的方法

TestMybatis :

package com.keafmd;

import com.keafmd.dao.IUserDao;

import com.keafmd.entity.User;

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.junit.After;

import org.junit.Before;

import org.junit.Test;

import java.io.InputStream;

import java.util.List;

/**

  • Keafmd

  • @ClassName: TestMybatis

  • @Description:

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-19 10:20

  • @Blog: https://keafmd.blog.csdn.net/

*/

public class TestMybatis {

private InputStream in;

private SqlSessionFactory factory;

private SqlSession session;

private IUserDao userDao;

@Before

public void init() throws Exception{

//加载配置文件

in = Resources.getResourceAsStream(“SqlMapConfig.xml”);

//创建SqlSessionFactory对象

factory = new SqlSessionFactoryBuilder().build(in);

//创建SqlSession对象

session = factory.openSession();

//获取到代理对象

userDao = session.getMapper(IUserDao.class);

}

@After

public void destory() throws Exception{

session.commit();

session.close();

in.close();

}

/**

  • 查询所有

*/

@Test

public void run1(){

List users = userDao.findAll();

for (User user : users) {

System.out.println(user);

}

}

/**

  • 测试保存

*/

@Test

public void saveUser(){

User user = new User();

user.setUserName(“毛利小五郎”);

user.setPassword(“999”);

userDao.saveUser(user);

}

}

测试效果:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Spring 整合 MyBatis 框架

把 mybatis 配置文件(SqlMapConfig.xml)中内容配置到 spring 配置文件中同时,把 mybatis 配置文件的内容清掉。

第一步:把SqlMapConfig.xml配置文件中的内容配置到applicationContext.xml配置文件中

把以下内容添加到applicationContext.xml配置文件中:

再添加上配置Spring框架声明式事务管理:

<tx:advice id=“txAdvice” transaction-manager=“transactionManager”>

tx:attributes

<tx:method name=“find*” propagation=“SUPPORTS” read-only=“true”/>

<tx:method name=“*” isolation=“DEFAULT”/>

</tx:attributes>

</tx:advice>

aop:config

<aop:pointcut expression=“execution(* com.keafmd.service.impl..(…))” id=“pt1”/>

<aop:advisor advice-ref=“txAdvice” pointcut-ref=“pt1”/>

</aop:config>

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns:context=“http://www.springframework.org/schema/context”

xmlns:aop=“http://www.springframework.org/schema/aop” xmlns:tx=“http://www.springframework.org/schema/tx”

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd">

<context:component-scan base-package=“com.keafmd”>

<context:exclude-filter type=“annotation” expression=“org.springframework.stereotype.Controller”/>

</context:component-scan>

<tx:advice id=“txAdvice” transaction-manager=“transactionManager”>

tx:attributes

<tx:method name=“find*” propagation=“SUPPORTS” read-only=“true”/>

<tx:method name=“*” isolation=“DEFAULT”/>

</tx:attributes>

</tx:advice>

aop:config

<aop:pointcut expression=“execution(* com.keafmd.service.impl..(…))” id=“pt1”/>

<aop:advisor advice-ref=“txAdvice” pointcut-ref=“pt1”/>

</aop:config>

第三步:在IUserDao接口中添加@Repository注解

package com.keafmd.dao;

import com.keafmd.entity.User;

import org.apache.ibatis.annotations.Insert;

import org.apache.ibatis.annotations.Result;

import org.apache.ibatis.annotations.Results;

import org.apache.ibatis.annotations.Select;

import org.springframework.stereotype.Repository;

import java.util.List;

/**

  • Keafmd

  • @ClassName: IUserDao

  • @Description: 用户dao接口

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-19 9:20

  • @Blog: https://keafmd.blog.csdn.net/

*/

@Repository

public interface IUserDao {

//查询所有

@Select(“select * from user”)

public List findAll();

//保存用户

@Insert(“insert into user(username,password) values(#{userName},#{password})”)

public void saveUser(User user);

}

第四步:在UserServiceImpl中注入dao对象

package com.keafmd.service.impl;

import com.keafmd.dao.IUserDao;

import com.keafmd.entity.User;

import com.keafmd.service.IUserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.List;

/**

  • Keafmd

  • @ClassName: UserService

  • @Description: user业务层实现类

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-19 9:25

  • @Blog: https://keafmd.blog.csdn.net/

*/

@Service(“userService”)

public class UserServiceImpl implements IUserService {

@Autowired

IUserDao userDao;

@Override

public List findAll() {

System.out.println(“user业务层实现类–findAll”);

return userDao.findAll();

}

@Override

public void saveUser(User user) {

System.out.println(“user业务层实现类–saveUser”);

userDao.saveUser(user);

}

}

第五步:修改 UserController 代码

package com.keafmd.controller;

import com.keafmd.entity.User;

import com.keafmd.service.IUserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.http.HttpRequest;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.util.List;

/**

  • Keafmd

  • @ClassName: UserController

  • @Description: user控制层

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-19 9:28

  • @Blog: https://keafmd.blog.csdn.net/

*/

@Controller

@RequestMapping(“/user”)

public class UserController {

@Autowired

private IUserService userService;

@RequestMapping(“/findAll”)

public String findAll(Model model){

System.out.println(“表现层–查询所有用户”);

//调用service的方法

List userList = userService.findAll();

model.addAttribute(“userList”,userList);

return “user_list”;

}

@RequestMapping(“/save”)

public void save(User user , HttpServletRequest request, HttpServletResponse response) throws IOException {

userService.saveUser(user);

response.sendRedirect(request.getContextPath()+“/user/findAll”);

return;

}

}

第五步:修改 user_list.jsp 代码,实现显示账户信息

<%–

Created by IntelliJ IDEA.

User: lenovo

Date: 2021/4/19

Time: 9:55

To change this template use File | Settings | File Templates.

–%>

<%@ page contentType=“text/html;charset=UTF-8” language=“java” isELIgnored=“false” %>

<%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

Title

查询所有用户

<%-- ${userList}–%>

<c:forEach items=“${userList}” var=“user”>

${user.userName}

${user.password}

</c:forEach>

第六步:测试查询

效果:

在这里插入图片描述

第七步:测试保存

修改index.jsp代码,添加测试保存的代码:

<%–

Created by IntelliJ IDEA.

User: lenovo

Date: 2021/4/19

Time: 9:52

To change this template use File | Settings | File Templates.

–%>

<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

Title

查询所有用户

测试保存

账户名:

密码:

修改 UserController 代码,添加save方法:

package com.keafmd.controller;

import com.keafmd.entity.User;

import com.keafmd.service.IUserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.http.HttpRequest;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.util.List;

/**

  • Keafmd

  • @ClassName: UserController

  • @Description: user控制层

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-19 9:28

  • @Blog: https://keafmd.blog.csdn.net/

*/

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

刷面试题

刷题的重要性,不用多说。对于应届生或工作年限不长的人来说,刷面试题一方面能够尽可能地快速自己对某个技术点的理解,另一方面在面试时,有一定几率被问到相同或相似题,另外或多或少也能够为自己面试增加一些自信心,可见适当的刷题是很有必要的。

  • 前端字节跳动真题解析

  • 【269页】前端大厂面试题宝典

最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

改 UserController 代码,添加save方法:**

package com.keafmd.controller;

import com.keafmd.entity.User;

import com.keafmd.service.IUserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.http.HttpRequest;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.util.List;

/**

  • Keafmd

  • @ClassName: UserController

  • @Description: user控制层

  • @author: 牛哄哄的柯南

  • @Date: 2021-04-19 9:28

  • @Blog: https://keafmd.blog.csdn.net/

*/

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-ryrkKgSD-1712768490180)]
[外链图片转存中…(img-ZpAraZ9d-1712768490180)]
[外链图片转存中…(img-Gubswt5o-1712768490180)]
[外链图片转存中…(img-MbGdODr3-1712768490181)]
[外链图片转存中…(img-YuHJL09H-1712768490181)]
[外链图片转存中…(img-0vpVTRLL-1712768490181)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-yAQv3TCY-1712768490182)]

刷面试题

刷题的重要性,不用多说。对于应届生或工作年限不长的人来说,刷面试题一方面能够尽可能地快速自己对某个技术点的理解,另一方面在面试时,有一定几率被问到相同或相似题,另外或多或少也能够为自己面试增加一些自信心,可见适当的刷题是很有必要的。

  • 前端字节跳动真题解析

  • 【269页】前端大厂面试题宝典

最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-kXusjHz5-1712768490182)]

;