SpringBoot(一)第一个项目

一:第一个SpringBoot项目

一:创建一个SpringBoot项目

选择web组件

这里有问题一:SpringBoot项目构建过慢

解决办法:在Maven根目录下的setting.xml添加阿里云镜像,过程自行百度

二:创建Controller并访问

创建好的目录如下:

在com.example.demo包下面创建一个controller包,再创建一个helloController类

这里有问题二:*Application.java为SpringBoot的启动类,仅会扫描其所在的当前目录及其目录。

@RestController
public class helloController {
	@RequestMapping(value="/hello",method=RequestMethod.GET)
	public String hello() {
		return "Hello!!";
	}
}

@RestController = @Controller + @ResponseBody    注册controller,返回数据为json格式。

 

所用的工具为Postman,有Google浏览器就可以用。

访问 localhost:8080/hello,就成功了。

二:读取配置文件

Spring Boot的配置文件有两种后缀 *.properties或者*.yml,两种区别,自行鉴别。

写了controller来读取名字的属性

一:属性注入

@RestController
public class animalController {
	@Value("${cat.name}")
	private String catName;

	@Value("${dog.name}")
	private String dogName;
	
	@RequestMapping(value="")
	public String animal() {
		System.out.println(catName+"---"+dogName);
		return "OK!!";
	}
}

@Value 注解  将${xxx}大括号中的对应的值注入注释的属性上

二:对象注入

写个cat对象

@Component
@ConfigurationProperties(prefix="cat")
public class cat {
	private String name;
	private int age;
}

@Component    将cat注入容器

@ConfigurationProperties     将同类的配置信息封装成实体类

@Autowired  自动装配 

@RestController
        public class animalController {

	@Autowired
	private cat cat;
		
	@RequestMapping(value="")
	public String animal() {
		System.out.println(cat);
		return "OK!!";
	}
}

访问localhost:8080/,就可以了

三:利用Spring-data-JPA进行curd

JPA(Java Persistence API)是Sun官方提出的Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具 来管理Java应用中的关系数据。

简而言之,JPA就是一种规范,工具。

一:添加依赖

pom.xml中添加

<!-- jpa依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>

		<!-- mysql依赖 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

、二:创建一个对象

@Entity
public class user {
	@Id
	@GeneratedValue
	private int id;
	private String name;
	private int age;
}

@Entity     数据库中对应的实体类

@Id          主键

@GeneratedValue    自增长

配置数据库参数

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot
    username: root
    password: xxxx
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

ddl-auto : 自动建表  有相对应的表则访问,没有则创建 

运行,启动Spring Boot,发现数据库中对一张表

三:过程

创建一个 repository包和service包,并创建userRepository类,userService类

userRepository类

public interface userRepository extends JpaRepository<user, Integer>{
                                              //对应的实体对象  主键的类型
}

userService类

@Service
public class userService {
	@Autowired
	private userRepository userRepository;

	// 查询全部
	public List<user> findAll() {
		return userRepository.findAll();
	}

	// 根据id查询
	public user findById(int id) {
		return userRepository.getOne(id);
	}

	// 添加用户
	public user save(user u) {
		u.setId(0);
		return userRepository.save(u);
	}

	// 删除
	public void delete(int id) {
		userRepository.delete(userRepository.getOne(id));
	}

	// 修改用户
	public user update(user u ) {
		return userRepository.save(u);
	}
}

userController

@RestController
public class userController {
	@Autowired
	private userService userService;
	//根据id查询
	@GetMapping(value = "/get/{id}")
	public user findById(@PathVariable("id") int id) {
		return userService.findById(id);
	}
	//查询全部
	@GetMapping(value="/user")
	public List<user> getAll(){
		return userService.findAll();
	}
	//保存用户
	@PostMapping(value="/save")
	public user save(user user ) {
		return userService.save(user);
	}
	//删除用户
	@GetMapping(value="/del/{id}")
	public String del(@PathVariable("id")int id) {
		System.out.println(id);
		userService.delete(id);
		return "ok!!";
	}
	//修改用户
	@PostMapping(value="/update")
	public user update(user user) {
		return userService.update(user);
	}
}

 

这里问题三:查询返回的结果无法转化为json格式

异常信息如下:

原因:hibernate会给每个被管理的对象加上hibernateLazyInitializer属性,hibernate会给被管理的pojo加入一个hibernateLazyInitializer属性,jsonplugin通过java的反射机制将pojo转换成json,会把hibernateLazyInitializer也拿出来操作,但是hibernateLazyInitializer无法由反射得到。

解决方法:让其生成json对象的时候,忽略hibernateLazyInitializer属性

在实例类上加上

@Entity
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})
public class user {
     。。。
}

最后,测试统一采用Postman工具进行。