一:第一个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;
-
- @GetMapping(value = "get/{id}")
- public user findById(@PathVariable("id") int id) {
- return userService.findById(id);
- }
- }
这个url的写法是RESTful编程,可自行百度RESTful
这里问题三:查询返回的结果无法转化为json格式
异常信息如下:
原因:hibernate会给每个被管理的对象加上hibernateLazyInitializer属性,hibernate会给被管理的pojo加入一个hibernateLazyInitializer属性,jsonplugin通过java的反射机制将pojo转换成json,会把hibernateLazyInitializer也拿出来操作,但是hibernateLazyInitializer无法由反射得到。
解决方法:让其生成json对象的时候,忽略hibernateLazyInitializer属性
在实例类上加上
- @Entity
- @JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})
- public class user {
- 。。。
- }