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” %>
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” %>
查询所有用户
第四步:部署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” %>
查询所有用户
<%-- ${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” %>
测试保存
账户名:
密码:
修改 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前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
刷面试题
刷题的重要性,不用多说。对于应届生或工作年限不长的人来说,刷面试题一方面能够尽可能地快速自己对某个技术点的理解,另一方面在面试时,有一定几率被问到相同或相似题,另外或多或少也能够为自己面试增加一些自信心,可见适当的刷题是很有必要的。
-
前端字节跳动真题解析
-
【269页】前端大厂面试题宝典
最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
改 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)]