Spring Boot 2微服务项目实战 - 笔记

150 阅读5分钟
  1. Spring Boot支持两种类型的配置文件:application.propertiesapplication.yml

    -> application.properties:

    server.port = 8080
    

    -> application.yml

    server:
      port:8090
    #用空格缩进对其,不能用tab
    

    这两种配置文件可以并存,但是.properties的优先级高于.yml。

  2. @SpringBootApplication是一个组合注解,包含@EnableAutoConfiguration@ComponentScan@SpringBootConfiguration三个注解,是项目启动注解。

  3. 测试代码:

    @Resource
    private JdbcTemplate jdbcTemplate;
    
    /**
    * mysql集成sping boot简单测试
    */
    @Test
    public void mySqlTest(){
        String sql = "select * from ay_user";
        List<AyUser> ayUserList = jdbcTemplate.query(sql, new RowMapper<AyUser>() {
            @Override
            public AyUser mapRow(ResultSet resultSet, int i) throws SQLException{
            AyUser ayUser = new AyUser();
            ayUser.setId(resultSet.getString("id"));
            ayUser.setName(resultSet.getString("name"));
            ayUser.setPassword(resultSet.getString("password"));
            return ayUser;
            }
        });
        System.out.println("查询成功:");
        for(AyUser ayUser:ayUserList){
        System.out.println(ayUser.toString());
        }
    }
    

    笔记:

    • JdbcTemplate:一个通过 JDBC 连接数据库的工具类,我们可以通过这个工具类对数据库进行增、删、改、查等操作。
    • @Resource:自动注入,通过这个注解,在项目启动之后, Spring Boot 会帮助我们实例化一个 JdbcTemplate对象,省去初始化工作 。
    • query()方法: JdbcTemplate 对象中的查询方法,通过传入SQL语句和RowMapper对象可以查询出数据库中的数据。
    • RowMapper对象:RowMapper对象可以将查询出的每一行数据封装成用户定义的类,在上面的代码中,通过调用 RowMapper 中的mapRow方法,将数据库中的每一行数据封装成AyUser 对象,并返回。
  4. springboot连接mysql会报时区错误,在url后加上参数serverTimezone=UTC就好。 MySQL配置时区

  5. Thymeleaf:

    常用表达式

    • ${}变量表达式
    • *{}选择表达式
    • #{}消息文字表达式
    • @{}链接url表达式
    • #maps工具对象表达式

    常用标签

    • th:action:定义后台控制器路径
    • th:each:循环语句
    • th:field:表单字段绑定
    • th:href:定义超链接
    • th:id:div标签中的id声明
    • th:if:条件判断语句
    • th:include:布局标签,替换内容到引用文件
    • th:fragment:布局标签,定义一个代码片段,方便其他地方引用
    • th:object:替换对象
    • th:src:图片地址引入
    • th:text:显示文本
    • th:value:属性赋值

    常用函数

    • #dates:日期函数
    • #lists:列表函数
    • #arrays:数组函数
    • #strings:字符串函数
    • #numbers:数字函数
    • #calendars:日历函数
    • #objects:对象函数
    • #bools:逻辑函数
  6. 命名空间:在以上引入<html xmlns:th="http://www.thymeleaf.org">,就可以在html中使用Thymeleaf标签语言,用关键字 “ th ” 标注。

  7. 事务四大特性(ACID):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

    事务一般加在服务层。

  8. 根据监听对象可以把监听器分为三类:

    • ServletContext(对应Application):Application在整个web服务中只有一个,在web服务关闭时销毁。
    • HttpSession(对应session):Session对应每个会话,在会话起始时创建,一端关闭会话时销毁。
    • ServletRequest(对应request):客户发送请求时创建(一同创建的还有response),用于封装请求数据,在一次请求处理完毕时销毁。

    根据监听的事件可以把监听器分为三类:

    • 监听对象的创建于销毁
    • 监听对象域中属性的增加和删除
    • 监听绑定到session上的某个对象上的状态
  9. redis基本类型:string字符串,list链表,hash哈希,set集合,zset有序集合(sorted set)

    基本操作

    ###---------------------字符串string操作---------------------###
    
    #新建字符串
    127.0.0.1:6379> set name 'cyj'
    OK
    #查询
    127.0.0.1:6379> get name
    "cyj"
    #修改
    127.0.0.1:6379> set name 'big'
    OK
    #修改后查询
    127.0.0.1:6379> get name
    "big"
    #删除
    127.0.0.1:6379> del name
    (integer) 1
    
    ###---------------------链表list操作---------------------###
    
    #新建链表list1,从头开始push
    127.0.0.1:6379> lpush list1 'a1' 'a2' 'a3'
    (integer) 3
    #查询,从头开始,起始下标为0,终止下标为-1
    #0表示第一个,1表示第2个,-1表示最后一个,-2表示最后第2个
    127.0.0.1:6379> lrange list1 0 -1
    1) "a3"
    2) "a2"
    3) "a1"
    #新建链表list2,从尾开始push
    127.0.0.1:6379> rpush list2 'A' 'B' 'C'
    (integer) 3
    #查询
    127.0.0.1:6379> lrange list2 0 -1
    1) "A"
    2) "B"
    3) "C"
    #根据索引取值
    127.0.0.1:6379> lindex list 1
    "a2"
    #获得长度
    127.0.0.1:6379> llen list1
    (integer) 3
    #通过索引设置值
    127.0.0.1:6379> lset list1 2 'b'
    OK
    #设置后查询
    127.0.0.1:6379> lrange list1 0 -1
    1) "a3"
    2) "a2"
    3) "b"
    #添加值,从头开始
    127.0.0.1:6379> lpush list2 'D'
    (integer) 4
    #添加后查询
    127.0.0.1:6379> lrange list2 0 -1
    1) "D"
    2) "C"
    3) "B"
    4) "A"
    #添加值,从尾开始
    127.0.0.1:6379> rpush list2 'E'
    (integer) 5
    #添加后查询
    127.0.0.1:6379> lrange list2 0 -1
    1) "D"
    2) "C"
    3) "B"
    4) "A"
    5) "E"
    #删除指定位置:lrem key count value
    #根据count的值,移除list中与value相等的元素
    #1.count>0:从表头向表尾搜索,移除count个与value相等的元素
    #2.count<0:从表尾向表头搜索,移除count的绝对值个与value相等的元素
    #3.count=0:移除表中所有与value相等的元素
    127.0.0.1:6379> lrem list2 1 'B'
    (integer) 1
    #删除后查询
    127.0.0.1:6379> lrange list2 0 -1
    1) "D"
    2) "C"
    3) "A"
    4) "E"
    
    ###---------------------集合set操作---------------------###
    
    #新建
    127.0.0.1:6379> sadd user_set 'a' 'b' 'c' 'a'
    (integer) 3
    #查询
    127.0.0.1:6379> smembers user_set
    1) "b"
    2) "c"
    3) "a"
    #删除
    127.0.0.1:6379> srem user_set
    (integer) 1
    #删除后查询
    127.0.0.1:6379> smembers user_set
    1) "b"
    2) "c"
    #添加
    127.0.0.1:6379> sadd user_set '1'
    (integer) 1
    #添加后查询(集合是无序的,不确定添加到了哪个位置)
    127.0.0.1:6379> smembers user_set
    1) "b"
    2) "1"
    3) "c"
    
    ###---------------------哈希hash操作---------------------###
    
    #清除数据库
    127.0.0.1:6379> flushdb
    OK
    #新建hash
    127.0.0.1:6379> hset myhash "user1" "cyj"
    (integer) 1
    #添加字段和值
    127.0.0.1:6379> hset myhash "user2" "bbb"
    (integer) 1
    #查询长度
    127.0.0.1:6379> hlen myhash
    (integer) 2
    #查询所有字段
    127.0.0.1:6379> hkeys myhash
    1) "user1"
    2) "user2"
    #查询所有值
    127.0.0.1:6379> hvals myhash
    1) "cyj"
    2) "bbb"
    #根据字段查值
    127.0.0.1:6379> hget myhash "user2"
    "bbb"
    #查询所有字段和所有值
    127.0.0.1:6379> hgetall myhash
    1) "user1"
    2) "cyj"
    3) "user2"
    4) "bbb"
    #更改字段值
    127.0.0.1:6379> hset myhash "user2" "ccc"
    (integer) 0
    #更改后查询
    127.0.0.1:6379> hgetall myhash
    1) "user1"
    2) "cyj"
    3) "user2"
    4) "ccc"
    #删除字段和值
    127.0.0.1:6379> hdel myhash user2
    (integer) 1
    #删除后查询
    127.0.0.1:6379> hgetall myhash
    1) "user1"
    2) "cyj"
    
    ###---------------------有序集合zset操作---------------------###
    
    #新建zset,数字为分数
    127.0.0.1:6379> zadd myzset 25 'a'
    (integer) 1
    #添加元素,数字为分数
    127.0.0.1:6379> zadd myzset 38 'b'
    (integer) 1
    #添加元素,数字为分数
    127.0.0.1:6379> zadd myzset 11 'c'
    (integer) 1
    #查询,按分数从小到大排
    127.0.0.1:6379> zrange myzset 0 -1
    1) "c"
    2) "a"
    3) "b"
    #查询,按分数从大到小排
    127.0.0.1:6379> zrevrange myzset 0 -1
    1) "b"
    2) "a"
    3) "c"
    #查询某个元素对应的分数
    127.0.0.1:6379> zscore myzset 'a'
    "25"
    

------------------ 完结!撒花 ✿✿ヽ(°▽°)ノ✿ ------------------