springboot注解有哪些 持续更新 Springboot学习笔记

Spring Boot/** * 只有在容器中的组件,才能拥有springboot的功能 *///@Component//将组件加到容器中@ConfigurationProperties(prefix = "mycar")//prefix指的配置文件里的前缀相绑定public class Car {private String brand;private Integer price;public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public Integer getPrice() {return price;}public void setPrice(Integer price) {this.price = price;}@Overridepublic String toString() {return "Car{" +"brand='" + brand + '\'' +", price=" + price +'}';}}/** * 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的 * 2、配置类本身也是组件 * 3、proxyBeanMethods :代理bean的方法 *Full(proxyBeanMethods = true)为true时发现调用一次之后就继续使用该对象 *Lite(proxyBeanMethods = false) 为false时每次调用就会产生一个新对象 *组件依赖 * 4、@Import({User.class}):给容器中自动创建出写入类型的组件,默认组件名字就是全类名 */@Import({User.class, DBHelper.class})@Configuration(proxyBeanMethods = true)//告诉springboot这是一个配置类 等同于 以前的配置文件 proxyBeanMethods默认为true//@ConditionalOnMissingBean(name = "")//容器中没有括号内组件时,执行下面代码//@ImportResource("classpath:xxx.xml")//当你有xml类型的组件配置文件时,可以在用这个注解导入,会自动将这个xml文件的组件注入到容器当中@EnableConfigurationProperties(Car.class)//1、开启Car的配置绑定功能2、把Car这个组件自动注入到容器中(或者不写这个 。在Car类中增加一个@Component注解)public class MyConfig {/*** 外部无论对这个配置类中的组件注册方法调用多少次,获取的都是之前注册到容器中的单实例对象* @return*/@Bean //给容器中添加组件:以方法名作为组件id,返回类型就是组件类型,返回的值就是组件在容器中保存的实例public User user01(){User zhangsan = new User("张三",18);//User组件依赖了Pet组件zhangsan.setPet(tomcatPet());return zhangsan;}@ConditionalOnBean(name = "user01")//当容器中有user01组件时,下面代码才生效,可以放在类上面,也可以放在方法上面@Bean("TomCat")//可以给容器组件自定义名字public Pet tomcatPet(){return new Pet("tomcat");}}//@ResponseBody//@Controller@RestController//就是ResponseBody和Controller注解的合体public class HelloController {@ResponseBody//表示该类返回的数据直接返回给浏览器@RequestMapping("/hello")public String handle01(){return "Hello,SpringBoot 2!";}@Autowired//自动注入Car car;@RequestMapping("/car")public Car car(){return car;}}Starter依赖引入
dev Tools? 热更新:Ctrl + F9代码修改后,快捷键直接重启系统,但其实和restart没多大区别
依赖注入<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency>SpringInitializer? 新建项目的时候选择,直接选择项目所需要的文件,自动引入依赖
lombok作用:信息类使用
@AllArgsConstructor//添加有参构造方法@NoArgsConstructor//添加无参构造方法@Data//添加set、get方法@ToString//添加tostring方法依赖引入
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>核心功能配置文件类前面要加上对应的绑定
@ConfigurationProperties( prefix = "xxx" )//xxx对应yml文件里的key值public class xxxx{}

  1. ? 第一种:application. Properties 配置文件
  2. ? 第二种:yaml 文件 适合用来做以数据为中心的配置文件
    基本语法:
    key:value ;(冒号后有一个空格)
    使用缩进表示层级关系
    缩进不允许使用tap,只允许使用空格(idea中可以用tap)
    缩进的空格数不重要,只要相同层级的元素左对齐即可
    “#”表示注释
    字符串无需加引号,如果要加,' ' 和 " " 表示字符串内容,会被转义/不转义
    k: v #键值对写法:map、hash、set、object行类写法:k: {k1:v1,k2:v2,k3:v3}或者:k:k1: v1k2: v2k3: v3#数组写法:array、list、queue行类写法:k: [v1,v2,v3]#写法k:- v1- v2- v3在写配置文件时,引入下面依赖,可以在配置时自动提示
org.springframework.bootspring-boot-configuration-processortrue ```---Web开发静态资源访问1、静态资源目录
只要静态资源在 static 或 resources 或 public 或 META-INF/resources 文件下
在浏览器直接请求静态资源文件名就可以得到:localhost:8080/(静态资源文件名)
原理:先通过请求找到controller里面有没有相应的request mapping如果没有,再去静态资源文件夹区找相应的静态资源,如果静态资源找不到,就会404
2、静态资源访问前缀
默认无前缀
spring:mvc:static-path-pattern:/res/**#设置静态资源访问前缀,访问静态资源时必须加上设置的前缀resources:static-locations: [classpath:/haha/]#[]是数组写法,可以配置多个访问文件夹#设置静态资源访问文件夹,设置完成后,系统只在设置的文件加里面访问静态资源欢迎页支持(index)静态资源路径下 index.html
? 可以配置静态资源路径
? 但是不可以配置静态资源的访问前缀,否则就会导致index.html不能被默认访问
controller能处理/index
自定义 Favicon (网页图标)将命名为favicon.ico 的图片放在静态资源目录下面,springBoot会自动将图标设置为网页图标
请求参数注解使用@RequestParam()注解:获取前端参数包括表单参数@RequestMapping("/user")public String hello(@RequestParam("username") String name){//获取路径中问号后面传入的值}//也可以通过直接传入session的方式public String hello(HttpSession session){}@GetMapping("/car/{id}/owner/{username}")public Map<String,Object> getCar( @RequestParam("age")Integer age,@RequestParam("inters")List<String> inters,@RequestParam Map<String,String> params){//直接获取所有参数并用Map来接Map<String,Object> map = new HashMap<>();map.put("age",age);map.put("inters",inters);map.put("params",params);return map;}@PathVariable()注解:获取路径中的变量@RequestHeader()注解:获取请求头,不带参数获取全部,带参数获取单个
<a href="https://tazarkount.com/read/car/3/owner/lisi">car/3/owner/lisi</a>@GetMapping("/car/{id}/owner/{username}")public Map<String,Object> getCar(@PathVariable("id") Integer id,@PathVariable("username") String name,//这个@PathVariable和@GetMapping大括号里的一一对应@RequestHeader("User-Agent") String userAgent,//获取请求头@RequestHeader() Map<String,String> header){//获取请求头Map<String,Object> map = new HashMap<>();map.put("id",id);map.put("name",name);map.put("userAgent",userAgent);map.put("header",header);return map;}}@CookieValue()获取cookie的值public String test(@CookieValue("")String name){}@RequestBody():获取请求体@PostMapping("/save")public Map PostMeth(@RequestBody String content){Map<String,Object> map = new HashMap<>();map.put("content",content);return map;}{"content":"userName=2222&email=2222"}@RequestAttribute():获取request中的值? 只可以获取request设置的值,不能获取前端表单的值
@Controllerpublic class RequestController {@GetMapping("/goto")public String gotopage(HttpServletRequest request){request.setAttribute("msg","成功了");return "forward:/success";}@ResponseBody@GetMapping("/success")public String success(@RequestAttribute("msg") String msg){return msg;}}@MatrixVariable()矩阵变量/car/Path?xxx=xxx&xxx=xxx@RequestParam /car/Path;xxx=xxx;xxx=xxx,xxx,xxx矩阵变量页面开发,cookie禁用了,session里的应用怎么使用
? session.set(a,b) ---> jsessionid --->cookie ---> 每次发请求携带
? URL重写:/abc;jsessionid=xxxx 把cookie的值使用矩阵变量的方式进行传递
<a href="https://tazarkount.com/cars/sell;low=34;brand=byd,audi,yd">@MatrixVariable(矩阵变量)</a><a href="https://tazarkount.com/cars/sell;low=34;brand=byd;brand=audi;brand=yd">@MatrixVariable(矩阵变量)</a><a href="https://tazarkount.com/boss/1;age=20/2;age=10">@MatrixVariable(矩阵变量)/boss/bossid/empid</a>//springboot默认禁用了矩阵变量功能//手动配置:原理:对于路径处理,都是用UrlPathHelper进行解析,removeSemicolonContent(翻译:移除翻译内容)支持矩阵变量@GetMapping("/cars/{Path}")//这个地方要写Path而不是具体的路径public Map carsSell(@MatrixVariable("low") Integer low,@MatrixVariable("brand") List<String> brand){Map<String,Object> map = new HashMap<>();map.put("low",low);map.put("brand",brand);return map;}手动配置矩阵变量:增加配置类
@Configuration(proxyBeanMethods = false)public class WebConfig implements WebMvcConfigurer {@Beanpublic WebMvcConfigurer webMvcConfigurer(){return new WebMvcConfigurer() {public void configurePathMatch(PathMatchConfigurer configurer){UrlPathHelper urlPathHelper = new UrlPathHelper();urlPathHelper.setRemoveSemicolonContent(false);//设置为不移除分号后面的内容configurer.setUrlPathHelper(urlPathHelper);}};}视图解析与模板引擎? springboot默认不支持 jsp,需要进入第三方模板引擎技术
Thymeleaf不建议使用在高并发的环境下,建议前后端分离
springboot注解有哪些 持续更新 Springboot学习笔记pom.xml 整合Thymeleaf 需要的starter
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>使用Thymeleaf需要在HTML页面中加上这一句
<html lang="en" xmlns:th="http://www.thymeleaf.org"><!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head><meta charset="UTF-8"><title>Title</title></head><body><h1 th:text="${msg}">哈哈</h1><!--msg没有内容的话还是显示哈哈有内容就显示内容的值--><h2><a th:href="https://tazarkount.com/read/${link}">去百度$</a></h2><!--地址直接指向link的值--><h2><a th:href="https://tazarkount.com/read/@{link}">去百度@</a></h2><!--地址直接指向的绝对路径的地址--></body></html>@GetMapping("/hhh")public String hhh(Model model){//model中的数据会被自动放在请求域中 相当于request.setAttribute(“xx”,xx)model.addAttribute("msg","你好 hhh");model.addAttribute("link","http://www.baidu.com");return "success";}在行内获取后台参数的写法:[[${session.loginUser.name}]]获取公共页面(相当于以前的 jsp:incude)<!-- 公共页面common.html --><head th:fragment="commonheader" id="commonheader"><!-- th:fragment="commonheader" 就是该标签的名字 --><!--common--><link href="https://tazarkount.com/read/css/style.css" th:href="https://tazarkount.com/read/@{/css/style.css}" rel="stylesheet"><link href="https://tazarkount.com/read/css/style-responsive.css" th:href="https://tazarkount.com/read/@{/css/style-responsive.css}" rel="stylesheet"></head><!-- 引用公共页面时 --><link th:replace="~{common :: commonheader}"> <!-- common就是引用页面的名字,commonheader就是引用标签的名字 --><link th:replace="~{common :: #commonheader}"> <!-- 如果是引用id就在id名前加上#号 --><!--有replace、include、insert三个th标签replace:替换现有标签,直接引用引用的标签include(不建议使用):仅仅将引用标签中的内容增加进来insert:保留现有标签,在其中插入引用的标签-->数据遍历:使用 th:each 获取后台的数据<tr class="gradeX" th:each="user:${users}"><td>Trident</td><td th:text="${user.userName}">Internet Explorer 4.0</td><td th:text="${user.passWord}">[[${user.password}]]</td></tr>@GetMapping("/dynamic_table")public String dynimic_table(Model model){//表格内容遍历List<User> users = Arrays.asList(new User("zhangsan","123456"),new User("lisi","123444"),new User("haha","aaaaa"));model.addAttribute("users",users);return "table/dynamic_table";}拦截器HandlerInterceptor/** * 登陆检查(拦截器) * 1、配置好拦截器要拦截哪些请求 * 2、把这些配置放在容器中 */public class LoginInterceptor implements HandlerInterceptor {/*** 目标方法执行之前* @param request* @param response* @param handler* @return* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//登录检查逻辑HttpSession session = request.getSession();Object loginUser = session.getAttribute("loginUser");if (loginUser != null){//return true就是放行return true;}//拦截住,未登录,跳转到登录页面session.setAttribute("msg","请先登录");response.sendRedirect("/");//false就是拦截return false;}/*** 目标方法执行完成以后* @param request* @param response* @param handler* @param modelAndView* @throws Exception*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}/***页面渲染以后* @param request* @param response* @param handler* @param ex* @throws Exception*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}}/** * 开发web项目配置的时候都要实现WebMvcConfigurer接口 * 1、编写一个拦截器 实现 HanderInterceptor 接口 * 2、拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors) * 3、指定拦截规则(如果拦截所有静态资源也会被拦截) */@Configurationpublic class AdminWebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor())//添加自己配置的拦截器.addPathPatterns("/**")//拦截哪些请求(静态资源也会被拦截).excludePathPatterns("/","/login","/css/**","/font/**","/images/**","/js/**");//放行哪些请求}}文件上传? 文件上传表单格式:
<form role="form" th:action="@{upload}" method="post" enctype="multipart/form-data">后台将文件存储进服务器中
/** * 文件上传 * MultipartFile 自动封装上传过来的文件 * @param email * @param username * @param headerImg * @param photos * @return */@PostMapping("/upload")public String upload(@RequestParam("email") String email,@RequestParam("username") String username,@RequestPart("headerImg") MultipartFile headerImg,@RequestPart("photos") MultipartFile[] photos) throws IOException {log.info("上传的信息:email={},username={},headerImg={},photos={}", email,username,headerImg.getSize(),photos.length);if(!headerImg.isEmpty()){//保存到文件服务器,OSS服务器String originalFilename = headerImg.getOriginalFilename();//获取文件原始名headerImg.transferTo(new File("D:\\Test\\"+originalFilename));//将文件保存在相应的}//处理多个文件if (photos.length > 0){for (MultipartFile photo : photos){if (!photo.isEmpty()){String originalFilename = photo.getOriginalFilename();//获取文件原始名photo.transferTo(new File("D:\\Test\\" + originalFilename));}}}return "main";}#设置单个文件上传最大大小spring.servlet.multipart.max-file-size=10MB#设置所有文件上传最大大小spring.servlet.multipart.max-request-size=100MB异常处理机制、默认规则
1、默认情况下,SpringBoot提供 /error 处理所有错误的映射
2、对于机器客户端,它将生成JSON相应,其中包含错误,HTTP状态和异常信息的详细消息,对于浏览器客户端,相应一个“whitelable”的错误视图,以HTML格式呈现相同的数据
3、要对其进行自定义,添加 View 解析为 error
4、要完全替换默认行为,可以实现ErrorController 并注册该类型的Bean定义,或添加 ErrorAttributes 类型的组件已使用现有机制替换其内容
定制错误处理逻辑
自定义错误页
? error / 404.htmlerror / 5xx.html
springboot注解有哪些 持续更新 Springboot学习笔记
@ControllerAdvice + @ExceptionHandler 处理异常
实现 HandlerExceptionResolver 处理异常
Web 原生组件注入:Servlet、Filter、ListenerServlet使用API
/** * 原生Servlet */@WebServlet(urlPatterns = "/my")//设置请求地址public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("666666");}}? 但必须在springboot的启动类上面设置 ServletComponentScan 注解
@ServletComponentScan(basePackages = "com.springdemo.admin")//设置原生servlet的扫描包@SpringBootApplicationpublic class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}Filter使用API
@Slf4j@WebFilter(urlPatterns = {"/css/*","/images/*"})//设置拦截页面路径public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {log.info("myfilter初始化完成");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("myfilter工作");}@Overridepublic void destroy() {log.info("myfiter销毁");}}Listener使用API
/** * 监听器 */@Slf4j@WebListenerpublic class MyServletContextListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {log.info("MyServletContextListener监听到项目初始化完成");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {log.info("MyServletContextListener监听到项目销毁");}}使用 RegistrationBean 的方式将上面配置的各种类全部注入到容器中的方式
@Configuration(proxyBeanMethods = true)//proxyBeanMethods作用是当容器中有这个组件后就不再new,避免组件过多public class MyRegistConfig {@Beanpublic ServletRegistrationBean myServlet(){MyServlet myServlet = new MyServlet();//自己写的servletreturn new ServletRegistrationBean(myServlet,"/my","/my2");}@Beanpublic FilterRegistrationBean myFilter(){MyFilter myFilter = new MyFilter();//自己写的拦截器//return new FilterRegistrationBean(myFilter,myServlet());//拦截myServlet设置的路径FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(myFilter);filterRegistrationBean.setUrlPatterns(Arrays.asList("/my","/css/*"));//单独设置拦截路径return filterRegistrationBean;}@Beanpublic ServletListenerRegistrationBean myListener(){MyServletContextListener myServletContextListener = new MyServletContextListener();//自己写的监听器return new ServletListenerRegistrationBean(myServletContextListener);}}定制化原理1、定制化的常见方式
? @Bean 替换、增加容器中默认组件;视图解析器
? 修改配置文档
? xxxxxCustomizer
? 编写自己的配置类 xxxConfiguration
? web应用 实现 WebMvcConfigurer 即可定制化 web 功能
? @EnableWebMvc + WebMvcConfigurer ——@Bean 可以全面接管SpringMVC 所有规则全部自己重新配置,实现定制和扩展功能
数据访问JDBC依赖导入
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency>官方没有导入驱动,因为不知到需要用上面数据库
以下为导入mysql驱动的依赖:
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.22</version><!-- 版本写或不写没有要求,因为官方已经有默认版本 --></dependency>在yaml文件中配置
spring:datasource:url: jdbc:mysql://localhost:3306/testusername: rootpassword: 123456#type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.jdbc.Driver@Testvoid contextLoads() {Long aLong = jdbcTemplate.queryForObject("select count(*) from userinfo",Long.class);//jdbcTemplate.queryForList("select * from userinfo");log.info("数据库查询{}",aLong);}Druid 数据源(监控)引入数据源<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.17</version></dependency>配置类中将Druid引入
@Configurationpublic class MyDatasourceConfig {//默认的自动配置是判断容器中没有才会配@ConfigurationProperties("spring.datasource")//将组件跟配置文件进行绑定@Bean/***设置数据源**/public DataSource dataSource(){DruidDataSource druidDataSource = new DruidDataSource();//druidDataSource.setUrl();//druidDataSource.setUsername();//druidDataSource.setPassword();//直接用上面 @ConfigurationProperties("spring.datasource")替代//加入监控功能和防火墙功能druidDataSource.setFilters("stat,wall");return druidDataSource;}}配置监控页 输入 localhost:8080/druid 可查看数据库访问情况
/*** 配置Druid的监控页功能* @return*/@Beanpublic ServletRegistrationBean statViewServlet(){StatViewServlet statViewServlet = new StatViewServlet();ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<StatViewServlet>(statViewServlet,"/druid/*");//配置进入监控页地址//配置进入监控也账号密码,不配置默认直接进入监控页registrationBean.addInitParameter("loginUsername","admin");registrationBean.addInitParameter("loginPassword","123456");return registrationBean;}/** *WebStatFilter用于采集web-jdbc关联监控的数据 */@Beanpublic FilterRegistrationBean WebStatFilter(){WebStatFilter webStatFilter = new WebStatFilter();FilterRegistrationBean<WebStatFilter> webStatFilterFilterRegistrationBean = new FilterRegistrationBean<>(webStatFilter);webStatFilterFilterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));//设置拦截路径webStatFilterFilterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.png,*.css,*.ico,/druid/*");//设置不拦截路径return webStatFilterFilterRegistrationBean;}用Starter的方式引入@Deprecated//过时注解:若某类或某方法加上该注解之后,表示此方法或类不再建议使用,调用时也会出现删除线,但并不代表不能用,只是说,不推荐使用,因为还有更好//的方法可以调用 。引入官方starter的方式,之前的依赖注入就没用了,需要注释掉
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency>yaml 配置文件 的一些属性
spring:datasource:#这个type是设置druid数据源,没有配置会出现404!!!type: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://localhost:3306/testusername: rootpassword: 123456#type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.jdbc.Driverdruid:#加入监控功能和防火墙功能filters: stat,wall#监控设定包的所有组件aop-patterns: com.springdemo.*#开启druidstat-view-servlet:enabled: true#设置密码账号login-username: adminlogin-password: admin#设置重置按钮是否开启reset-enable: falseweb-stat-filter:enabled: trueurl-pattern: /*exclusions: '*.js,*.gif,*.png,*.css,*.ico,/druid/*'filter:stat:slow-sql-millis: 1000log-slow-sql: trueenabled: truewall:enabled: trueconfig:drop-table-allow: falseMybatis 整合依赖注入:
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency>配置方式:修改配置文件中mybatis开头的所有参数
SqlSessionFactory:自动配置好
SqlSession:自动配置SqlSessionTemplate组合了SqlSession
Mapper:只要我们写的操作MyBatis的接口标注了@Mapper就会被自动扫描进来
*MyBatisX插件【springboot注解有哪些 持续更新 Springboot学习笔记】在mapper接口中自动找到mapper.xml中的位置
Mybatis配置(配置版)#配置mybatis规则mybatis:config-location: classpath:mybatis-config.xml #配置配置文件位置,用于写连接数据库参数,但由于spring自动配置好,所以内容为空mapper-locations: classpath:mybatis/mapper/*.xml #设置mapper扫描位置mybatis-config.xml :
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration></configuration>mapper配置文件
UserMapper.xml :
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.springdemo.admin.mapper.UserMapper"><!-- 与mapper的interface接口对应 --><select id="getUser" resultType="com.springdemo.admin.bean.User">select* from userinfo where username=#{UserName}</select></mapper>UserMapper接口类:与上面的mapper配置文件相对应
@Mapper //需要加上Mapper注解public interface UserMapper {public User getUser(String UserName);}UserService服务层
@Service //需要加上Service注解public class UserService {@AutowiredUserMapper userMapper;public User getUserByname(String name){return userMapper.getUser(name);}}Controller控制器层:
@AutowiredUserService userService;@ResponseBody@GetMapping("/User")public User getByname(@RequestParam("name") String name){User u = userService.getUserByname(name);log.info("数据库查询信息:{}",u.toString());return u;}在mybatis的控制文件中加入这一句开启驼峰识别原则:
? 意思是假如数据类封装的属性名为 userName 而数据库中对应的字段名为 user_name,加上该设置,就可以使其一一对应,避免产生查不出来的情况
<settings><setting name="mapUnderscoreToCamelCase" value="https://tazarkount.com/read/true"/></settings>也不一定要在mybatis-config.xml文件中配置,也可以在项目的yaml文件中配置:(推荐)
? 但是,如果你要在这里配置mybatis的一些参数,就不能加入config-location文件路径配置
mybatis:#config-location: classpath:mybatis/mybatis-config.xml 这个就不写,不能同时存在mapper-locations: classpath:mybatis/mapper/*.xmlconfiguration:map-underscore-to-camel-case: trueMybatis配置(注解配置版)mapper中直接加注解和sql语句,不用于mapper.xml相关联
同时也可以混合配置,也可以于mapper.xml相关联,方法同上
@Mapperpublic interface CityMapper {@Select("select * from city where id=#{id}")public City getById(Long id);}*主键回填? 在插入一串数据或者对数据进行更改后,默认将对一串数据操作的 id 值传入信息类对应的 id 中
<insert id="xxx" useGeneratedKeys="true" keyProperty="id"><!-- useGeneratedKeys="true" keyProperty="id" 设置默认传回的属性 -->sql 语句</insert>? 同样的 也可以通过注解的方式实现上述功能:利用 @Options() 注解:
@Insert("sql语句")@Options(useGeneratedKeys = true,ketProperty = "id")public void insertmeg(Meg meg);*取消Mapper注解如果觉得每个类都要写@Mapper注解很麻烦,可以在springboot的启动类中加上:
@MapperScan("com.springdemo.admin.mapper")//加上这句@ServletComponentScan(basePackages = "com.springdemo.admin")//设置原生servlet的扫描包@SpringBootApplicationpublic class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}