SpringBoot整合web、Mybatis

本文详细介绍了如何在SpringBoot项目中整合Web组件,包括使用RestController实现前后端分离,注册Servlet、Filter和Listener。同时,文章还涵盖了Mybatis的集成步骤,从配置数据库连接、创建bean、mapper到service和controller的实现。并讨论了模板引擎的选择,如FreeMarker、Velocity和Thymelea。最后,文章提到了事务管理和Mybatis的配置文件引入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Web整合

RestController更加激进的前后端分离

所有的requestMapping返回的都是json数据

package com.bamzhy.controller;

@RestController
public class MyController {
    @Autowired
    MyConfig config;

    @RequestMapping("/haha")
    public MyConfig test(){
        return config;
    }
}

这里写图片描述

注册Servlet,Filter,Listener

因为web组件都被spring接管了,你自己要单独编写configuration告诉spring我要用这些组件

  • configuration
package com.bamzhy.config;

@Configuration
public class MyWebConfig extends WebMvcConfigurationSupport {
    @Autowired
    MyServlet servlet;
    @Bean
    public ServletRegistrationBean getServletRegistrationBean(){
        return new ServletRegistrationBean(servlet,"/myservlet");
    }
}
  • servlet
package com.bamzhy.servlet;

@Component
public class MyServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("Hello,springBoot Servlet!");
    }
}
  • configuration
package com.bamzhy.config;
@Configuration
public class MyWebConfig extends WebMvcConfigurationSupport {
    @Autowired
    MyFilter filter;
    @Bean
    public FilterRegistrationBean getFilterRegistrationBean(){
        FilterRegistrationBean filterFilterRegistrationBean = new FilterRegistrationBean();
        filterFilterRegistrationBean.setFilter(filter);
        filterFilterRegistrationBean.addUrlPatterns("/myservlet/*");
        return filterFilterRegistrationBean;
    }
}
  • Filter
package com.bamzhy.filter;

@Component
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("before");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("after");
    }

    @Override
    public void destroy() {
    }
}
  • listener
package com.bamzhy.listener;

@Component
public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("this is listener");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
    }
}
    @Bean
    public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
        return new ServletListenerRegistrationBean(listener);
    }
  • tip
    Spring2.0之后 Filter listener 不需要配置,只要定义了就默认生效。

注册拦截器interceptor

@Component
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        System.out.println("My Interceptor");
        return true;
    }
}
@Configuration
public class MyWebConfig2  implements WebMvcConfigurer {
    @Autowired
    MyInterceptor interceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(interceptor).addPathPatterns("/*");
    }
}

模板引擎

  • 先增加FreeMarker的依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
  • 模板文件和控制器
    这里写图片描述
    这里写图片描述
  • Volecity
  • Thymelea
    这俩模板技术可以自己参考文档,我是不想看了^_^

Mybatis整合

这里写图片描述

  • 如果一开始没有配置jdbc的连接信息,就运行程序会报错
  • applicationproperties
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=12345
  • bean类
public class User {
    int id ;
    String username;
    String password;
    String email;
    int  age;
  • 接口类(mapper)
package com.bamzhy.ssmdemo.dao;

import com.bamzhy.ssmdemo.bean.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface UserDao {
    @Select("select * from user where id =#{id}")
    User findUserById(int id );
}
  • service类
package com.bamzhy.ssmdemo.service;

@Service
public class UserService {
    @Autowired
    UserDao dao;
    public User findUserById(int id) {
        return  dao.findUserById(id);
    }
}
  • controller
package com.bamzhy.ssmdemo.controller;
@RestController
public class MyController  {
    @Autowired
    UserService service;
    @RequestMapping("/user/{id}")
    public User getUserById(@PathVariable("id") int id){
        User userById = service.findUserById(id);
        return userById;
    }
}
  • 如果使用test方法
    记得加上@SpringBootTest(classes = SsmdemoApplication.class)
  • 可以使用注解或者xml的方法
    而xml的位置如下
    这里写图片描述
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bamzhy.ssmdemo.dao.UserDao">

    <select id="findUserById" parameterType="int" resultType="com.bamzhy.ssmdemo.bean.User">
        SELECT *FROM user WHERE id = #{xx}
    </select>


    <select id="findUserByName" parameterType="string" resultType="com.bamzhy.ssmdemo.bean.User">

        SELECT *FROM user WHERE username = #{xx}

    </select>
</mapper>

注解和xml可以同时存在

  • @Param注解
    可以让接口里传入多个参数
    在userdao(mapper)里边定义
@Mapper
public interface UserDao {
    @Select("select * from user where id =#{id} and username=#{username}")
    User findUserById(@Param("id")int id, @Param("username") String username);
}
  • 引入Mybatis配置文件
    在application.properties中加入
    mybatis.config-location=mybatis.xml
    mybatis的相关配置与之前无异

  • 开启事务
    在SsmdemoApplication上边加@EnableTransactionManagement
    在需要加事务的接口上加@Transaction(readOnly = true),该操作只读,要是发生修改则报错。
    如果操作不成功则回滚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值