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 //开启定时驱动注解
需要在主启动类添加注解开启,才能够使用定时器