标签:cto from find index start form 不能 bsp post
maven是一个依赖管理工具,我们利用maven进行构建。创建一个maven项目,在pom.xml里面添加依赖项
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>1.0</groupId> <artifactId>SpringBoot</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
,接着在idea里面import change,或者执行mvn install来下载依赖。
在src根目录创建一个包,然后将项目的代码放进去。(注:App类不能直接放在src根目录,否则将无法正常启动)
package App; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
点击RUN,即可运行。如果是正常启动,控制台会输出

路由是什么?路由即我们浏览器上的地址,我们通过路由与服务器进行信息交互。例如:https://search.bilibili.com/all?keyword=老友记。在这个例子中,我们访问https://search.bilibili.com/all,并且参数是老友记,直观意思是搜索keyword是老友记的视频。也可以这么理解,https://search.bilibili.com/all是一个函数,keyword是参数,通过调用函数来获得对应的结果。
在Spring Boot中,我们需要指定哪一个路由对应哪一个方法。
我们在一个Controller里面通过@RequestMapping注解来匹配路径和对应的方法,以下是代码例子。
@RestController
@RequestMapping("test") public class IndexController { @RequestMapping("index") public String fun() { return "hello Spring boot"; } }
@RestController注解的作用是表示这一个类是一个控制器类,并且返回的对象会自动转换为JSON(如果返回字符串则还是字符串形式)。@RequestMapping作用是匹配路由和方法,当它加在类上的时候,就是给该类的所有路径前加一层,但它加在方法上的时候,表示该路径匹配该方法。在这个例子中访问http://localhost:8080/hello/index,页面即打印hello Spring boot。
进一步,如果我们想要返回JSON对象,怎么办呢?
@RestController注解的类会自动转换对象为JSON的,如果只是用@Controller修饰类,则要在方法前加上@ResponseBody。以下演示如何返回Json对象。
@RequestMapping("person")
public Object testJson()
{
return new Person("Overflow",18);
}
在之前的控制器上加上以上代码,Person是我们自己定义的类。在浏览器上打开即可以看到Json字符串
{"name":null,"age":18}。
如果我们想指定路由的请求方法,我们可以在@RequestMapping指定method,method可以是单个对象,也可以是数组形式。
@RequestMapping( value = "index",method ={RequestMethod.GET,RequestMethod.POST} )
以上例子说明该路由请求可以用GET和POST访问。如果不特别指定,则任何方法都可以访问该路由。
只有单纯的路由是不够的,路由可以附带参数对服务器,那么我们绑定的方法要如何接受这些参数呢?
在Spring Boot里,我们只需要结合注解即可,以下介绍几种例子
@RequestMapping("/person/{name}")
public Object testJson(@PathVariable(name = "name")String name)
get方法路径就是 http:localhost:8080/hello/data?name=Tom
post方法要把参数放在form-data中
@RequestMapping(value = "/data",method={RequestMethod.GET,RequestMethod.POST}) public Object accessData(@RequestParam(name="name") String name) { return name; }
当参数比较多的时候,可以将参数解释为一个对象。注意该类一定要有一个默认的构造方法。
@RequestMapping(value = "/json") public Object accessJsonData(Person person) { return person.getName(); }
事实上以上的接收参数方法都是框架封装HttpServletRequest对象,而我们获得这个对象的方法很简单,只需要在函数的参数列表里面声明就好,Spring框架会为我们的方法注入该对象。
@RequestMapping(value = "/servlet") public Object selvlet(HttpServletRequest request) { return request.getRequestURL(); }
cookie是存储在浏览器端的数据。通常用于保存客户端的状态信息。
Http请求,与普通的程序不一样,他是没有状态的。但是许多应用需要记录用户的状态,例如用户的登录信息等等,这时候就利用session技术来存储。当浏览器与服务器进行交互,服务器会分配一个SessionID给浏览器,浏览器会把这个ID保存在cookie里,然后每一次发送请求的时候都会将这一个sessionID附上,然后服务器就可以获得该ID的相关数据。
Map<String,Map<String,Object>> Session
Session的使用类似于以上的代码说明,一个SessionID对应一个Map来存储数据。
当然在Spring Boot里面,不需要手动地调用sessionID,就能获取对应该ID的HttpSession对象。
@RequestMapping(value = "/sessionAndCookie") public Object sessionAndCookie(HttpSession session, HttpCookie cookie)
数据库的数据是通过字段来存储信息的,如果Java类的属性能够与数据库的字段互相映射,那么我们就可以像操作Java对象一样操作数据库数据,方便的进行增删查改操作。
在原来的pom.xml里面添加以下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
在resource文件夹新建一个application.properties文件,这是一个配置文件
spring.jpa.hibernate.ddl-auto=none spring.datasource.url=jdbc:mysql://localhost:3306/你的数据库名称 spring.datasource.username=username spring.datasource.password=password
spring.jpa.hibernate.ddl-auto的作用,在这里我直接引用文档的解释
Here, spring.jpa.hibernate.ddl-auto can be none, update, create, create-drop, refer to the Hibernate documentation for details.
none This is the default for MySQL, no change to the database structure.
update Hibernate changes the database according to the given Entity structures.
create Creates the database every time, but don’t drop it when close.
create-drop Creates the database then drops it when the SessionFactory closes.
@Entity @Table(name = "user") public class User { @Id public int id; public String username; public String password; public int power; }
注解解释,@Entity注解表示该类是一个与数据库映射的类,@Table表示这个类绑定的是user表,@Id表示id是主键。
这个类是与数据库进行交互用的,我们要继承Spring框架给我们提供的一个接口,CrudRepository<>,在使用的时候Spring框架会为我们自动注入相关的方法,方便我们进行增删查改
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> { <S extends T> S save(S var1); <S extends T> Iterable<S> save(Iterable<S> var1); T findOne(ID var1); boolean exists(ID var1); Iterable<T> findAll(); Iterable<T> findAll(Iterable<ID> var1); long count(); void delete(ID var1); void delete(T var1); void delete(Iterable<? extends T> var1); void deleteAll(); }
解释以上相关的函数
save(S var) 传入对象即可保存在数据库对象,如果我们的对象有指定ID,则会更新相应ID的记录
delete(ID var1) 传入ID即可删除对应ID的记录
以下是我们的UserRepository的例子
public interface UserRepository extends CrudRepository<User,Long> { //1、通过函数名来进行查询 User findByUsername(String username); List<User> findUsersByUsername(String username); //2、通过指定HQL语句进行查询 @Query("select u from User u where u.username= :username and u.password= :password") User findUser(@Param("username") String name,@Param("password") String password); }
查询方式有两种
一种是Spring Data提供的通过一定规范的函数名进行查询
另一种是利用@Query注解,指定HQL,来实现复杂的查询
大家看到这里可能会疑惑,为什么只需要定义方法名,而不需要写具体的方法体呢。这是Spring框架的优势,因为对象都是由Spring来管理,因此只需要给与必要的信息给框架识别,框架就能够构建一个继承你的接口的函数,接着按照Spirng自动载入的方法,将该对象引入类中即可。
@RestController @RequestMapping("user") public class UserController { @Autowired UserRepository userRepository; @RequestMapping("find/{name}") public Object findUser(@PathVariable("name")String name) { return userRepository.findByUsername("hello"); } @RequestMapping("check/{name}/{password}") public Object checkUser(@PathVariable("name") String name,@PathVariable("password") String password) { return userRepository.findUser(name, password); } }
利用@AutoWired即可自动载入我们定义的UserRepository
1、http请求方法:http://www.runoob.com/http/http-methods.html
2、spring boot文档:http://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/
3、spring data jpa文档:http://docs.spring.io/spring-data/jpa/docs/2.0.0.M4/reference/html/#jpa.query-methods
4、spring boot guide:https://spring.io/guides/gs/rest-service/
标签:cto from find index start form 不能 bsp post
原文地址:http://www.cnblogs.com/alisonyu/p/7100699.html