标签:创建工程 mongod 图片 wired 不同的 initial ppi 更新 control
? 使用MyBatis实现查询所有用户信息
? 1 数据库表
-- ----------------------------
-- Table structure for `t_user`
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`address` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `t_user` VALUES (‘1‘, ‘leimenghongchen‘, ‘123‘, ‘深圳‘);
INSERT INTO `t_user` VALUES (‘2‘, ‘lmhcblog‘, ‘123‘, ‘上海‘);
? 2 创建工程,勾选依赖坐标
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>blog.lmch</groupId>
<artifactId>springboot-mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-mybatis</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3 编写pojo
public class User implements Serializable{
private Integer id;
private String username;
private String password;
private String address;
// TODO getters、setters
}
? 4 编写mapper接口以及映射文件
@Mapper
public interface UserMapper {
/**
* 查询所有用户
* @return
*/
List<User> findAll();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="blog.lmhc.mapper.UserMapper">
<!--查询所有用户-->
<select id="findAll" resultType="blog.lmhc.pojo.User">
select * from t_user;
</select>
</mapper>
public interface UserService {
/***
* 查询所有
* @return
*/
List<User> findAll();
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
/***
* 查询所有
* @return
*/
@Override
public List<User> findAll() {
return userMapper.findAll();
}
}
5 编写controller
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/***
* 查询所有用户
* @return
*/
@RequestMapping("/findAll")
public List<User> findAll(){
return userService.findAll();
}
}
6 配置application.yml
server:
port: 8808
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/t_user?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml
logging:
level:
blog.lmhc: debug
7 发布程序并访问
访问地址:<http://localhost:8808/user/findAll>
查询用户,先去Redis中查询,如果有数据直接返回数据,没数据,则查询数据库,并存入到Redis缓存,再返回数据
springdata redis,一套模板,redisTemplate模板,提供对redis进行增删查操作的所有模板操作内容;
安装redis
添加坐标
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
#redis,端口可以不填,默认就是6379
spring.redis.host=192.168.211.132
spring.redis.port=6379
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private RedisTemplate redisTemplate;
/**
* 查询所有用户信息
*
* @return
*/
@Override
public List<User> findAll() {
//首先从redis中获取数据
List<User> userList = (List<User>)redisTemplate.boundValueOps("userList").get();
//没有获取到,从数据库获取,并数据存入redis
if(userList == null || userList.size() == 0){
//从数据库中获取数据
userList = userMapper.findAll();
//存储到redis中
redisTemplate.boundValueOps("userList").set(userList);
System.out.println("从数据库中获取到数据");
}else{
System.out.println("从redis中获取到的数据");
}
return userList;
}
}
? Spring Data是一个用于简化数据访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。 Spring Data可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。
Spring Data的官网:http://projects.spring.io/spring-data/
1.简化了基本sql语句(基本的sql不用写)
2.可以连接各种类型的数据源,本地数据库,云数据库,关系型数据(mysql oralce),非关系型数据(mongoDB)
使用完成Spring Data JPA对user表的CRUD操作。
1.创建工程勾选依赖
2.编写Pojo,添加注解
3.编写Dao(需要继承JpaRepository<T,ID>)
4.编写Service
5.编写Controller
6.测试
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot-jpa</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-jpa</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
/**
* @Entity:表明为一个实体对象
* @Table:指定映射的表
* @Id:指定为主键
* @GeneratedValue:指定注解的生成策略
* TABLE:使用一个特定的数据库表格来保存主键。
* SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
* IDENTITY:主键由数据库自动生成(主要是自动增长型)
* AUTO:主键由程序控制
* @Column:指定表的列明
*/
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "username")
private String username;
private String password;
private String address;
private String phone;
// TODO getters/setters
}
public interface UserDao extends JpaRepository<User,Integer> {
}
public interface UserService {
List<User> findUsers();
User findUserById(Integer id);
void saveUser(User user);
void updateUser(User user);
void deleteUserById(Integer id);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public List<User> findUsers() {
return userDao.findAll();
}
@Override
public User findUserById(Integer id) {
Optional<User> optional = userDao.findById(id);
return optional.get();
}
@Override
public void saveUser(User user) {
userDao.save(user);
}
@Override
public void updateUser(User user) {
// 并没有update方法,如果id存在则执行更新操作
userDao.save(user);
}
@Override
public void deleteUserById(Integer id) {
userDao.deleteById(id);
}
}
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/findUsers")
public List<User> findUsers(){
return userService.findUsers();
}
@RequestMapping("/findUserById/{id}")
public User findUserById(@PathVariable Integer id){
return userService.findUserById(id);
}
@RequestMapping("/saveUser")
public void saveUser(User user){
userService.saveUser(user);
}
@RequestMapping("/updateUser")
public void updateUser(User user){
userService.updateUser(user);
}
@RequestMapping("/deleteUserById/{id}")
public void deleteUserById(@PathVariable Integer id){
userService.deleteUserById(id);
}
}
server:
port: 8808
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/t_user?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
redis:
host: 192.168.211.132
port: 6379
mybatis:
mapper-locations: classpath:mapper/*.xml
logging:
level:
com.itheima: debug
@Component
public class TimeProgarm {
/**
* 掌握:cron表达式是一个字符串,字符串以5或6个空格隔开,分开共6或7个域,每一个域代表一个含义
* [秒] [分] [小时] [日] [月] [周] [年]
* [年]不是必须的域,可以省略[年],则一共6个域
*
* 了解:
* fixedDelay:上一次执行完毕时间点之后多长时间再执行(单位:毫秒)
* fixedDelayString:同等,唯一不同的是支持占位符,在配置文件中必须有time.fixedDelay=5000
* fixedRate:上一次开始执行时间点之后多长时间再执行
* fixedRateString:同等,唯一不同的是支持占位符
* initialDelay:第一次延迟多长时间后再执行
* initialDelayString:同等,唯一不同的是支持占位符
*/
// @Scheduled(fixedDelay = 5000)
// @Scheduled(fixedDelayString = "5000")
// @Scheduled(fixedDelayString = "${time.fixedDelay}")
// @Scheduled(fixedRate = 5000)
// // 第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次
// @Scheduled(initialDelay=1000, fixedRate=5000)
@Scheduled(cron = "30 45 15 08 07 *")
public void myTask(){
System.out.println("程序执行了");
}
}
备注:可以通过资料中提供的cron表达式工具去生成。
CronTrigger配置完整格式为: [秒][分] [小时][日] [月][周] [年]
序号 | 说明 | 是否必填 | 允许填写的值 | 允许的通配符 |
---|---|---|---|---|
1 | 秒 | 是 | 0-59 | , - * / |
2 | 分 | 是 | 0-59 | , - * / |
3 | 小时 | 是 | 0-23 | , - * / |
4 | 日 | 是 | 1-31 | , - * ? / L W |
5 | 月 | 是 | 1-12或JAN-DEC | , - * / |
6 | 周 | 是 | 1-7或SUN-SAT | , - * ? / L W |
7 | 年 | 否 | empty 或1970-2099 | , - * / |
使用说明:
通配符说明:
* 表示所有值. 例如:在分的字段上设置 "*",表示每一分钟都会触发。
? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。
例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为 0 0 0 10 * ?
- 表示区间。例如 在小时上设置 "10-12",表示 10,11,12点都会触发。
, 表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发
/ 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。 在月字段上设置‘1/3‘所示每月1号开始,每隔三天触发一次。
L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示“本月最后一个星期五"
W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 "1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区间"-").
# 序号(表示每月的第几个周几),例如在周字段上设置"6#3"表示在每月的第三个周六.注意如果指定"#5",正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了) ;
掌握SpringBoot打包方法
跳过测试代码(不设置时会执行所有的测试代码)
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<skipTests>true</skipTests>
</plugin>
</plugins>
</build>
方式二
<properties>
<java.version>1.8</java.version>
<skipTests>true</skipTests>
</properties>
打包
方式二:通过命令执行
1、通过cmd进入到工程的目录中,与pom.xml同级
2、然后执行命令:mvn clean package [-Dmaven.test.skip=true] --->[]内为可选操作,排除测试代码,也就是说打包时跳过测试代码
如下命令打包:mvn clean package -Dmaven.test.skip=true
测试:
java -jar springboot_demo4_jpa-0.0.1-SNAPSHOT.jar
-Xmx:最大堆内存
-Xms:初始堆内存
java -Xmx80m -Xms20m -jar springboot_demo4_jpa-0.0.1-SNAPSHOT.jar
标签:创建工程 mongod 图片 wired 不同的 initial ppi 更新 control
原文地址:https://www.cnblogs.com/lmhcblog/p/springboot2.html