auto string 资源 implement getter ase 自动添加 自己
上篇文章介绍了 spring boot 初级教程:spring boot(一):入门篇,方便大家快速入门、了解实践 Spring boot 特性;本篇文章接着上篇内容继续为大家介绍 spring boot 的其它特性(有些未必是 spring boot 体系桟的功能,但是是 spring 特别推荐的一些开源技术本文也会介绍),对了这里只是一个大概的介绍,特别详细的使用我们会在其它的文章中来展开说明。
spring boot web 开发非常的简单,其中包括常用的 json 输出、filters、property、log 等
在以前的 spring 开发的时候需要我们提供 json 接口的时候需要做那些配置呢
- 1.添加 jackjson 等相关jar包
- 2.配置spring controller扫描[email protected]
就这样我们会经常由于配置错误,导致 406 错误等等,spring boot 如何做呢,只需要类添加
即可,默认类中的方法都会以 json 的格式返回
- @RestController
- @RestController
- public class HelloWorldController {
- @RequestMapping("/getUser")
- public User getUser() {
- User user=new User();
- user.setUserName("小明");
- user.setPassWord("xxxx");
- return user;
- }
- }
如果我们需要使用页面开发只要使用
,下面会结合模板来说明
- @Controller
我们常常在项目中会使用 filters 用于录调用日志、排除有 XSS 威胁的字符、执行权限验证等等。Spring Boot 自动添加了 OrderedCharacterEncodingFilter 和 HiddenHttpMethodFilter,并且我们可以自定义 Filter。
两个步骤:
- 1.实现Filter接口,实现Filter方法[email protected]注解,将自定义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 classMyFilterimplements 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 stubHttpServletRequest request = (HttpServletRequest) srequest;
- System.out.println("this is MyFilter,url :"+request.getRequestURI());
- filterChain.doFilter(srequest, sresponse);
- }
- @Override
- public voidinit(FilterConfig arg0)throws ServletException {
- // TODO Auto-generated method stub
- }
- }
- }
在 web 开发的过程中,我经常需要自定义一些配置文件,如何使用呢
- com.neo.title=山河永慕
- com.neo.description=分享生活和技术
自定义配置类
- @Component
- public class NeoProperties {
- @Value("${com.neo.title}")
- private String title;
- @Value("${com.neo.description}")
- private String description;
- //省略getter settet方法
- }
配置输出的地址和输出级别
- logging.path=/user/local/log
- logging.level.com.favorites=DEBUG
- logging.level.org.springframework.web=INFO
- logging.level.org.hibernate=ERROR
path 为本机的 log 地址,
后面可以根据包路径配置不同资源的 log 级别
- logging.level
在这里我重点讲述 MySQL、spring data jpa 的使用,其中 mysql 就不用说了大家很熟悉,jpa 是利用 hibernate 生成各种自动化的 sql,如果只是简单的增删改查,基本上不用手写了,spring 内部已经帮大家封装实现了。
下面简单介绍一下如何在 spring boot 中使用
- <dependency>
- <groupId>
- org.springframework.boot
- </groupId>
- <artifactId>
- spring-boot-starter-data-jpa
- </artifactId>
- </dependency>
- <dependency>
- <groupId>
- mysql
- </groupId>
- <artifactId>
- mysql-connector-java
- </artifactId>
- </dependency>
- spring.datasource.url=jdbc:mysql://localhost:3306/test
- spring.datasource.username=root
- spring.datasource.password=root
- spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- spring.jpa.properties.hibernate.hbm2ddl.auto=update
- spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
- spring.jpa.show-sql= true
其实这个 hibernate.hbm2ddl.auto 参数的作用主要用于:自动创建 | 更新 | 验证数据库表结构, 有四个值:
- 1.0create: 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
- 2.0create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
- 3.0update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。
- 4.0validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
主要是指定生成表名的存储引擎为 InneoDB
- dialect
是否打印出自动生产的 SQL,方便调试的时候查看
- show-sql
- @Entity
- public classUserimplements Serializable {
- private static final longserialVersionUID = 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;
- //省略getter settet方法、构造方法
- }
dao 只要继承 JpaRepository 类就可以,几乎可以不用写方法,还有一个特别有尿性的功能非常赞,就是可以根据方法名来自动的生产 SQL,比如
会自动生产一个以
- findByUserName
为参数的查询方法,比如
- userName
自动会查询表里面的所有数据,比如自动分页等等。。
- findAlll
[email protected] 注解,不加注解也会映射成列
- public interfaceUserRepositoryextendsJpaRepository {
- User findByUserName(String userName);
- User findByUserNameOrEmail(String username, String email);
- @RunWith(SpringJUnit4ClassRunner.class)
- @SpringApplicationConfiguration(Application.class)
- public class UserRepositoryTests {
- @Autowired
- private UserRepository userRepository;
- @Test
- public voidtest()throws Exception {
- Date date =new Date();
- DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
- String formattedDate = dateFormat.format(date);
- userRepository.save(newUser("aa1", "[email protected]", "aa", "aa123456",formattedDate));
- userRepository.save(newUser("bb2", "[email protected]", "bb", "bb123456",formattedDate));
- userRepository.save(newUser("cc3", "[email protected]", "cc", "cc123456",formattedDate));
- Assert.assertEquals(9, userRepository.findAll().size());
- Assert.assertEquals("bb", userRepository.findByUserNameOrEmail("bb", "[email protected]").getNickName());
- userRepository.delete(userRepository.findByUserName("aa1"));
- }
- }
当让 spring data jpa 还有很多功能,比如封装好的分页,可以自己定义 SQL,主从分离等等,这里就不详细讲了
Spring boot 推荐使用来代替 jsp,thymeleaf 模板到底是什么来头呢,让 spring 大哥来推荐,下面我们来聊聊
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:<p>$message</p>
- FreeMarker: <p>${message}</p>
- Thymeleaf: <p th:text="${message}">Hello World!</p>
* 注意,由于 Thymeleaf 使用了 XML DOM 解析器,因此它并不适合于处理大规模的 XML 文件。*
URL 在 Web 应用模板中占据着十分重要的地位,需要特别注意的是 Thymeleaf 对于 URL 的处理是通过语法 @{…} 来处理的。Thymeleaf 支持绝对路径 URL:
- <a th:href="@{http://www.thymeleaf.org}">
- Thymeleaf
- </a>
- <a th:href="@{/login}" th:unless=${session.user !=n ull}>
- Login
- </a>
- <tr th:each="prod : ${prods}">
- <td th:text="${prod.name}">
- Onions
- </td>
- <td th:text="${prod.price}">
- 2.41
- </td>
- <td th:text="${prod.inStock}? #{true} : #{false}">
- yes
- </td>
- </tr>
就列出这几个吧
在 Web 开发过程中一个绕不开的话题就是前端工程师与后端工程师的写作,在传统 Java Web 开发过程中,前端工程师和后端工程师一样,也需要安装一套完整的开发环境,然后各类 Java IDE 中修改模板、静态资源文件,启动 / 重启 / 重新加载应用服务器,刷新页面查看最终效果。
但实际上前端工程师的职责更多应该关注于页面本身而非后端,使用 JSP,Velocity 等传统的 Java 模板引擎很难做到这一点,因为它们必须在应用服务器中渲染完成后才能在浏览器中看到结果,而 Thymeleaf 从根本上颠覆了这一过程,通过属性进行模板渲染不会引入任何新的浏览器不能识别的标签,例如 JSP 中的,不会在 Tag 内部写表达式。整个页面直接作为 HTML 文件用浏览器打开,几乎就可以看到最终的效果,这大大解放了前端工程师的生产力,它们的最终交付物就是纯的 HTML/CSS/JavaScript 文件。
spring 项目建议使用 Gradle 进行构建项目,相比 maven 来讲 Gradle 更简洁,而且 gradle 更时候大型复杂项目的构建。gradle 吸收了 maven 和 ant 的特点而来,不过目前 maven 仍然是 Java 界的主流,大家可以先了解了解。
一个使用 gradle 配置的项目
- buildscript {
- repositories {
- maven { url "http://repo.spring.io/libs-snapshot" }
- mavenLocal()
- }
- dependencies {
- classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.6.RELEASE")
- }
- }
- apply plugin: 'java'//添加 Java 插件, 表明这是一个 Java 项目apply plugin: 'spring-boot'//添加 Spring-boot支持apply plugin: 'war'//添加 War 插件, 可以导出 War 包apply plugin: 'eclipse'//添加 Eclipse 插件, 添加 Eclipse IDE 支持, Intellij Idea 为 "idea"
- war {
- baseName = 'favorites'
- version = '0.1.0'
- }
- sourceCompatibility = 1.7//最低兼容版本 JDK1.7targetCompatibility = 1.7//目标兼容版本 JDK1.7
- repositories { // Maven 仓库mavenLocal()//使用本地仓库mavenCentral()//使用中央仓库maven { url "http://repo.spring.io/libs-snapshot" }//使用远程仓库
- }
- dependencies { // 各种 依赖的jar包compile("org.springframework.boot:spring-boot-starter-web:1.3.6.RELEASE")
- compile("org.springframework.boot:spring-boot-starter-thymeleaf:1.3.6.RELEASE")
- compile("org.springframework.boot:spring-boot-starter-data-jpa:1.3.6.RELEASE")
- compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.6'
- compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.4'
- compile("org.springframework.boot:spring-boot-devtools:1.3.6.RELEASE")
- compile("org.springframework.boot:spring-boot-starter-test:1.3.6.RELEASE")
- compile 'org.webjars.bower:bootstrap:3.3.6'
- compile 'org.webjars.bower:jquery:2.2.4'
- compile("org.webjars:vue:1.0.24")
- compile 'org.webjars.bower:vue-resource:0.7.0'
- }
- bootRun {
- addResources =true
- }
WebJars 是一个很神奇的东西,可以让大家以 jar 包的形式来使用前端的各种框架、组件。
什么是 WebJars?WebJars 是将客户端(浏览器)资源(JavaScript,Css 等)打成 jar 包文件,以对资源进行统一依赖管理。WebJars 的 jar 包部署在 Maven 中央仓库上。
我们在开发 Java web 项目的时候会使用像 Maven,Gradle 等构建工具以实现对 jar 包版本依赖管理,以及项目的自动化管理,但是对于 JavaScript,Css 等前端资源包,我们只能采用拷贝到 webapp 下的方式,这样做就无法对这些资源进行依赖管理。那么 WebJars 就提供给我们这些前端资源的 jar 包形势,我们就可以进行依赖管理。
1、 WebJars 主官网 查找对于的组件,比如 vuejs
- <dependency>
- <groupId>
- org.webjars.bower
- </groupId>
- <artifactId>
- vue
- </artifactId>
- <version>
- 1.0.21
- </version>
- </dependency>
2、页面引入
- <link th:href="@{/webjars/bootstrap/3.3.6/dist/css/bootstrap.css}" rel="stylesheet">
- </link>
就可以正常使用了!
本文所有讲的代码示例都在这里
新一代 Java 模板引擎 Thymeleaf
Spring Boot 参考指南 - 中文版
转自 http://blog.csdn.net/ityouknow/article/details/70053206
springboot(二):web 综合开发
来源: http://www.bubuko.com/infodetail-2072320.html