一:第一个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工具进行。