SpringBoot基本操作

SpringBoot Maven项目

创建SpringBoot Maven项目

创建项目

SpringBoot基本操作_第1张图片

SpringBoot基本操作_第2张图片

SpringBoot基本操作_第3张图片

SpringBoot基本操作_第4张图片

修改配置文件(yml文件)

配置SpringBoot默认Tomcat的端口号和项目路径

server:
  port: 8888
  servlet:
    context-path: /girl

将配置文件内容注入Bean中

配置文件中内容

girl:
  cupSize: B
  age: 18

与配置文件对应的Bean

需要@Component 和 @ConfigurationProperties(prefix="")注解

@Component
@ConfigurationProperties(prefix = "girl")
public class GirlProperties {
    private String cupSize;
    private Integer age;

    public String getCupSize() {
        return cupSize;
    }

    public void setCupSize(String cupSize) {
        this.cupSize = cupSize;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

在其他类中使用

//@RestController是@Controller和@ResponseBody的组合注解
@RestController
public class HelloController {
//   通过注解直接使用配置文件属性
//    @Value("${cupSize}")
//    private String cupSize;

//    @Value("${age}")
//    private Integer age;

//    @Value("${context}")
//    private String context;

    @Autowired
    private GirlProperties girl;

    //@GetMapping 和 @PostMapping 都是组合注解
  //@RequestMapping(value="/hello",method = RequestMethod.GET)
    @GetMapping(value = "/hello")
    public String say(){
        return girl.getCupSize();
    }
}

设置使用默认配置文件

spring:
  profiles:
    active: dev

Controller层

类注解

@RestController

@Controller

SpringBoot基本操作_第5张图片

 

方法注解

@RequestMapping

@GetMapping

@PostMapping

@PutMapping

@DeleteMapping

@ResponseBody 表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用

 

@RequestMapping、@ResponseBody、@RequestBody的区别

https://blog.csdn.net/ff906317011/article/details/78552426

 

参数列表注解

@PathVariable("") 获取请求路径(url )中的动态参数

@RequestParam 自动匹配表单key-value

@Valid 自动根据表单提交的key-value匹配对应的bean

 

参数注解

@Autowired

 

Controller实例

@RestController
public class GirlController {

    private final static Logger logger = LoggerFactory.getLogger(GirlController.class);

    @Autowired
    private GirlService girlService;

    @Autowired
    private GirlRepository girlRepository;

    /**
     * @功能:添加
     * @参数:cupSize
     * @参数:age
     * @return: com.whw.domain.Result
     * @时间:2018/7/24 18:37
     */
    @PostMapping(value = "/addGirl")
    public Result addGirl(@Valid Girl girl, BindingResult bindingResult) {
        Result result = new Result();
        if (bindingResult.hasErrors()) {
            return ResultUtil.errror(1,bindingResult.getFieldError().getDefaultMessage());
        }
        girl.setCupSize(girl.getCupSize());
        girl.setAge(girl.getAge());
        return ResultUtil.success(girlRepository.save(girl));
    }
//    public Girl addGirl(@RequestParam("cupSize") String cupSize, @RequestParam("age") Integer age) {
//        Girl girl = new Girl();
//        girl.setAge(age);
//        girl.setCupSize(cupSize);
//        return girlRepository.save(girl);
//    }

    /**
     * @功能:通过id查询
     * @参数:id
     * @return: java.util.Optional
     * @时间:2018/7/25 12:57
     */
    @GetMapping(value = "/selectGirl/{id}")
    public Optional selectGirl(@PathVariable("id") Integer id) {
        return girlRepository.findById(id);

    }

    /**
     * @功能:更新
     * @参数:id
     * @参数:cupSize
     * @参数:age
     * @return: com.whw.enitiy.Girl
     * @时间:2018/7/25 12:58
     */
    @PutMapping(value = "/updateGirl/{id}")
    public Girl updateGirl(@PathVariable("id") Integer id, @RequestParam String cupSize, @RequestParam Integer age) {
        Girl girl = new Girl();
        girl.setId(id);
        girl.setCupSize(cupSize);
        girl.setAge(age);
        return girlRepository.save(girl);
    }

    /**
     * @功能:删除
     * @参数:id
     * @return: void
     * @时间:2018/7/25 12:59
     */
    //public void deleteGirl(@RequestParam(value = "id",required = false,defaultValue = "0")Integer id)
    @DeleteMapping(value = "/deleteGirl/{id}")
    public void deleteGirl(@PathVariable("id") Integer id) {
        girlRepository.deleteById(id);
    }
}

Repository(自定义Jpa)

方法注解

@Query

 

自定义sql实例

public interface GroupesStuRepository extends JpaRepository{
    @Query("select u from User u where u.uName like '%?1%'")
    List queryByUname(String name);

    @Query("select gs from GroupesStu gs join gs.groupes groupes where groupes.gId=?1")
    List queryByGid(Integer gid);

    @Query("select gs from GroupesStu gs join gs.stu user  where user.uId=?1")
    List queryByUid(Integer uid);

    @Query("select gs from GroupesStu gs join gs.stu user join gs.groupes groupes where user.uId=?1 and groupes.gId=?2")
    GroupesStu queryByUGid(Integer uid,Integer gid);
}

 

Service层

文件目录

SpringBoot基本操作_第6张图片

 

类注解

@Service

实例

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private GroupesRepository groupesRepository;

    @Autowired
    private TopicRepository topicRepository;

    @Autowired
    private GroupesStuRepository groupesStuRepository;

    /**
     *@功能:查询用户是否存在--登录
     *@参数:user
     *@return: com.tjrac.exam.domain.User
     *@时间:2018/9/3 10:27
     */
    @Override
    public User logOn(User user){
        User user1 = userRepository.findOne(user.getuId());
        String password = new MD5Util().getMD5(user.getPassword());
        if (password.equals(user1.getPassword())) {
            return user1;
        } else {
            throw new UserException(UserEnums.QUERY_FAILURE);
        }
    }

    /**
     *@功能:新建用户
     *@参数:user
     *@return: com.tjrac.exam.domain.User
     *@时间:2018/9/3 10:27
     */
    @Override
    public User createUser(User user){
        user.setPassword(new MD5Util().getMD5(user.getPassword()));
        User user1 = userRepository.save(user);
        if(user1==null){
            throw new UserException(UserEnums.INSERT_FAILURE);
        }else{
            return user1;
        }
    }

    /**
     *@功能:查询所有用户
     *@参数:
     *@return: java.util.List
     *@时间:2018/9/3 10:25
     */
    @Override
    public List queryByUname(String uName) {
        List userList = userRepository.queryByUname(uName);
        return userList;
    }

    /**
     *@功能:查询所有学生
     *@参数:
     *@return: java.util.List
     *@时间:2018/9/4 19:36
     */
    @Override
    public List queryStuList() {

        List userList = userRepository.findAllStu(3);
        return userList;
    }

    /**
     *@功能:查询所有用户
     *@参数:
     *@return: java.util.List
     *@时间:2018/9/4 19:36
     */
    @Override
    public List queryList() {

        List userList = userRepository.findAll();
        return userList;
    }

    /**
     *@功能:查询用户
     *@参数:uid
     *@return: com.tjrac.exam.domain.User
     *@时间:2018/9/3 16:57
     */
    @Override
    public User queryByUid(Integer uid) {
        return userRepository.findOne(uid);
    }

    /**
     *@功能:删除用户
     *@参数:
     *@return: java.util.List
     *@时间:2018/9/3 10:25
     */
    @Override
    @Transactional
    public void deleteUser(Integer id){
        User user = userRepository.findOne(id);
        if(user.getAuthority()==2){  //教师
            //查询该教师下所有考题组
            List groupeList = groupesRepository.queryByUid(id);
            for(Groupes g:groupeList){  //遍历该教师所有考题组
                //查询考题组下所有题目
                List topicList = topicRepository.queryByGid(g.getgId());
                topicRepository.delete(topicList);
                //查询考题组下所有考题组-学生关系
                List groupesStuList = groupesStuRepository.queryByGid(g.getgId());
                groupesStuRepository.delete(groupesStuList);
            }
            groupesRepository.delete(groupeList);
        }else if(user.getAuthority()==3){
            //查询考题组下所有考题组-学生关系
            List groupesStuList = groupesStuRepository.queryByUid(user.getuId());
            groupesStuRepository.delete(groupesStuList);
        }
        userRepository.delete(id);
    }
}

domain层(bean,dao)

需要再pom.xml中加入依赖


   org.springframework.boot
   spring-boot-starter-data-jpa



   mysql
   mysql-connector-java

 

类注解

@Entity 实体类注解

 

参数注解

@Id 主键注解

@GeneratedValue 自增注解

@Min(value = 18,message = "") 设置参数最小值注解

 

实例

@Entity
public class Girl {

    @Id  //主键
    @GeneratedValue //自增注解
    private Integer id;

    private String cupSize;

    @Min(value = 18,message = "未成年少女禁止入内")
    private Integer age;

    public Girl() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCupSize() {
        return cupSize;
    }

    public void setCupSize(String cupSize) {
        this.cupSize = cupSize;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Girl{" +
                "id=" + id +
                ", cupSize='" + cupSize + '\'' +
                ", age=" + age +
                '}';
    }
}

AOP

AOP示意图

SpringBoot基本操作_第7张图片

在pom.xml中添加AOP依赖


   org.springframework.boot
   spring-boot-starter-aop

类注解

@Aspect

@Component

方法注解

@Before 拦截的方法之前执行

@After 拦截的方法执行之后

@AfterReturning 拦截的方法执行之后返回值处理

@Pointcut 拦截点 定义在公共的方法上 用于规划统一的拦截地址

 

AOP日志切面示例

@Aspect
@Component
public class HttpAspect {

    private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);    // import org.slf4j.Logger;

    //拦截getGirls方法  com.whw.controller.GirlController.*所有方法 (..)不管什么参数
    @Pointcut("execution(public * com.whw.controller.GirlController.getGirls(..))")
    public void log(){

    }

    @Before("log()")
    public void doBefore(JoinPoint joinPoint){
        ServletRequestAttributes attributes =  (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        //url
        logger.info("url:{}",request.getRequestURL());
        //method
        logger.info("method:{}",request.getMethod());
        //ip
        logger.info("ip:{}",request.getRemoteAddr());
        //类方法
        logger.info("class_method:{}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());
        //参数
        logger.info("args:{}",joinPoint.getArgs());
    }

    @After("log()")
    public void doAfter(){
        logger.info("22222222222222222222222");
    }

    @AfterReturning(returning = "object",pointcut = "log()")
    public void doAfterReturning(Object object){
        logger.info("response:{}",object.toString());
    }

}

统一异常处理

异常捕获处理实例

@ControllerAdvice
public class ExceptionHandle {
    private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Result handle(Exception e){
        if(e instanceof GirlException){
            GirlException girlException = (GirlException)e;
            logger.error("系统异常:{}",girlException);
            return ResultUtil.errror(girlException.getCode(),girlException.getMessage());
        }else{
            logger.error("系统异常:{}",e);
            return ResultUtil.errror(-1,"未知错误");
        }
    }
}

自定义异常

自定义异常类继承RuntimeException(继承Exception 不会进行事务回滚)

 

异常数据字典(枚举)

public enum ResultEnum {
    UNKNOW_ERROR(-1,"未知错误"),
    SUCCESS(0,"成功"),
    PRIMARY_SCHOOL(100,"你可能在上小学"),
    MIDDLE_SCHOOL(101,"你可能在上初中"),
    COLLAGE(102,"你可能在上大学");

    private Integer code;

    private String msg;

    ResultEnum(Integer code,String msg){
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
} 

单元测试

需要再pom.xml中加入依赖


   javax.xml.bind
   jaxb-api
   2.2.12

在配置文件(yml或者xml)中加入

yml:

spring:
  jpa:
    properties:
      hibernate:
        enable_lazy_load_no_trans: true

xml:

spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

 

类注解

@RunWith(SpringRunner.class)

@SpringBootTest

 

maven打包时跳过单元测试命令

mvn clean package -Dmaven.test.skip=true

 

前端

文件目录:

SpringBoot基本操作_第8张图片

poml依赖


   org.springframework.boot
   spring-boot-starter-thymeleaf

HTML:

Bootstrap:





thymeleaf:

严格遵守html格式

https://blog.csdn.net/qq_32923745/article/details/78257686

 

 

 

你可能感兴趣的:(SpringBoot)