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 }
数据抽取[{},{}]、{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 }
二、一对多 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>
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>
三、配置
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
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
四、取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 }
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六、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>
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
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); }
4、service
mapper
@Mapper public interface BookMapper extends BaseMapper<BookModel> { }
interface
public interface IBookInterface extends IService<BookModel> { }
service
@Service public class BookService extends ServiceImpl<BookMapper, BookModel> implements IBookInterface { }
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); } }
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); } }

浙公网安备 33010602011771号