springboot(二)web综合开发

Web开发

springboot web开发非常的简单, 其中包括常用的json输出、filters 、property、log等



JSON接口开发

在以前的spring开发的时候需要我们提供json接口的时候需要做哪些配置呢

  • –1. 添加jackjson 等相关jar包
  • –2. 配置spring controller扫描
  • –3. 对接的方法添加@ResponseBody
    就这样我们经常有配置错误,导致406错误等等, spring boot 如何做呢, 只需要添加@RestController即可, 默认类中的方法都以json的格式返回
@RestController
public class HelloWorldController {
    @RequestMapping("/getUser")
    public User getUser() {
    	User user=new User();
    	user.setUserName("小明");
    	user.setPassWord("xxxx");
        return user;
    }
}
  • 如果我们需要使用页面开发只要使用@Controller



自定义Filter

我们常常在项目中会使用filters用于调用日志、排除有XSS威胁的字符, 执行权限验证等等, Spring boot 自动添加了OorderedCharacterEncodingFilter和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
		}
    }
}


自定义Property

在web开发的过程中, 我们经常需要自定义一些配置文件,如何使用

  • –配置在application.properties
com.neo.title=felix
com.neo.description=boy
  • –自定义配置类
@Component
public class NeoProperties {
	@Value("${com.neo.title}")
	private String title;
	@Value("${com.neo.description}")
	private String description;

	//省略getter settet方法
	}


Log配置

配置输出的地址和输出级别

logging.path=/user/local/log   //本机的log地址
logging.level.com.favorites=DEBUG
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR


数据库操作

在这里我们重点研究mysql、spring data jpa的使用, 其中mysql就不用说了, 大家很熟悉, jpa是利用了Hibernate生成各种自动化的sql, 如果只是简单的增删改查, 基本上不用手写了, spring内部已经帮大家封装了

下面简单介绍一下如何在spring boot中使用:

–1 添加相关的jar包
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
     <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
–2 添加配置文件
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参数的主要作用用于 : 自动创建|更新|验证数据库表结构,有四个值:

  • create : 每次加载hibernate时,都会删除上一次生成的表, 然后根据你的model类再重新生成新表, 哪怕两次没有任何该表也要这样执行, 这就是导致数据库表数据丢失的一个重要原因
  • create-drop : 每次加载hibernate时根据model类生成表, 但是sessionFactory一关闭, 表就自动删除,
  • update : 最常用的属性, 第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库), 以后加载hibernate时根据model类自动更新表接口, 即使表结构改变了但是表中的行仍然存在不会删除以前的行, 要注意的时候当部署到服务器之后, 表结构是不会被马上建立起来的, 要等应用第一次运行起来之后才会
  • validate : 每次加载hibernate时, 验证创建数据库表结构, 只会和数据库中的表进行比较, 不会创建新表, 但是会插入新值.

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

–3 添加实体类和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;
	//省略getter settet方法、构造方法
}

dao只要集成JpqRepository类就可以, 几乎可以不用写方法, 还有一个特别好的功能, 就是可以根据方法名来自动的生产sql 比如 findByUserName 会自动生产一个userName 为参数的查询方法, 比如findAll 自动会查询表里面的所有数据, 比如自动分页等

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

public interface UserRepository extends JpaRepository<User, Long> {
    User findByUserName(String userName);
    User findByUserNameOrEmail(String username, String email);
    }
–4 测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
public class UserRepositoryTests {

	@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 jpq还有很多功能, 比如封装好的分页, 可以自己定义SQL,主从分离等,后续逐步介绍.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值