Java springboot 关键知识提要

一、一对多 server,curd、条件分页

 1 package com.zd01.servers;
 2 
 3 import com.github.pagehelper.Page;
 4 import com.github.pagehelper.PageHelper;
 5 import com.github.pagehelper.PageInfo;
 6 import com.zd01.interfaces.StudentInterface;
 7 import com.zd01.mapper.StudentMapper;
 8 import com.zd01.model.BookModel;
 9 import com.zd01.model.PageResult;
10 import com.zd01.model.SearchModel;
11 import com.zd01.model.StudentModel;
12 import lombok.extern.slf4j.Slf4j;
13 import org.apache.ibatis.annotations.Delete;
14 import org.springframework.beans.factory.annotation.Autowired;
15 import org.springframework.stereotype.Service;
16 import org.springframework.transaction.annotation.Transactional;
17 import org.springframework.util.CollectionUtils;
18 
19 import java.time.LocalDate;
20 import java.time.LocalDateTime;
21 import java.util.Arrays;
22 import java.util.List;
23 
24 @Service
25 @Slf4j
26 public class StudentServer implements StudentInterface {
27     @Autowired
28     private StudentMapper studentMapper;
29     
30     @Override
31     public PageResult<StudentModel> getALL(SearchModel searchModel) {
32         PageHelper.startPage(searchModel.getPage(), searchModel.getPageSize());
33         List<StudentModel> rows = studentMapper.getALL(searchModel);
34         PageInfo<StudentModel> pageInfo = new PageInfo<>(rows);
35         return new PageResult<>(pageInfo.getTotal(), pageInfo.getList());
36     }
37     // 一对多的增加
38     @Override
39     @Transactional(rollbackFor = {Exception.class})
40     public void add(BookModel bookModel) {
41         // save book 一的关系
42         bookModel.setAdd_time(LocalDate.now());
43         studentMapper.add(bookModel);
44 
45         // save student 多的关系
46         List<StudentModel> studentModelList = bookModel.getStudentModelList();
47         if(!CollectionUtils.isEmpty(studentModelList)){
48 
49             studentModelList.forEach(s -> s.setBook_id(bookModel.getId()));
50             studentMapper.addStudent(studentModelList);
51         }
52 
53         }
54     // 一对多的删除
55     @Override
56     @Transactional(rollbackFor = {Exception.class})
57     public void deletes(List<Integer> ids) {
58         studentMapper.deleteStudents(ids);
59         studentMapper.deletes(ids);
60 
61     }
62     // 一对多的回显
63     @Override
64     public BookModel getBookStudent(Integer id) {
65         return studentMapper.getBookStudent(id);
66         }
67 
68     // 一对多,修改
69     @Override
70     @Transactional(rollbackFor = {Exception.class})
71     public void update(BookModel bookModel) {
72         // 先跟新一
73         bookModel.setAdd_time(LocalDate.now());
74         studentMapper.update(bookModel);
75         // 删除多
76         studentMapper.deleteStudents(Arrays.asList(bookModel.getId()));
77         List<StudentModel> studentModelList = bookModel.getStudentModelList();
78         // 更新多
79         if(!CollectionUtils.isEmpty(studentModelList)){
80             studentModelList.forEach(s -> s.setBook_id(bookModel.getId()));
81             studentMapper.addStudent(studentModelList);
82             }
83         }
84 
85 
86 }
View Code

 数据抽取[{},{}]、{xx:[],xx2:[]}

 1 @Service
 2 public class ReportServer implements ReportInterface {
 3     @Autowired
 4     private StudentMapper studentMapper;
 5 
 6     @Override
 7     public ReportSexModel getSexCount() {
 8         List<Map<String, Object>> list = studentMapper.getSexCount();//[{ssex:男, num:1},{ssex:女, num:2}]
 9         List<Object> sex = list.stream().map(mapVal -> mapVal.get("ssex")).collect(Collectors.toList());
10         List<Object> sexCount = list.stream().map(mapVal -> mapVal.get("num")).collect(Collectors.toList());
11         return new ReportSexModel(sex, sexCount);
12     }
13 
14     @Override
15     public List<Map<String, Object>> getSexCount2() {
16         List<Map<String, Object>> list = studentMapper.getSexCount2();//[{ssex:男, num:1},{ssex:女, num:2}]
17 
18         return list;
19     }
20 
21 }
View Code

 

二、一对多 xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.zd01.mapper.StudentMapper">
 6     // 一对多的更新,更新一
 7     <update id="update">
 8         update book_book
 9         <set>
10         <if test="book_name != null and book_name!='' ">
11             book_name=#{book_name},
12         </if>
13         <if test="add_time != null">
14             add_time = #{add_time}
15         </if>
16         </set>
17         where id = #{id}
18     </update>
19     // 条件筛选
20     <select id="getALL" resultType="com.zd01.model.StudentModel">
21         select s.*,b.book_name from student s LEFT JOIN book_book b on s.book_id = b.id
22         <where>
23         <if test="name != null and name!='' ">
24             s.name like concat('%',#{name},'%')
25         </if>
26 
27         <if test="age != null">
28             and s.age>#{age}
29         </if>
30 
31         <if test="create_time != null">
32             and s.create_time>#{create_time}
33         </if>
34         </where>
35 
36     </select>
37     // 一对多的新增
38     <insert id="add" parameterType="com.zd01.model.BookModel" keyProperty="id" useGeneratedKeys="true">
39 
40         insert into book_book(book_name,add_time) values(#{book_name},#{add_time})
41     </insert>
42 
43     <insert id="addStudent" parameterType="com.zd01.model.StudentModel">
44         insert into student(name,age,sex,create_time,book_id) values
45         <foreach collection="list" item="stu" separator=",">
46                 (#{stu.name},#{stu.age},#{stu.sex},#{stu.create_time},#{stu.book_id})
47         </foreach>
48     </insert>
49     // 一对多的删除,批量删除一
50     <delete id="deletes" parameterType="java.lang.Integer">
51         delete from book_book  where id in
52         <foreach collection="list" item="id" separator="," open="(" close=")">
53            #{id}
54         </foreach>
55     </delete>
56     // 一对多的删除,批量删除多
57     <delete id="deleteStudents" parameterType="java.lang.Integer">
58         delete from student where book_id in
59         <foreach collection="list" item="id" separator="," open="(" close=")">
60             #{id}
61         </foreach>
62     </delete>
63     // 一对多的回显
64     <resultMap id="bookWithStudentsMap" type="com.zd01.model.BookModel">
65         <id column="id" property="id" />
66         <result column="b_bookName" property="book_name" />
67         <collection property="studentModelList" ofType="com.zd01.model.StudentModel">
68             <id column="s_id" property="id" />
69             <result column="s_name" property="name" />
70             <result column="s_age" property="age" />
71             <result column="s_sex" property="sex" />
72             <result column="s_createTime" property="create_time" />
73             <result column="s_bookID" property="book_id" />
74         </collection>
75     </resultMap>
76 
77     <select id="getBookStudent"  resultMap="bookWithStudentsMap">
78         select
79             b.id,
80             s.id AS s_id,
81             s.name AS s_name,
82             s.create_time AS s_createTime,
83             s.age AS s_age,
84             s.sex AS s_sex ,
85             s.book_id AS s_bookID,
86             b.book_name AS b_bookName
87         from student AS s
88         LEFT JOIN book_book AS b on s.book_id = b.id
89         where b.id=#{id}
90     </select>
91 </mapper>
View Code

 case、if 的玩法

 1  <!--统计-->
 2     <select id="getSexCount" resultType="java.util.Map">
 3         select
 4             (case
 5                  when sex=1 then "女"
 6                  when sex=2 then "男"
 7                  else "其他" end) ssex,
 8             count(*) num
 9         from student group by sex
10         ORDER BY num
11     </select>
12     <select id="getSexCount2" resultType="java.util.Map">
13         select
14             if(sex=1,"男性员工","女性员工") sex,
15             count(*) num
16         from student group by sex
17         ORDER BY num
18     </select>
View Code

 

三、配置

application.xml

1 wechat:
2   appId: 123
3   token: 456
4   scret: 789
5   port: ${server.port}
6 
7 spring:
8   profiles:
9     active: online
View Code

application-online.xml

 1 server:
 2   port: 8082
 3 wechat:
 4   url: 127.0.0.1/online
 5 
 6 spring:
 7   datasource:
 8     url: jdbc:mysql://127.0.0.1:3306/testdata?useSSL=false&serverTimezone=UTC
 9     driver-class-name: com.mysql.cj.jdbc.Driver
10     username: root
11     password: 100100100
12     hikari:
13       connection-timeout: 30000
14       maximum-pool-size: 30
15       minimum-idle: 10
16       max-lifetime: 6000
17 
18 mybatis:
19   configuration:
20     #配置打印sql日志
21     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
22 #    map-underscore-to-camel-case: true  # 自动转换驼峰命名
23   #设置xml文件扫描路径
24   mapper-locations: classpath*:**/mapper/*.xml
25   type-aliases-package: com.example.demo.model
View Code

四、取config的值

 1 @PropertySource("my.properties")
 2 @ConfigurationProperties(prefix = "mychat")
 3 @Component
 4 public class MyChat {
 5     private String appId;
 6     private String token;
 7     private String scret;
 8 
 9     public String getAppId() {
10         return appId;
11     }
12 
13     public void setAppId(String appId) {
14         this.appId = appId;
15     }
16 
17     public String getToken() {
18         return token;
19     }
20 
21     public void setToken(String token) {
22         this.token = token;
23     }
24 
25     public String getScret() {
26         return scret;
27     }
28 
29     public void setScret(String scret) {
30         this.scret = scret;
31     }
32 }
View Code
 1  // value取值
 2 @Value("${wechat.port}")
 3     private String port;
 4 
 5  // 自定义文件,取值
 6     @Resource
 7     private MyChat myChat;
 8     @GetMapping("/getMyChat")
 9     public MyChat getMyChat(){
10         return myChat;
11     }
View Code

 

五、文件上传

View Code 
View Code

六、mybatis-plus

0、pom.xml

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.12</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
        </dependency>
View Code

 

1、xml 配置

server:
  port: 8089

spring:
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/testdata
      username: root
      password: 100100100
      driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  type-aliases-package: com.example.demo.model #实体类包路径
  mapper-locations: classpath:/mapper/**.xml
  configuration:
    map-underscore-to-camel-case: false
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: auto
View Code

2、常用注解

 “``”, 用在名称与sql 语法关键字一致的情况下,例如:字段的名称order,与sql 排序order 一致

3、条件构造器

@Autowired
    private BookMapper bookMapper;
    @Test
    void select() {
        QueryWrapper<BookModel> b = new QueryWrapper<BookModel>()
        .select("id","book_name")
        .ge("id", 20)
        .like("book_name", "皮皮");
        bookMapper.selectList(b);
    }

    @Test
    void update() {
        // 更新数据
        BookModel b = new BookModel();
        b.setBook_name("皮皮虾");
        // 更新条件
        UpdateWrapper<BookModel> wrapper = new UpdateWrapper<BookModel>()
                .eq("id", 34);
        bookMapper.update(b,wrapper);
    }
    @Test
    void set() {
        UpdateWrapper<BookModel> wrapper = new UpdateWrapper<BookModel>()
                .setSql("book_name = '皮皮虾'")
                 .in("id",Arrays.asList( 40, 41, 42));
        bookMapper.update(null,wrapper);
    }
    @Test
    void lambdaSelect() {
        LambdaQueryWrapper<BookModel> wrapper = new LambdaQueryWrapper<BookModel>()
                .select(BookModel::getId,BookModel::getBook_name)
                .ge(BookModel::getId, 20);
        bookMapper.selectList(wrapper);
    }
View Code

 

4、service

mapper

@Mapper
public interface BookMapper extends BaseMapper<BookModel> {

}
View Code

interface

public interface IBookInterface  extends IService<BookModel> {
}
View Code

service

@Service
public class BookService extends ServiceImpl<BookMapper, BookModel> implements IBookInterface {
}
View Code

controller

@RestController
@RequiredArgsConstructor
@RequestMapping("/book")
public class BookController {
    private final BookService bookService;

    @PostMapping
    public void add(@RequestBody BookModel bookModel){
        bookService.save(bookModel);
    }

    @DeleteMapping("/{id}")
    public void delete(@PathVariable Long id) {
        bookService.removeById(id);
    }

    @GetMapping("/{id}")
    public BookModel getById(@PathVariable Long id) {
        BookModel b =  bookService.getById(id);
        return b;
    }
    @GetMapping
    public List<BookModel> getByIds(@RequestParam("ids") List<Long> id) {
        System.out.println("xxx");
        System.out.println(id);
       return bookService.listByIds(id);

    }
}
View Code

4、Mybatis-Plus curd

@Service
public class BookService extends ServiceImpl<BookMapper, BookModel> implements IBookInterface {
    @Autowired
    private StudentService studentService;
    @Override
    public PageResult<BookModel> pageCondition(QueryModel queryModel){
        // 1. 构造分页参数
        Page<BookModel> page = Page.of(queryModel.getPageNum(), queryModel.getPageSize());
        // 4. 处理查询条件
        String bookName = queryModel.getBook_name();
        Page<BookModel> p = lambdaQuery()
                .like(bookName!=null,BookModel::getBook_name,bookName)
                .page(page);
        // 5. 封装
        PageResult<BookModel> ps= new PageResult<>();
        ps.setTotal(p.getTotal());
        ps.setPages(p.getPages());
        ps.setList(p.getRecords());
        return ps;

    }
    // 一对多查询
    @Override
    public BookModel getStudentWithBooks(Long bid) {
        BookModel book = baseMapper.selectStudentWithBooks(bid);
        if (book == null) {
            return null;
        }
        return baseMapper.selectStudentWithBooks(bid);

    }
    // 一对多新增
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public void add(BookModel bookModel) {
        // save book 一的关系
        save(bookModel);
        // save student 多的关系
        List<StudentModel> students = bookModel.getStudents();
        if (!CollectionUtils.isEmpty(students)) {
            students.forEach(student -> student.setBook_id(bookModel.getId()));
            studentService.saveBatch(students);
        }
    }
    // 一对多删除
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public void delete(Long id) {
        // 删除对象是否存在
        BookModel book = getById(id);
        if (book == null) {
            throw new RuntimeException("删除失败,对象不存在");
        }
        // delete student 多的关系
        QueryWrapper<StudentModel> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("book_id", id);
        studentService.remove(queryWrapper);
        // delete book 一的关系
        removeById(id);
    }
    // 一对多修改
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public void update(BookModel bookModel) {
        // update book 一的关系
        updateById(bookModel);
        // update student 多的关系
        List<StudentModel> students = bookModel.getStudents();

        if (!CollectionUtils.isEmpty(students)) {
            // 删除
            QueryWrapper<StudentModel> deleteWrapper = new QueryWrapper<>();
            deleteWrapper.eq("book_id", bookModel.getId());
            studentService.remove(deleteWrapper);
            // 添加
            students.forEach(student -> student.setBook_id(bookModel.getId()));
            studentService.saveBatch(students);
        }
    }
View Code

 

posted @ 2025-06-10 18:45  东方不败--Never  阅读(20)  评论(0)    收藏  举报