【实习日记】Spring MVC的数据库操作,与易信IM对接


一、Spring MVC的数据库操作

这篇博文写的很好,例子很经典:

http://blog.netgloo.com/2014/10/27/using-mysql-in-spring-boot-via-spring-data-jpa-and-hibernate/

简单来说,对于一个形如

==========

int | varchar

id  | name

==========

这样的数据表单,我们先构建一个对应的Model类

@Entity //标定该类是一个Model类
@Table(name = "user") //标定该类在数据库中对应的表单名字为user
Class User{
    @Id //自动生成的id主键
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @NotNull //name字段非空
    String name;

    Public User(){}


    //Getter and Setter methods
}

需要说明的是,该Model类是一个Bean。所以必须有默认的构造函数(即使它什么也不做),也必须要有相应所有private变量的setter和getter函数,这个可以在eclipse的source->Generate getters and setters 中自动生成。

然后是构建该数据表单的操作接口。

注意,我们在这里应用了Hibernate的DAO操作。避免了JDBC直接输入SQL字符串。

这样做有两个好处,

一是在更高的层级上进行数据库操作,表单直接对应一个Model类,表单中的一行直接对应一个Model类的实例。

二是更加面向对象,让我们把经历放在业务逻辑而不是书写SQL语句上,同时也避免了数据库被注入的危险。

我们构建一个UserDao操作接口,该接口继承了CrudRepository

package demo.interfaces;

import javax.transaction.Transactional;

import org.springframework.data.repository.CrudRepository;

import demo.model.User;

@Transactional
public interface UserDao extends CrudRepository<User, Long> {
	
	public User findById(int id);

}

Java语言的一大特性是反射,这让Java可以在类装载时动态地调用类的成员函数。比如这里我们没有写任何关于数据库操作接口的实现代码,但Java在装载时可以解决自动接口的依赖问题,动态地找到相应的实现类。

以下是一个简单的UserController,来映射一个HTTP请求到相应的处理函数中。

package demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import demo.interfaces.UserDao;
import demo.model.User;

@RestController
public class UserController {
    @Autowired
	private UserDao userDao;	  

	
		@RequestMapping("/create")
		public String create(@RequestParam(value = "name", defaultValue = "my") String name){
			try{
				User u = new User(name);
				userDao.save(u);
			}
			catch (Exception e){
				return "Error creating the user: " + e.toString();
			}
			return "User succesfully created!";
		}
		
}

请注意那个@Autowired注释。它解决了userDao变量的注入依赖问题。

Spring会自动扫描位于@SpringBootApplication或@EnableAutoConfiguration文件(通常是spring入口文件,即main函数所在文件)所在包即其包下面的bean类。所以,为了使你写的类可以被自动装载,无论它是Controller,View还是Model,请都把他们放在入口文件的下层。

Untitled

上图中DemoApplication.java是我的入口类。所有的controller和model都放在该类的下层包中。

在新建package时,可以输入demo.controller即在demo包的下层新建了一个controller包。eclipse中用逗点”.”表示文件层级。

 

二、Spring作为客户端发起HTTPS请求

实习的项目需要链接网易云信的IM服务器进行消息推送服务。

http://netease.im/

但是云信IM SERVER端的接口只支持HTTPS连接。

这篇博客讲了如何用resttemplate发起HTTP请求并自定义header和postparameters

http://forum.spring.io/forum/spring-projects/web-services/90314-how-to-use-resttemplate-post-value-object-with-customized-headers

但SSL即HTTPS请求,还需要我们手动在JRE库中导入我们想要链接的服务器的证书。

首先用浏览器通过HTTPS访问服务器,点击地址栏左侧的小锁头->connection->certificate information->detail->copy to file拷贝证书到本地。

Untitled

然后在JAVA JRE/lib/security目录下敲击

keytool -import -alias cacerts -keystore cacerts -file your/path/to/certificatefile.cer -trustcacerts

要求输入密码,默认密码为changeit

 

参考文档:

http://www.blogjava.net/wangxinsh55/archive/2011/07/21/354785.html

http://blog.csdn.net/z69183787/article/details/17580371

Leave a comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.