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),该操作只读,要是发生修改则报错。
如果操作不成功则回滚。