SpringBoot(基础篇)

1.SpringBoot自动装配原理

        原理: 主启动类上的@SpringBootApplication注解上,而该注解是一个复合组件,而在复合注解中存在@EnableAutoConfiguration, 这个@EnableAutoConfiguration注解也是一个复合注解,包含@Import---而@Import注解导入一个AutoConfigurationImportSelector 【自动配置选择器】,在该类中存在一个方法getAutoConfigurationEntry --作用:得到自动配置类的实体。而这些自动配置类会完成相应的自动装配。

2.SpringBoot整合数据源

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        引入数据源相关依赖,SpringBoot自动配置会加载jdbc的自动配置类---读取springboot配置文件中数据源的信息,从而完成数据源的自动配置。

        在application.yml配置文件中配置数据源

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/test0818?serverTimezone=Asia/Shanghai

        将test0818更换为自己的数据库名称。如果需要更换数据源,那么就引入依赖

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

        引入druid数据源,并修改yml配置

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: root
      url: jdbc:mysql://localhost:3306/test0816?serverTimezone=Asia/Shanghai
      #初始化的连接对象的个数
      initial-size: 5
      #最多的连接数
      max-active: 10

        这样我们就配置好了druid的数据源

3.SpringBoot整合mybatis

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        引入SpringBoot和mybatis整合的依赖和lombok,并创建实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer uid;
    private String username;
    private String password;
    private Double money;
}
@Mapper
public interface UserDao {
    List<User> QueryAll();
}

        创建dao层接口及方法

<mapper namespace="com.yzx.dao.UserDao">
    <select id="QueryAll" resultType="com.yzx.pojo.User">
        select * from user
    </select>
</mapper>

        mapper层方法映射文件

mybatis:
  mapper-locations: classpath:/mapper/*.xml

        在yml配置文件中,添加映射文件的路径

@SpringBootTest
class SpringBootApplicationMainTests {

    @Autowired
    private UserDao userDao;

 
    @Test
    void TestQueryAll(){
        System.out.println(userDao.QueryAll());
    }

}

        将userdao注入进测试类,并调用QueryAll方法,控制台输出了数据。

4.SpringBoot整合分页插件

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.5</version>
        </dependency>

                导入SpringBoot和PageHelper整合依赖,并在原有的测试方法上进行修改

@SpringBootTest
class SpringBootApplicationMainTests {

    @Autowired
    private UserDao userDao;

    @Test
    void TestQueryAll(){
        PageHelper.startPage(1,2);
        PageInfo<User> userPageInfo = new PageInfo<>(userDao.QueryAll());
        System.out.println("总条数:"+userPageInfo.getTotal());
        System.out.println("总页数:"+userPageInfo.getPages());
        System.out.println("当前页记录:"+userPageInfo.getList());
    }

}

 5.整合开发

        整合以上功能进行增删改查

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result {
    private Integer code;
    private String msg;
    private Object data;
}

        创建统一的返回对象

@Mapper
public interface UserDao {
    List<User> QueryAll();
    User QueryUserById(Integer id);
    int DeleteById(Integer id);
    int Update(@Param("user") User user);
    int Add(@Param("user") User user);
}

        创建dao层方法

<mapper namespace="com.yzx.dao.UserDao">
    <select id="QueryAll" resultType="com.yzx.pojo.User">
        select * from user
    </select>
    <select id="QueryUserById" resultType="com.yzx.pojo.User">
        select * from user where uid = #{id}
    </select>
    <delete id="DeleteById">
        delete from user where uid = #{id}
    </delete>
    <update id="Update">
        update user set username = #{user.username},password = #{user.password},money = #{user.money} where uid = #{user.uid}
    </update>
    <insert id="Add">
        insert into user values(null,#{user.username},#{user.password},#{user.money})
    </insert>
</mapper>

        mapper映射文件

public interface UserService {
    PageInfo<User> QueryAll(Integer current, Integer pageSize);
    User QueryUserById(Integer id);
    int DeleteById(Integer id);
    int Update(User user);
    int Add(User user);
}

        service层方法

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;
    @Override
    public PageInfo<User> QueryAll(Integer current, Integer pageSize) {
        PageHelper.startPage(current,pageSize);
        return new PageInfo<>(userDao.QueryAll());
    }

    @Override
    public User QueryUserById(Integer id) {
        return userDao.QueryUserById(id);
    }

    @Override
    public int DeleteById(Integer id) {
        return userDao.DeleteById(id);
    }

    @Override
    public int Update(User user) {
        return userDao.Update(user);
    }

    @Override
    public int Add(User user) {
        return userDao.Add(user);
    }
}

        service层实现类

@RestController
@RequestMapping("/user")
@Transactional  //开启事务
public class UserController {
    @Autowired
    private UserServiceImpl userService;

    @GetMapping("/all")
    public Result QueryAll(Integer current,Integer pageSize) {
        return new Result(200, "查询所有信息成功", userService.QueryAll(current, pageSize));
    }
    @GetMapping("/by")
    public Result QueryUserById(Integer id) {
        return new Result(200, "查询所有信息成功", userService.QueryUserById(id));
    }
    @DeleteMapping("/del")
    public Result DeleteUserById(Integer id) {
        return new Result(200, "删除成功", userService.DeleteById(id));
    }
    @PutMapping("/upd")
    public Result Update(@RequestBody User user) {
        return new Result(200, "更新成功", userService.Update(user));
    }
    @PostMapping("/add")
    public Result AddUser(@RequestBody User user) {
        return new Result(200, "添加成功", userService.Add(user));
    }
}

        controller层

@EnableTransactionManagement //开启事务注解驱动

        启动类开启事务注解驱动,启动测试

        第一个GET:http://localhost:80/user/all?current=1&pageSize=2

         第二个GET:http://localhost:80/user/by?id=1

        第五个POST:http://localhost:80/user/add

         第四个PUT:http://localhost:80/user/upd

 

         第三个DELETE:http://localhost:80/user/del?id=4

        完成了增删改查以及分页的功能整合 

6.SpringBoot整合定时器

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

        引入SpringBoot和定时器整合的依赖

@Component
public class Quartz {
    @Autowired
    private UserServiceImpl userService;

    @Scheduled(cron = "0/10 *  * * * ?")//每隔多久执行一次,10秒执行一次
    public void quartz() {
        System.out.println(userService.QueryAll(1,2));//可以填写业务代码
    }
}

        创建自定义的定时器类,@Scheduled注解内的cron值可以百度搜索在线生成器,我的是每10秒执行一次,里面可以写业务代码,例如实时检查订单状态的变化,如果多长时间内未支付,将订单取消。但SpringBoot还不能解析这个注解

@EnableScheduling //开启定时驱动注解

        需要在主启动类添加注解开启,才能够使用定时器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值