注解开发不方便_SpringBoot(二) :web综合开发

上篇介绍了Spring的简单入门<>,方便大家快速入门,了解springboot的简单开发,下面进一步的展开说明。

1、web开发

springboot的开发非常简单,其中包括常用的json输出,filters,property,log等 只要在类上添加@RestController 这个注解,接口就会以json的方式返回,该注解是spring4.x之后推出的新注解,包括@GetMapping,@PostMapping,@DeleteMapping等一系列的注解,为了简化之前的注解操作。

这个让我尤其记忆深刻,因为一次面试中,一个面试官说这是springboot的注解,这个讨论了许久。springboot在我看来是个容器而已,可以将许多的东西包容进去,像spring相关,tomcat容器,mybatis,jpa等等。

启动时报错 UnregisteringJMX-exposed beans on shutdown 添加如下内置tomcat即可

org.springframework.boot

spring-boot-starter-tomcat

接下来controller的书写方式如下

@RestController

public class HelloWorldController {

@GetMapping("/getUser")

public User getUser(){

return new User("admin","123456");

}

}

如果我们需要使用页面开发,则应该用@Controller注解,下面结合模板说明。

2、自定义Filter

我们常常在项目中会使用filters用于录调用日志、排除有XSS威胁的字符、执行权限验证等等。Spring Boot自动添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,并且我们可以自定义Filter。

操作步骤如下:

  • 1、实现Filter接口,实现Filter方法

  • 2、添加@Configuration注解,将自定义Filter加入过滤链

话不多少,直接上代码

@Configuration

public class WebConfiguration {

@Bean

public RemoteIpFilter remoteIpFilter() {

return new RemoteIpFilter();

}

@Bean

public FilterRegistrationBean testFilterRegistration() {

FilterRegistrationBean registration = new FilterRegistrationBean();

registration.setFilter(new MyFilter());

registration.addUrlPatterns("/*");

registration.addInitParameter("paramName", "paramValue");

registration.setName("MyFilter");

registration.setOrder(1);

return registration;

}

public class MyFilter implements Filter {

@Override

public void destroy() {

// TODO Auto-generated method stub

}

@Override

public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain)

throws IOException, ServletException {

// TODO Auto-generated method stub

HttpServletRequest request = (HttpServletRequest) srequest;

System.out.println("this is MyFilter,url :"+request.getRequestURI());

filterChain.doFilter(srequest, sresponse);

}

@Override

public void init(FilterConfig arg0) throws ServletException {

// TODO Auto-generated method stub

}

}

3、自定义propertiey

配置在application.properties中的

server.port=8888

com.lessons.title=纯洁的微笑

com.lessons.description=分享生活和技术

自定义配置类

@Component

public class LessinsProperty {

@Value("${com.lessons.title}")

private String title;

@Value("${com.lessons.description}")

private String description;

}

4、log配置

配置输出级别

logging.path=/user/local/log

logging.level.com.favorites=DEBUG

logging.level.org.springframework.web=INFO

path为本机的log地址,logging.level 后面可以根据包路径配置不同资源的log级别

5、数据库操作

这里主要讲mysql结合jpa的使用

  • 1、添加相关jar包

org.springframework.boot

spring-boot-starter-data-jpa

mysql

mysql-connector-java

其实这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构,有四个值:

  • 1、create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。

  • 2、create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。

  • 3、update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。

  • 4、validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

  • 5、dialect 主要是指定生成表名的存储引擎为InneoDB show-sql 是否打印出自动生产的SQL,方便调试的时候查看

    6、添加实体和dao

@Entity

public class User implements Serializable {

private static final long serialVersionUID = 1L;

@Id

@GeneratedValue

private Long id;

@Column(nullable = false, unique = true)

private String userName;

@Column(nullable = false)

private String passWord;

@Column(nullable = false, unique = true)

private String email;

@Column(nullable = true, unique = true)

private String nickName;

@Column(nullable = false)

private String regTime;

public User(String userName, String passWord) {

this.userName = userName;

this.passWord = passWord;

}

//省略getter settet方法、构造方法

}

dao只要继承JpaRepository类就可以,几乎可以不用写方法,还有一个特别有尿性的功能非常赞,就是可以根据方法名来自动的生产SQL,比如findByUserName 会自动生产一个以 userName 为参数的查询方法,比如 findAlll 自动会查询表里面的所有数据,比如自动分页等等。。

Entity中不映射成列的字段得加@Transient 注解,不加注解也会映射成列

@Repository

public interface UserRepository extends JpaRepository<User, Long> {

User findByUserName(String userName);

User findByUserNameOrEmail(String username, String email);

}

7、测试

@RunWith(SpringJUnit4ClassRunner.class)

@SpringBootTest

public class UserRepositoryTest {

@Autowired

private UserRepository userRepository;

@Test

public void test() throws Exception {

Date date = new Date();

DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);

String formattedDate = dateFormat.format(date);

userRepository.save(new User("aa1", "aa@126.com", "aa", "aa123456",formattedDate));

userRepository.save(new User("bb2", "bb@126.com", "bb", "bb123456",formattedDate));

userRepository.save(new User("cc3", "cc@126.com", "cc", "cc123456",formattedDate));

Assert.assertEquals(9, userRepository.findAll().size());

Assert.assertEquals("bb", userRepository.findByUserNameOrEmail("bb", "cc@126.com").getNickName());

userRepository.delete(userRepository.findByUserName("aa1"));

}

}

当让 spring data jpa 还有很多功能,比如封装好的分页,可以自己定义SQL,主从分离等等,这里就不详细讲了

8、thymeleaf模板

Spring boot 推荐使用来代替jsp,thymeleaf模板到底是什么来头呢,让spring大哥来推荐,下面我们来聊聊

THYMELEAF介绍

Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎。类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用。

好了,你们说了我们已经习惯使用了什么 velocity,FreMaker,beetle之类的模版,那么到底好在哪里呢?比一比吧 Thymeleaf是与众不同的,因为它使用了自然的模板技术。这意味着Thymeleaf的模板语法并不会破坏文档的结构,模板依旧是有效的XML文档。模板还可以用作工作原型,Thymeleaf会在运行期替换掉静态值。Velocity与FreeMarker则是连续的文本处理器。下面的代码示例分别使用Velocity、FreeMarker与Thymeleaf打印出一条消息:

Velocity: $messagep>

FreeMarker: ${message}p>

Thymeleaf: <p th:text="${message}">Hello World!p>

``

### 9、URL

URL在Web应用模板中占据着十分重要的地位,需要特别注意的是Thymeleaf对于URL的处理是通过语法@{…}来处理的。Thymeleaf支持绝对路径URL:

th:href="@{http://www.thymeleaf.org}">Thymeleaf

条件求值

th:href="@{/login}" th:unless=${session.user != null}>Login

for循环

th:each="prod : ${prods}">

th:text="${prod.name}">Onions

th:text="${prod.price}">2.41

th:text="${prod.inStock}? #{true} : #{false}">yes

就列出这几个吧

9、页面即原型

在Web开发过程中一个绕不开的话题就是前端工程师与后端工程师的写作,在传统Java Web开发过程中,前端工程师和后端工程师一样,也需要安装一套完整的开发环境,然后各类Java IDE中修改模板、静态资源文件,启动/重启/重新加载应用服务器,刷新页面查看最终效果。

但实际上前端工程师的职责更多应该关注于页面本身而非后端,使用JSP,Velocity等传统的Java模板引擎很难做到这一点,因为它们必须在应用服务器中渲染完成后才能在浏览器中看到结果,而Thymeleaf从根本上颠覆了这一过程,通过属性进行模板渲染不会引入任何新的浏览器不能识别的标签,例如JSP中的,不会在Tag内部写表达式。整个页面直接作为HTML文件用浏览器打开,几乎就可以看到最终的效果,这大大解放了前端工程师的生产力,它们的最终交付物就是纯的HTML/CSS/JavaScript文件。

最后代码也会给大家:

https://github.com/liangliang1259/daily-lessons.git

推荐:一起了解下Java多线程基础

上一篇:第一章、MySQL架构及历史

2a632321d01967d4ecc0bf27deab8468.png

点击原文阅读更多

Spring Boot:注解驱动开发综合指南 Spring Boot注解是一种特殊的注释,用于指示Spring Boot框架应该如何配置应用程序。Spring Boot注解可以用于许多不同的方面,包括配置文件、控制器、服务、数据访问、安全性和测试。 阅读详情

相关推荐

Spark Graphx 项目实战(航班飞行网图分析)

航班飞行网图分析一.需要的技能点.任务描述三.数据探索1.下载数据2.数据格式四.航班飞行网图问题分析1.构建航班飞行网图2.统计航班飞行网图中机场与航线的数量3.计算最长的飞行航线4.找出最繁忙的机场5.找出最重要的飞行航线6.找出最便宜的飞行航线五.代码实现 一.需要的技能点 Spark GraphX API Spark GraphX PageRank Spark GraphX Pregel .任务描述 需求概述: 探索航班飞行网图数据 构建航班飞行网图 使用Spark GraphX完成下列任

May_J_Oldhu的博客 1513

SpringBoot使用Filter

Filter 是 JavaEE 中 Servlet 规范的一个组件,位于包javax.servlet 中,它可以在 HTTP 请求到达 Servlet 之前,被一个或多个Filter处理。 1.案例结构 1.1first拦截器 @WebFilter(filterName = "first" , urlPatterns = "/*") @Order(1) public class FirstFilter implements Filter { @Override public void init

ZJH 1万+

如何使用C#自带的GDI+双缓冲类BufferedGraphics实现双缓冲功能

小白摸索着编写一个上位机界面,将遇到的问题及解决方法记录下,以供后来的小白使用哈。这篇文章解决的问题是在绘图时候的闪烁问题。其中网上有些介绍的设置控制方式controlstyle的方法,这个方法我的理解是比较适合于在一个完整的窗口当中绘图。如果要在一个窗口当中的内部容器或者控件内画图的话就不太适合,通常按照前述的方法设置后没有任何效果。对于在窗口内部的绘图的来说,比较有效的方法是在内存当中开辟一块

z20110411的博客 4781

SpringBoot实现过滤器Filter的三种方式

过滤器 Filter 是 Web 三大组件之一,也是项目常用到的工具,本文主要介绍一下 Filter的概念以及常见的使用方式。

何以十七的博客 2万+

SpringBoot中使用Filter(过滤器)

SpringBoot中使用Filter(过滤器)

2202_76007821的博客 3399

springboot(11)过滤器Filter

Spring Boot过滤器可以用于拦截请求并在它们到达目标资源之前执行一些操作。过滤器通常用于修改请求或响应、验证请求参数或头部、记录请求日志等。

个人笔记总结 1938

springboot()web综合开发

上篇文章介绍了Spring boot初级教程:spring boot():入门篇,方便大家快速入门、了解实践Spring boot特性;本篇文章接着上篇内容继续为大家介绍spring boot的其它特性(有些未必是spring boot体系桟的功能,但是是spring特别推荐的一些开源技术本文也会介绍),对了这里只是一个大概的介绍,特别详细的使用我们会在其它的文章中来展开说明。web开发sprin

纯洁的微笑 9913

SpringBoot篇】基于SpringBoot进行Web开发

基于SpringBoot进行Web开发

小吉妙妙屋 2357

SpringBoot-web开发使用的常见注解

DeleteMapping:这个注解是@RequestMapping(method = RequestMethod.DELETE)的缩写形式,用于将HTTP DELETE请求映射到控制器方法上。@RestController:这个注解是@Controller和@ResponseBody的组合注解,用于声明一个控制器,并将控制器的每个方法的返回值直接序列化为JSON或XML响应。以上是一些常见的Spring Boot Web开发使用到的注解,当然还有很多其他的注解可以用来实现更复杂的功能。

csdn20019的博客 2164

SpringBoot()web综合开发

一、SpringBoot()web综合开发 上篇文章介绍了Spring boot初级教程:spring boot():入门篇,方便大家快速入门、了解实践Spring boot特性;本篇文章接着上篇内容继续为大家介绍spring boot的其它特性(有些未必是spring boot体系桟的功能,但是是spring特别推荐的一些开源技术本文也会介绍),对了这里只是一个大概的介绍,特别详细的使用我...

雨雾清影的个人博客 527

SpringBoot——Web开发之常用参数注解使用

文章目录五、SpringBoot——Web开发5.2 常用参数注解使用5.2.1 @PathVariable——获取路径变量5.2.2 @RequestHeader——获取请求头信息5.2.3 @RequestParam——获取指定请求参数5.2.4 @RequestBody——获取请求头[POST请求专用]5.2.5 @RequestAttribute——获取request域中的值5.2.6 @MatrixVariable——矩阵变量 五、SpringBoot——Web开发 5.2 常用参数注解使用 注意

越努力越幸运的博客 668

SpringBoot源码学习之基于注解开发的主要原理

SpringBoot是一个基于注解开发的框架,与Spring相比,我们不需要编写繁琐的XML文件去定义Bean之间的关系才能交给Spring容器处理。往往我们可以用最简单的方式,只需要在Bean对象所在类上标注一个@Component注解SpringBoot运行期间便能扫描到这个类并最终加载到容器中。例如,我们有一个Bean,在SpringBoot和Spring框架中分别需要以下配置。以SpringBoot的方式配置@Component以Spring的方式配置

qq_39108894的博客 1358

SpringBootWeb综合开发

Spring boot初级教程 :SpringBoot入门教学篇①》,方便大家快速入门、了解实践Spring boot特性,本文介绍springBootweb开发 web开发spring boot web开发非常的简单,其中包括常用的json输出、filters、property、log等。json 接口开发 在以前的spring 开发的时候需要我们提供json接口的时候需要...

a7412605567的博客 149

SpringBoot注解以及Web应用开发

SpringBoot注解以及Web应用开发

m0_50744075的博客 416

Springboot注解

是 Spring Boot 框架中的核心部分,它们用于简化配置和执行特定的编程任务。这些注解通常分为几个类别,包括用于 MVC 层的类注解、依赖注入注解Web 开发常用注解、Spring Boot 常用注解、面向切面编程(AOP)注解、测试相关注解以及其他常用注解

Blueis_oss的博客 1449

SpringBoot + MyBatis 注解开发入门实践

通过本篇博客的实践,我们完成了一个简单的 SpringBoot + MyBatis 注解开发的项目。整个过程充分体现了 SpringBoot 简化配置、快速开发的优势,以及 MyBatis 注解开发在数据访问层的便捷性。依赖管理:借助 Maven 高效管理项目依赖。配置简化集中配置数据库和 MyBatis 相关信息。注解驱动:MyBatis 的@Mapper@Select等注解,让 DAO 层开发无需编写 XML 映射文件;Spring 的@Autowired等注解,简化了 Web 层和组件注入的开发

m0_74230209的博客 1488

java开发注解大全

目录 1、最基础注解(spring-context包下的org.springframework.stereotype) 1.1、@Controller @Service @Repository @Configuration @Component 1.2、 @Bean 2、最基础注...

weixin_30752377的博客 1629

SpringBootweb综合开发

一、web开发 spring boot web开发非常的简单,其中包括常用的json输出、filters、property、log等。 (1)json 接口开发 在以前的spring开发的时候需要我们提供json接口的时候需要做的配置。 添加 jackjson 等相关jar包 配置spring controller扫描 对接的方法添加@ResponseBody ...

游王子og的博客 298

SpringBoot项目中常用注解

【代码】SpringBoot项目中常用注解

Yi_An_Jie的博客 1158

汇编语言程序设计第版 (钱晓捷)(课件+实例).rar

汇编语言程序设计第版 (钱晓捷)(课件+实例).rar

上一篇: 谷歌浏览器怎么长截图怎么截_谷歌浏览器长截图怎么截图_chrome谷歌浏览器截长图的步骤-win7之家...
下一篇: native react 可伸缩背景_React躬行记(2)——JSX
陈普照
博客等级 码龄7年 28粉丝 77原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值