log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
②SpringMVC引入
- 在resources目录下创建spring-mvc.xml ,内容如下:
<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:mvc=“http://www.springframework.org/schema/mvc”
xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd”>
<context:component-scan base-package=“com.sangeng.controller”/>
mvc:default-servlet-handler/
mvc:annotation-driven
mvc:message-converters
</mvc:message-converters>
</mvc:annotation-driven>
- 上方配置了 SpringMVC 扫描 controller包 ,所以我们要在 sangeng 下新建包 controller
- 最后修改web.xml文件
<web-app xmlns=“http://xmlns.jcp.org/xml/ns/javaee”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd”
version=“4.0”>
DispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
DispatcherServlet
/
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
CharacterEncodingFilter
/*
③Spring整合入web项目
让web项目启动的时候就能够创建Spring容器。可以使用Spring提供的监听器ContextLoaderListener,所以我们需要再 web.xml 中配置这个监听器,并且配置上Spring配置文件的路径。
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
这样我们的SSM整合配置层面就已经完成了,接下来我们编写测试
我们来编写根据id查询用户的接口来进行测试
先有 Controller,请求过来被 Controller 里面的 Handler 所处理,在 Handler中 通过 Service 处理,Service 内部又会依赖 dao 去进行数据库的查询,dao 是使用 Mybatis 的写法
所以我们先写 Controller, 再写Service接口,实现Service接口中的方法,并且在Service实现类中注入dao,再去写dao,再去写对应的xml映射文件
1.4.1、编写实体类domain
- com.sangeng.domain.User.java 代码如下
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
// 这里的属性和我们数据库的属性是一一对应的
private Integer id;
private String username;
private Integer age;
private String address;
}
1.4.2、编写Service
- com.sangeng.service.UserService 接口 ,代码如下
public interface UserService {
User findById(Integer id);
}
- com.sangeng.service.impl.UserServiceImpl 实现类代码如下
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
public User findById(Integer id) {
return userDao.findById(id);
}
}
-
@Service
注解使用在Service层类上用于实例化Bean,设置该类为spring管理的bean -
@Autowired
注解使用在字段上上用于根据类型依赖注入,为了从Spring容器中获得此对象
1.4.3、编写dao
- com.sangeng.dao.UserDao接口,代码如下
public interface UserDao {
/**
-
根据id查询用户
-
@param id
-
@return
*/
User findById(Integer id);
}
- 针对接口生成对应的 mapper 映射文件,resources -> 右键 -> new Directory 生成对应的 mapper 目录
- 插件的存在可以帮我们一键生成 mapper.xml 映射文件,alt+回车 ,选择插件
- 选择 mapper.xml 生成的位置
- 之后继续在方法上 alt + 回车
- 这样我们只需要在生成的 mapper.xml 中写 sql 语句即可
- 所以 resources/com/sangeng/dao/UserDao.xml 代码如下:
select * from user where id = #{id}
1.4.4、1.4.4、编写Controller
需求:根据 id 去查询用户
-
Controller 是没法查询数据库的,需要依赖 service,所以需要先创建 service接口和实现类
-
service 实现类需要依赖 dao 层去查询数据库
-
dao 是用 mybatis 来查询数据库的操作
- 所以 com.sangeng.controller.UserController ,代码如下:
// @Controller + @ResponseBody = @RestController
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping(“/user/{id}”)
public User findById(@PathVariable Integer id){
User user = userService.findById(id);
return user;
}
}
-
加
@Controller
注解使用在web层类上用于实例化Bean,设置该类为springMVC管理的bean -
加
@ResponseBody
注解把返回值转换成 Json 格式放到响应体中。 -
@Controller
+@ResponseBody
=@RestController
-
加
@RequestMapping
注解是为了设置请求路径 -
加
@Autowired
注解使用在字段上上用于根据类型依赖注入,为了从Spring容器中获得此对象 -
加
@PathVariable
注解是获取请求路径的参数 -
最后我们在 pom.xml 中配置一下 tomcat插件
org.apache.tomcat.maven
tomcat7-maven-plugin
2.1
80
utf-8
访问测试:
当然我们也可以不配置 tomcat 插件,而是将 tomcat 集成到 IDEA 中启动
======================================================================
我们要保证一个项目中所有接口返回的数据格式的统一。这样无论是前端还是移动端开发获取到我们的数据后都能更方便的进行统一处理。我们这里是将所有的数据格式统一为 json 格式。
所以我们定义以下结果封装类 ResponseResult,由于格式统一是公用的,所以我们可以在 com.sangeng 下创建一个公共 common 包,在包下创建结果封装类 ResponseResult
@JsonInclude(JsonInclude.Include.NON_NULL)
注解表示如果某个属性的值不为NULL,才会将其转化为Json格式
// 加上此注解,如果某个属性的值不为NULL,才会将其转化为Json格式
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResponseResult {
/**
- 状态码
*/
private Integer code;
/**
- 提示信息,如果有错误时,前端可以获取该字段进行提示
*/
private String msg;
/**
- 查询到的结果数据(不同接口查询的类型不一样,所以我们可以设为泛型)
*/
private T data;
// 三个参数的有参构造(查询操作需要返回查询的数据data)
public ResponseResult(Integer code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}
// 两个参数的有参构造(状态码和提示信息)
public ResponseResult(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
// 两个参数的有参构造(状态码和数据)
public ResponseResult(Integer code, T data) {
this.code = code;
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
所以我们将之前的 controller 查询 id 为1返回的查询数据进行封装,修改代码如下 :
- 返回类型为我们封装的结果集 ResponseResult 类型
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping(“/user/{id}”)
public ResponseResult findById(@PathVariable(“id”) Integer id){
User user = userService.findById(id);
if(user==null){
//说明没有对应的用户
return new ResponseResult(500,“没有该用户”);
}
return new ResponseResult(200,“操作成功”,user);
}
}
访问测试:
- tomcat 插件启动展示:
- IDEA 集成 tomcat 展示:
- 在Controller层调用Service中的方法
@RestController
public class UserController {
@Autowired
private UserService userService;
// 查询所有用户
@GetMapping(“/user”)
public ResponseResult findAll(){
List list = userService.findAll();
return new ResponseResult(200,“操作成功”,list);
}
}
- Service接口如下
public interface UserService {
// 根据 id 查询用户
User findById(Integer id);
// 查询所有用户
List findAll();
}
- 在Service实现类中调用dao中的方法
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
//省略其他无关代码
public List findAll() {
return userDao.findAll();
}
}
- dao层接口如下:
public interface UserDao {
// 查询所有用户
List findAll();
}
- dao层利用插件生成 mapper.xml 文件如下
select * from user
tomcat 插件启动展示:
IDEA 集成 tomcat 展示:
分页查询的结果除了要包含查到的用户数据外还要有当前页数,每页条数,总记录数这些分页数据。
所以我们在 common 包下新建分页封装类 PageResult,代码如下:
public class PageResult {
// 当前页数
private Integer currentPage;
// 每页条数
private Integer pageSize;
// 总记录数
private Integer total;
// 分页数据
private List data;
public PageResult(Integer currentPage, Integer pageSize, Integer total, List data) {
this.currentPage = currentPage;
this.pageSize = pageSize;
this.total = total;
this.data = data;
}
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotal() {
return total;
}
public void setTotal(Integer total) {
this.total = total;
}
public List getData() {
return data;
}
public void setData(List data) {
this.data = data;
}
}
- 编写Controller类,调用Service层的方法
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping(“/user/{pageSize}/{pageNum}”)
public ResponseResult findByPage(@PathVariable(“pageSize”) Integer pageSize,@PathVariable(“pageNum”) Integer pageNum){
PageResult pageResult = userService.findByPage(pageSize,pageNum);
return new ResponseResult(200,“操作成功”,pageResult);
}
}
- 编写Service实现类,调用Dao层的方法
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
public PageResult findByPage(Integer pageSize, Integer pageNum) {
PageHelper.startPage(pageNum,pageSize);
List list = userDao.findAll();
PageInfo pageInfo = new PageInfo(list);
PageResult pageResult = new PageResult(pageInfo.getPageNum(),pageInfo.getPageSize(), (int) pageInfo.getTotal(),list);
return pageResult;
}
}
①编写 Controller 层,调用 service 层方法
- 我们是在请求体中传入Json格式的数据,
@RequestBody
注解可以获取请求体中的数据
// 插入用Post请求
@PostMapping(“/user”)
public ResponseResult insertUser(@RequestBody User user){
userService.insertUser(user);
return new ResponseResult(200,“操作成功”);
}
②编写 Service 层,在 service 实现类中调用 dao 方法
- 在Service接口中增加方法定义
void insertUser(User user);
- 实现类中实现该方法:
public void insertUser(User user) {
userDao.insertUser(user);
}
③编写 Dao 层,使用插件生成 mapper.xml 映射文件
- 在接口中定义方法
void insertUser(User user);
- 在mapper映射文件中
insert into user values(null,#{username},#{age},#{address})
④测试:我们向请求体当中传入Json数据
{“username”:“三更草堂”,“age”:15,“address”:“请问”}
我们是把传入请求体的Json数据封装成User对象,在PostMan软件里演示,因为浏览器只方便演示GET请求
①编写 Controller 层,调用 service 层方法
//根据id删除用户
//删除用 delete 请求
@DeleteMapping(“/user/{id}”)
public ResponseResult deleteUser(@PathVariable(“id”) Integer id){
userService.deleteUser(id);
return new ResponseResult(200,“操作成功”);
}
②编写 Service 层,在 service 实现类中调用 dao 方法
- 在Service接口中增加方法定义
void deleteUser(Integer id);
- 实现类中实现该方法:
public void deleteUser(Integer id) {
userDao.deleteUser(id);
}
③编写 Dao 层,使用插件生成 mapper.xml 映射文件
- 在接口中定义方法
void deleteUser(Integer id);
- 在mapper映射文件中
delete from user where id = #{id}
在PostMan里面进行演示,删除id为3的用户
①编写 Controller 层,调用 service 层方法
// 更新用户
// 更新操作用put请求
@PutMapping(“/user”)
public ResponseResult updateUser(@RequestBody User user){
userService.updateUser(user);
return new ResponseResult(200,“操作成功”);
}
②编写 Service 层,在 service 实现类中调用 dao 方法
- 在Service接口中增加方法定义
void updateUser(User user);
- 实现类中实现该方法:
public void updateUser(User user) {
userDao.updateUser(user);
}
③编写 Dao 层,使用插件生成 mapper.xml 映射文件
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
还有更多学习笔记面试资料也分享如下:
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
color_FFFFFF,t_70,g_se,x_16#pic_center)
①编写 Controller 层,调用 service 层方法
// 更新用户
// 更新操作用put请求
@PutMapping(“/user”)
public ResponseResult updateUser(@RequestBody User user){
userService.updateUser(user);
return new ResponseResult(200,“操作成功”);
}
②编写 Service 层,在 service 实现类中调用 dao 方法
- 在Service接口中增加方法定义
void updateUser(User user);
- 实现类中实现该方法:
public void updateUser(User user) {
userDao.updateUser(user);
}
③编写 Dao 层,使用插件生成 mapper.xml 映射文件
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-L0vnon03-1711858181165)]
[外链图片转存中…(img-R9sOgJn3-1711858181166)]
[外链图片转存中…(img-4GaSv5oG-1711858181167)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
还有更多学习笔记面试资料也分享如下:
[外链图片转存中…(img-zorSfDHj-1711858181167)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!