一、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,请都把他们放在入口文件的下层。
上图中DemoApplication.java是我的入口类。所有的controller和model都放在该类的下层包中。
在新建package时,可以输入demo.controller即在demo包的下层新建了一个controller包。eclipse中用逗点”.”表示文件层级。
二、Spring作为客户端发起HTTPS请求
实习的项目需要链接网易云信的IM服务器进行消息推送服务。
但是云信IM SERVER端的接口只支持HTTPS连接。
这篇博客讲了如何用resttemplate发起HTTP请求并自定义header和postparameters
但SSL即HTTPS请求,还需要我们手动在JRE库中导入我们想要链接的服务器的证书。
首先用浏览器通过HTTPS访问服务器,点击地址栏左侧的小锁头->connection->certificate information->detail->copy to file拷贝证书到本地。
然后在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