考虑维度,设计表 按照某种维度分成多个表 也可以提高查询性能,适合对登录做缓存等
如果一张表100个字段性能低也不好缓存性能低 就可以考虑垂直分表
冗余字段:反三范式 就是一个表出现其他表的非主键,这样设计方便展示,方便操作。
设计表时: 查询总人数 浏览量等 重新用表设置字段 表示总人数 有人注册或者浏览就去加一 这样可以提高效率,不用select count(*)这样去查
id一对一 课程表的id就是详情表等的id,几张表的id一样。
锤直分表:一个大表的列 分为多个小表
水平分表:一张大表把数据分到多张表
查询课程等级 同编号查询 编号作为条件去查询课程的等级
<select id="selectBySn" resultMap="BaseResultMap"> SELECT si.id, si.parent_id, si.name, si.requence, si.intro FROM t_systemdictionary s JOIN t_systemdictionaryitem si ON s.id=si.parent_id where sn=#{sn} </select> 封装dto对前台数据的接收,有三个不同的json字符串,自定义一个dto来接收 package cn.itsource.wyj.dto; import cn.itsource.wyj.domain.Course; import cn.itsource.wyj.domain.CourseDetail; import cn.itsource.wyj.domain.CourseMarket; public class CourseDto { private Course course; private CourseDetail courseDetail; private CourseMarket courseMarket; public Course getCourse() { return course; } public void setCourse(Course course) { this.course = course; } public CourseDetail getCourseDetail() { return courseDetail; } public void setCourseDetail(CourseDetail courseDetail) { this.courseDetail = courseDetail; } public CourseMarket getCourseMarket() { return courseMarket; } public void setCourseMarket(CourseMarket courseMarket) { this.courseMarket = courseMarket; } }然后进行保存
@Service @Transactional public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> implements ICourseService { @Autowired private CourseDetailMapper courseDetailMapper; @Autowired private CourseMarketMapper courseMarketMapper; @Override public void save(CourseDto courseDto) { //获取参数 Course course = courseDto.getCourse(); CourseDetail courseDetail = courseDto.getCourseDetail(); CourseMarket courseMarket = courseDto.getCourseMarket(); //参数判断 //保存三张表 course.setUserId(42l); course.setUserName("小刚刚"); course.setTenantId(26l); course.setTenantName("源码时代"); baseMapper.insert(course); courseDetail.setId(course.getId()); courseDetailMapper.insert(courseDetail); courseMarket.setId(course.getId()); courseMarketMapper.insert(courseMarket); } } 注意:前端传的时间时字符串而后端是Date类型可以使用注解@DateTimeFormat(pattern = "yyyy-MM-dd")在domain的字段上来转成字符串接收前台传的参数。 @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endTime;前台课程类型多级显示的展示(后续更新) 前台等级的显示(后续更新)