SSM-Project-Day03-角色管理-role

本文介绍了一个基于Java的系统角色管理模块的设计与实现过程,包括Controller层的页面展示、前端页面的点击事件处理、角色实体类定义、DAO层的分页查询实现、Mapper文件配置、Service层业务逻辑处理等。此外,还提供了实现前端分页效果的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、呈现页面-Controller

在这里插入图片描述

@Controller
@RequestMapping("/role/")
public class SysRoleController {

//    列表页面呈现
    @RequestMapping("doRoleListUI")
    public String doRoleListUI(){
        return "sys/role_list";
    }
}

二、去添加主页上的列表点击事件

 $(function(){
       /* $("#load-log-id").click(function(){
    		var url="log/doLogListUI.do";
    		//load函数为一个特殊的ajax函数
    		$("#mainContentId").load(url);
    	}) */
       /*$("#load-menu-id").click(function(){
    		var url="menu/doMenuListUI.do";
    		//load函数为一个特殊的ajax函数
    		$("#mainContentId").load(url);
    	})*/
          doLoadUI("load-log-id","log/doLogListUI");
          doLoadUI("load-menu-id","menu/doMenuListUI");
          doLoadUI("load-dept-id","dept/doDeptListUI");
          doLoadUI("load-role-id","role/doRoleListUI");

     });
//     发现两个方法大量代码重复,可提取
  function doLoadUI(id,url) {
    $("#"+id).click(function(){
      //load函数为一个特殊的ajax函数
      $("#mainContentId").load(url,function () {
        //初始化对象 如果有数据,移除
        $("#mainContentId").removeData();
      });
    });
  }

测试一下吧:
在这里插入图片描述

三、角色实体类

在这里插入图片描述

public class SysRole implements Serializable {
    private static final long serialVersionUID = 2036333074712712067L;
    private Integer id;
    private String name;
    private String note;

    private Date createdTime;
    private Date modifiedTime;
    private String createdUser;
    private String modifiedUser;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note;
    }

    public Date getCreatedTime() {
        return createdTime;
    }

    public void setCreatedTime(Date createdTime) {
        this.createdTime = createdTime;
    }

    public Date getModifiedTime() {
        return modifiedTime;
    }

    public void setModifiedTime(Date modifiedTime) {
        this.modifiedTime = modifiedTime;
    }

    public String getCreatedUser() {
        return createdUser;
    }

    public void setCreatedUser(String createdUser) {
        this.createdUser = createdUser;
    }

    public String getModifiedUser() {
        return modifiedUser;
    }

    public void setModifiedUser(String modifiedUser) {
        this.modifiedUser = modifiedUser;
    }
}

四、实现分页功能-Dao-要求:按姓名查看

在这里插入图片描述

public interface SysRoleDao {

//    分页查询:按名字查询,设定起始页面,页面容量
    List<SysRole> findPageObjects(@Param("name") String name,
                                  @Param("startIndex")Integer startIndex,
                                  @Param("pageSize")Integer pageSize);
//    总记录数:按名字查询总记录数
    int getRowCount(@Param("name")String name);
}

五、mapper.xml-拷贝log的

<!-- 分页查询当前页记录 -->
    <select id="findPageObjects"
            resultType="com.jt.sys.SysRole">
            select * 
            from sys_roles
            <include refid="queryWhereId"/>
            order by createdTime desc
            limit #{startIndex},#{pageSize}
    </select>
    <!-- 按条件统计总记录数 -->
    <select id="getRowCount"
            resultType="int">
            select count(*)
            from sys_roles
            <include refid="queryWhereId"/>
    </select>

六、service

public interface SysRoleService {

//    分页查询:按名字查询,当前页码值
//    返回当前页记录以及分页信息
    PageObject<SysRole> findPageObjects(String name,
                                        Integer pageCurrent);
   
}
@Service
public class SysRoleServiceImpl implements SysRoleService {

//    建立连接
    @Autowired
    private SysRoleDao sysRoleDao;

//    分页查询
    @Override
    public PageObject<SysRole> findPageObjects(String name, Integer pageCurrent) {
//        1.验证参数合法性
        if(pageCurrent==null&&pageCurrent<1){
            throw new IllegalArgumentException("当前页设定不合法");
        }
//        2.查询总记录数 进行验证
        int rowCount =sysRoleDao.getRowCount(name); //根据姓名查询总记录数
        if(rowCount==0){
            throw new ServiceException("没有找到对应记录");
        }
//        3.当前页的记录信息
        int pageSize=2;
        int startIndex=(pageCurrent-1)*pageSize;
        List<SysRole> records =
        sysRoleDao.findPageObjects(name,startIndex,pageSize);
//        4.封装结果并返回
        PageObject<SysRole> po = new PageObject<>();
        po.setRecords(records);
        po.setPageCurrent(pageCurrent);
        po.setPageSize(pageSize);
        po.setRowCount(rowCount);
//        总页数的计算 提取到PageObject对应的getPageCount-get方法中
//        po.setPageCount((rowCount-1)/pageSize+1);
        return po;
    }
}

    public int getPageCount() {
//        return pageCount;
        return (rowCount-1)/pageSize+1;
    }

七、controller

//    分页查询
    @RequestMapping("doFindPageObjects")
    @ResponseBody
    public JsonResult doFindPageObjects(String name,Integer pageCurrent){
        return new JsonResult(sysRoleService.findPageObjects(name,pageCurrent));
    }

八、前端页面

在这里插入图片描述
延伸:
添加序号列
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
i是一个字符串,需要转换为数字,再进行加1
在这里插入图片描述

<think>嗯,用户需要的是一个完整的Java和MySQL教务管理系统源代码,包含毕设管理、场地预约和排课功能,还要有详细的数据库操作实现和注释。首先,我得确定系统的基本架构,可能用MVC模式,Spring Boot框架比较适合,因为能快速搭建,而且整合MyBatis或者JPA方便数据库操作。数据库方面,MySQL的结构需要设计几个关键表,比如用户表、毕业设计表、场地预约表和课程表。 然后,用户提到的三个主要功能模块:毕设管理、场地预约和排课。每个模块都需要对应的实体类、DAO层、Service层和Controller层。比如毕设管理可能需要选题、审核、进度跟踪等功能,场地预约需要时间冲突检测,排课要考虑教室和时间安排是否冲突。数据库操作部分,得写清楚SQL语句,并且加上事务管理,确保数据一致性。 接下来是代码结构,用户可能需要清晰的目录结构,比如分模块组织代码,每个功能有对应的包。注释方面,每个类和方法都要有说明,特别是业务逻辑复杂的部分,比如排课算法或者预约冲突检测的实现。此外,可能需要提供一些示例数据,方便用户理解系统运行流程。 考虑到用户是毕业设计,可能需要详细的文档说明,比如系统设计、数据库ER图、接口文档等。不过用户这次主要关注源代码和数据库实现,所以重点放在代码示例和数据库脚本上。同时,参考之前的引用,里面提到有Java项目源码,可能涉及SSM框架,所以采用Spring Boot + MyBatis的组合比较合适。 最后,用户可能希望代码有良好的可扩展性和可维护性,所以需要遵循一些设计原则,比如分层架构、模块化设计。另外,测试用例和部署步骤也是加分项,但用户可能没有明确提,不过如果有简要说明会更好。</think>### Java+MySQL教务管理系统实现方案 一、系统架构设计 1. 技术选型:Spring Boot 2.7 + MyBatis + MySQL 8.0 + Thymeleaf 2. 分层结构:Controller-Service-DAO-Model 3. 数据库ER图核心实体: - 用户表(user):user_id, username, role_type - 毕设课题(project):project_id, title, teacher_id, status - 场地预约(place_booking):booking_id, place_id, user_id, time_slot - 课程表(course_schedule):schedule_id, course_id, classroom, week_day, time_slot 二、数据库建表语句(核心表) ```sql -- 毕设课题表 CREATE TABLE `graduation_project` ( `project_id` INT AUTO_INCREMENT PRIMARY KEY, `title` VARCHAR(100) NOT NULL, `teacher_id` INT NOT NULL, `student_id` INT DEFAULT NULL, `status` ENUM('未选','进行中','已完成') DEFAULT '未选', `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (teacher_id) REFERENCES user(user_id), FOREIGN KEY (student_id) REFERENCES user(user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 场地预约表 CREATE TABLE `place_booking` ( `booking_id` INT AUTO_INCREMENT PRIMARY KEY, `place_id` INT NOT NULL, `user_id` INT NOT NULL, `start_time` DATETIME NOT NULL, `end_time` DATETIME NOT NULL, `status` ENUM('待审核','已通过','已拒绝') DEFAULT '待审核', UNIQUE KEY `unique_booking` (place_id, start_time), FOREIGN KEY (user_id) REFERENCES user(user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 三、核心功能实现代码示例 1. 排课冲突检测算法(Service层) ```java /** * 检查教室时间冲突 * @param classroom 教室编号 * @param weekDay 星期几(1-7) * @param timeSlot 节次(1-10) * @return 是否冲突 */ public boolean checkScheduleConflict(String classroom, int weekDay, int timeSlot) { return courseScheduleMapper.countConflict( classroom, weekDay, timeSlot) > 0; } // MyBatis Mapper接口 @Select("SELECT COUNT(*) FROM course_schedule " + "WHERE classroom = #{classroom} " + "AND week_day = #{weekDay} " + "AND time_slot = #{timeSlot}") int countConflict(String classroom, int weekDay, int timeSlot); ``` 2. 场地预约事务处理 ```java @Transactional public BookingResult createBooking(PlaceBooking booking) { // 检查时间有效性 if (booking.getEndTime().before(booking.getStartTime())) { return BookingResult.error("结束时间不能早于开始时间"); } // 检查场地是否可用 int conflictCount = placeBookingMapper.checkTimeConflict( booking.getPlaceId(), booking.getStartTime(), booking.getEndTime()); if (conflictCount > 0) { return BookingResult.error("该时段已被预约"); } // 创建预约记录 booking.setStatus(BookingStatus.PENDING); placeBookingMapper.insert(booking); return BookingResult.success(booking); } ``` 四、系统安全措施 1. SQL注入防护:全部使用MyBatis参数化查询 2. 事务管理:@Transactional注解保障数据一致性 3. 密码存储:BCryptPasswordEncoder加密 ```java @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } ``` 五、项目结构建议 ``` src/main/java ├── com.university.system │ ├── config // 配置类 │ ├── controller // 控制器 │ ├── service // 服务层 │ ├── dao // 数据访问层 │ ├── model // 实体类 │ ├── utils // 工具类 │ └── exception // 自定义异常 resources/ ├── static // 静态资源 ├── templates // 页面模板 └── application.yml // 配置文件 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值