SpringBoot代码实战(MyBatis-Plus+Thymeleaf)

构建项目

修改pom.xml文件,添加其他依赖以及设置

        <!--MyBatis-Plus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.6</version></dependency><!-- Druid依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency>

配置文件

spring.application.name=crmspring.thymeleaf.cache=falsespring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456logging.level.root=warn
logging.level.com.ktjiaoyu.mybatisplus.mapper=trace
logging.pattern.console=%p%m%n
#加载sql日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImplspring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#初始化大小、最小、最大连接数
spring.datasource.druid.initial-size=3, 
spring.datasource.druid.min-idle=3
spring.datasource.druid.max-active=10
#配置获取连接等待超时的时间
spring.datasource.druid.max-wait=60000
#监控后台账号和密码
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
#配置StatFilter
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000

模型开发

模型包括entity、mapper、service

entity

实体类User、Role,使用注解配置映射,且配置好关联关系

User

package com.tykj.crm.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;/*** * @TableName sys_user*/
@TableName(value ="sys_user")
@Data
public class User implements Serializable {/*** 编号*/@TableId(type = IdType.AUTO)private Long usrId;/*** 姓名*/private String usrName;/*** 密码*/private String usrPassword;/*** 角色编号*/private Long usrRoleId;private String roleName;/*** 状态*/private Integer usrFlag;@TableField(exist = false)private static final long serialVersionUID = 1L;@Overridepublic boolean equals(Object that) {if (this == that) {return true;}if (that == null) {return false;}if (getClass() != that.getClass()) {return false;}User other = (User) that;return (this.getUsrId() == null ? other.getUsrId() == null : this.getUsrId().equals(other.getUsrId()))&& (this.getUsrName() == null ? other.getUsrName() == null : this.getUsrName().equals(other.getUsrName()))&& (this.getUsrPassword() == null ? other.getUsrPassword() == null : this.getUsrPassword().equals(other.getUsrPassword()))&& (this.getUsrRoleId() == null ? other.getUsrRoleId() == null : this.getUsrRoleId().equals(other.getUsrRoleId()))&& (this.getUsrFlag() == null ? other.getUsrFlag() == null : this.getUsrFlag().equals(other.getUsrFlag()));}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((getUsrId() == null) ? 0 : getUsrId().hashCode());result = prime * result + ((getUsrName() == null) ? 0 : getUsrName().hashCode());result = prime * result + ((getUsrPassword() == null) ? 0 : getUsrPassword().hashCode());result = prime * result + ((getUsrRoleId() == null) ? 0 : getUsrRoleId().hashCode());result = prime * result + ((getUsrFlag() == null) ? 0 : getUsrFlag().hashCode());return result;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append(getClass().getSimpleName());sb.append(" [");sb.append("Hash = ").append(hashCode());sb.append(", usrId=").append(usrId);sb.append(", usrName=").append(usrName);sb.append(", usrPassword=").append(usrPassword);sb.append(", usrRoleId=").append(usrRoleId);sb.append(", usrFlag=").append(usrFlag);sb.append(", serialVersionUID=").append(serialVersionUID);sb.append("]");return sb.toString();}
}

Role

package com.tykj.crm.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;/*** * @TableName sys_role*/
@TableName(value ="sys_role")
@Data
public class Role implements Serializable {/*** 编号*/@TableId(type = IdType.AUTO)private Long roleId;/*** 角色名称*/private String roleName;/*** 角色描述*/private String roleDesc;/*** 状态*/private Integer roleFlag;@TableField(exist = false)private static final long serialVersionUID = 1L;@Overridepublic boolean equals(Object that) {if (this == that) {return true;}if (that == null) {return false;}if (getClass() != that.getClass()) {return false;}Role other = (Role) that;return (this.getRoleId() == null ? other.getRoleId() == null : this.getRoleId().equals(other.getRoleId()))&& (this.getRoleName() == null ? other.getRoleName() == null : this.getRoleName().equals(other.getRoleName()))&& (this.getRoleDesc() == null ? other.getRoleDesc() == null : this.getRoleDesc().equals(other.getRoleDesc()))&& (this.getRoleFlag() == null ? other.getRoleFlag() == null : this.getRoleFlag().equals(other.getRoleFlag()));}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((getRoleId() == null) ? 0 : getRoleId().hashCode());result = prime * result + ((getRoleName() == null) ? 0 : getRoleName().hashCode());result = prime * result + ((getRoleDesc() == null) ? 0 : getRoleDesc().hashCode());result = prime * result + ((getRoleFlag() == null) ? 0 : getRoleFlag().hashCode());return result;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append(getClass().getSimpleName());sb.append(" [");sb.append("Hash = ").append(hashCode());sb.append(", roleId=").append(roleId);sb.append(", roleName=").append(roleName);sb.append(", roleDesc=").append(roleDesc);sb.append(", roleFlag=").append(roleFlag);sb.append(", serialVersionUID=").append(serialVersionUID);sb.append("]");return sb.toString();}
}

mapper

UserMapper

package com.ktjiaoyu.thymeleaf.mapper;import com.ktjiaoyu.thymeleaf.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.PathVariable;import java.util.List;/**
* @author Administrator
* @description 针对表【sys_user】的数据库操作Mapper
* @createDate 2024-09-09 09:10:40
* @Entity com.ktjiaoyu.thymeleaf.entity.User
*/
public interface UserMapper extends BaseMapper<User> {User login(@Param("usrName") String usrName, @Param("usrPassword") String usrPassword);List<User> findAllUsers(@Param("usrName") String usrName, @Param("roleId") Integer roleId, @Param("pageIndex")Integer pageIndex, @Param("pageSize")Integer pageSize);public Integer count(@Param("usrName") String usrName, @Param("roleId") Integer roleId);User getUserById(Integer usrId);
}

RoleMapper

package com.ktjiaoyu.thymeleaf.mapper;import com.ktjiaoyu.thymeleaf.entity.Role;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;/**
* @author Administrator
* @description 针对表【sys_role】的数据库操作Mapper
* @createDate 2024-09-20 14:17:54
* @Entity com.ktjiaoyu.thymeleaf.entity.Role
*/
public interface RoleMapper extends BaseMapper<Role> {}

sql映射文件

UserMapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ktjiaoyu.thymeleaf.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.ktjiaoyu.thymeleaf.entity.User"><id property="usrId" column="usr_id" jdbcType="BIGINT"/><result property="usrName" column="usr_name" jdbcType="VARCHAR"/><result property="usrPassword" column="usr_password" jdbcType="VARCHAR"/><result property="usrRoleId" column="usr_role_id" jdbcType="BIGINT"/><result property="usrFlag" column="usr_flag" jdbcType="INTEGER"/><result property="roleName" column="role_name"/></resultMap><sql id="Base_Column_List">usr_id,usr_name,usr_password,usr_role_id,usr_flag</sql><select id="findAllUsers" resultMap="BaseResultMap">select u.*,r.role_namefrom sys_user uleft join sys_role r on u.usr_role_id=r.role_id<where><if test="usrName != null and usrName != ''">and u.usr_name like '%${usrName}%'</if><if test="roleId != null and roleId != 0">and u.usr_role_id = #{roleId}</if></where>limit #{pageIndex},#{pageSize}</select><select id="login" resultMap="BaseResultMap">select u.*,r.role_namefrom sys_user uleft join sys_role r on u.usr_role_id=r.role_idwhereu.usr_name = #{usrName}andu.usr_password = #{usrPassword}</select><select id="count" resultType="java.lang.Integer">select count(*) from sys_user<where><if test="usrName != null and usrName != ''">and usr_name like '%${usrName}%'</if><if test="roleId != null and roleId != 0">and usr_role_id = #{roleId}</if></where></select><select id="getUserById" resultType="com.ktjiaoyu.thymeleaf.entity.User">select u.*,r.role_namefrom sys_user uleft join sys_role r on u.usr_role_id=r.role_idwhereu.usr_id = #{usrId}</select>
</mapper>

RoleMapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ktjiaoyu.thymeleaf.mapper.RoleMapper"><resultMap id="BaseResultMap" type="com.ktjiaoyu.thymeleaf.entity.Role"><id property="roleId" column="role_id" jdbcType="BIGINT"/><result property="roleName" column="role_name" jdbcType="VARCHAR"/><result property="roleDesc" column="role_desc" jdbcType="VARCHAR"/><result property="roleFlag" column="role_flag" jdbcType="INTEGER"/></resultMap><sql id="Base_Column_List">role_id,role_name,role_desc,role_flag</sql>
</mapper>

service

UserService、UserServiceImpl

package com.ktjiaoyu.thymeleaf.service;import com.ktjiaoyu.thymeleaf.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;/**
* @author Administrator
* @description 针对表【sys_user】的数据库操作Service
* @createDate 2024-09-09 09:10:40
*/
public interface UserService extends IService<User> {public User login(String usrName, String usrPassword);public User addUser(User user);public void deleteUser(Integer usrId);public User updateUser(User user);public User getUser(Long usrId);public List<User> selectPageUsers(String usrName, Integer roleId, Integer pageIndex, Integer pageSize);public int countInt(String usrName, Integer roleId);User getUserById(Integer usrId);
}
package com.ktjiaoyu.thymeleaf.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ktjiaoyu.thymeleaf.entity.User;import com.ktjiaoyu.thymeleaf.service.UserService;
import com.ktjiaoyu.thymeleaf.mapper.UserMapper;
import jakarta.annotation.Resource;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;import java.util.List;/**
* @author Administrator
* @description 针对表【sys_user】的数据库操作Service实现
* @createDate 2024-09-09 09:10:40
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>implements UserService{@Resourceprivate UserMapper userMapper;@Overridepublic User login(String usrName, String usrPassword) {return userMapper.login(usrName, usrPassword);}@Overridepublic User addUser(User user) {int result = userMapper.insert(user);if (result > 0){return user;}else{return null;}}@Overridepublic void deleteUser(Integer usrId) {userMapper.deleteById(usrId);}@Overridepublic User updateUser(User user) {int i = userMapper.updateById(user);return user;}@Overridepublic User getUser(Long usrId) {return userMapper.selectById(usrId);}@Overridepublic List<User> selectPageUsers(String usrName, Integer roleId, Integer pageIndex, Integer pageSize) {return userMapper.findAllUsers(usrName, roleId, pageIndex, pageSize);}@Overridepublic int countInt(String usrName, Integer roleId) {return userMapper.count(usrName, roleId);}@Overridepublic User getUserById(Integer usrId) {return userMapper.getUserById(usrId);}
}

 RoleService、RoleServiceImpl

package com.ktjiaoyu.thymeleaf.service;import com.ktjiaoyu.thymeleaf.entity.Role;
import com.baomidou.mybatisplus.extension.service.IService;/**
* @author Administrator
* @description 针对表【sys_role】的数据库操作Service
* @createDate 2024-09-20 14:17:54
*/
public interface RoleService extends IService<Role> {}
package com.ktjiaoyu.thymeleaf.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ktjiaoyu.thymeleaf.entity.Role;
import com.ktjiaoyu.thymeleaf.service.RoleService;
import com.ktjiaoyu.thymeleaf.mapper.RoleMapper;
import org.springframework.stereotype.Service;/**
* @author Administrator
* @description 针对表【sys_role】的数据库操作Service实现
* @createDate 2024-09-20 14:17:54
*/
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role>implements RoleService{}

 

控制器开发

列表(联表加分页)

    @RequestMapping("/user/list")public String findUsers(Model model, String usrName, Integer roleId, @RequestParam(defaultValue = "1") Integer pageIndex){System.out.println(usrName + "/" + roleId);// 分页对象Page<User> userPage = new Page<>();// 当前页数userPage.setPageNo(pageIndex);// 页面数据量userPage.setPageSize(5);// 获取页面数据总量userPage.setTotalCount(userService.countInt(usrName, roleId));// 获取分页数据列表userPage.setData(userService.selectPageUsers(usrName,roleId,( userPage.getPageNo() - 1 ) * userPage.getPageSize(),userPage.getPageSize()));// 获取角色数据列表List<Role> roles = roleService.list();// 传递分页数据model.addAttribute("userPager",userPage);// 传递角色数据列表model.addAttribute("roles",roles);// 数据回显model.addAttribute("usrName",usrName);model.addAttribute("roleId",roleId);return "user/list";}

新增、修改

    @RequestMapping("/user/save")public String save(User user){if (user.getUsrId() != null){userService.updateUser(user);}else{userService.save(user);}return "redirect:/user/list";}

删除

    @ResponseBody@RequestMapping("/user/del/{usrId}")public String del(@PathVariable Integer usrId){userService.deleteUser(usrId);Map map = new HashMap();map.put("result","true");return JSONUtils.toJSONString(map);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/432192.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LiveGBS流媒体平台GB/T28181功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveGBS流媒体平台GB/T28181功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、直播播放2、录像播放3、搭建GB28181视频直播平台 1、直播播放 国标设备-》查看通道-》播放 &#xff0c;左键单击可以拉取矩形框&#xff0c;放大选中的范围&#xff0c;释…

序列化流(对象操作输出流)反序列化流(对象操作输入流)

可以把Java中的对象写到本地文件中 序列化流&#xff08;对象操作输出流&#xff09; 构造方法 成员方法 使用对象输出流将对象保存到文件会出现NotSerializableException异常 解决方案&#xff1a;需要让Javabean类实现Serializable接口 Student package myio;import java.…

家政服务预约系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;客户管理&#xff0c;员工管理&#xff0c;家政服务管理&#xff0c;服务预约管理&#xff0c;员工风采管理&#xff0c;客户需求管理&#xff0c;接单信息管理 微信端账号功能包括&#xff1a;系统首…

MySQL_子查询

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

力扣最热一百题——寻找重复数(中等)

目录 题目链接&#xff1a;287. 寻找重复数 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;暴力搜寻 Java写法&#xff1a; 运行时间 解法二&#xff1a;排序搜寻 Java写法&#xff1a; 运行时间 C写法&#xff1a; 运…

2024/9/26 英语每日一段

In part, that’s because it’s harder to empathize with someone who feels distant or unknown than a close loved one. “The more shared experiences you have with someone, the more of a rich, nuanced representation you can draw on,” Cameron says. But empath…

【Java网络编程】使用Tcp和Udp实现一个小型的回声客户端服务器程序

网络编程的概念 Java中的网络编程是指使用Java语言及其库创建和管理网络应用程序的过程。这一过程使得不同的计算机可以通过网络进行通信和数据交换。Java提供了一系列强大的API&#xff08;应用程序编程接口&#xff09;来支持网络编程&#xff0c;主要涉及以下几个概念&…

简易STL实现 | 红黑树的实现

1、原理 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡的二叉搜索树 红黑树具有以下特性&#xff0c;这些特性保持了树的平衡&#xff1a; 节点颜色&#xff1a; 每个节点要么是红色&#xff0c;要么是黑色根节点颜色&#xff1a; 根节点是黑色的。叶子节点&…

【stm32】TIM定时器输出比较-PWM驱动LED呼吸灯/舵机/直流电机

TIM定时器输出比较 一、输出比较简介1、OC&#xff08;Output Compare&#xff09;输出比较2、PWM简介3、输出比较通道(高级)4、输出比较通道(通用)5、输出比较模式6、PWM基本结构配置步骤&#xff1a;程序代码&#xff1a;PWM驱动LED呼吸灯 7、参数计算8、舵机简介程序代码&am…

【笔记】KaiOS 系统框架和应用结构(APP界面逻辑)

KaiOS系统框架 最早自下而上分成Gonk-Gecko-Gaia层,代码有同名的目录,现在已经不用这种称呼。 按照官网3.0的版本迭代介绍,2.5->3.0已经将系统更新成如下部分: 仅分为上层web应用和底层平台核心,通过WebAPIs连接上下层,这也是kaios系统升级变更较大的部分。 KaiOS P…

括号匹配问题 -------------

1.题目说明&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有…

Jenkins入门:从搭建到部署第一个Springboot项目(踩坑记录)

本文讲述在虚拟机环境下(模拟服务器)&#xff0c;使用docker方式搭建jenkins&#xff0c;并部署一个简单的Springboot项目。仅记录关键步骤和遇到的坑&#xff0c;后续再进行细节补充。 一、环境准备和基础工具安装 1. 环境 系统环境为本机vmware创建的Ubuntu24.04。 2. yum…

【C++】STL--string(下)

1.string类对象的修改操作 erase&#xff1a;指定位置删除 int main() {string str1("hello world");str1.push_back(c);//尾插一个ccout << str1 << endl;string str2;str2.append("hello"); // 在str后追加一个字符"hello"cout…

CNN-LSTM预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测

CNN-LSTM预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测 目录 CNN-LSTM预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 本次运行测试环境MATLAB2020b 提出一种包含卷积神经网络和长短…

多机部署,负载均衡-LoadBalance

文章目录 多机部署,负载均衡-LoadBalance1. 开启多个服务2. 什么是负载均衡负载均衡的实现客户端负载均衡 3. Spring Cloud LoadBalance快速上手使用Spring Cloud LoadBalance实现负载均衡修改IP,端口号为服务名称启动多个服务 负载均衡策略自定义负载均衡策略 LoadBalance原理…

c++模拟真人鼠标轨迹算法

一.鼠标轨迹算法简介 鼠标轨迹底层实现采用 C / C语言&#xff0c;利用其高性能和系统级访问能力&#xff0c;开发出高效的鼠标轨迹模拟算法。通过将算法封装为 DLL&#xff08;动态链接库&#xff09;&#xff0c;可以方便地在不同的编程环境中调用&#xff0c;实现跨语言的兼…

红外辐射在大气中的衰减原理(含C++实现)

目录 一、原理 1.1 水蒸气吸收衰减 1.2 二氧化碳的吸收衰减 1.3 大气的散射衰减 1.4 气象衰减 1.5 衰减后的红外辐射强度 二、C++实现 2.1 头文件 2.2 源文件 参考论文 一、原理 红外辐射在大气中传播的影响因素主要有3个: (1)大气中某些气体分子(H2O、CO2等)…

31214324

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

4. 数据结构: 对象和数组

数字、布尔值和字符串是构建数据结构的原子。不过&#xff0c;许多类型的信息需要不止一个原子。对象允许我们对值&#xff08;包括其他对象&#xff09;进行分组&#xff0c;从而构建更复杂的结构。到目前为止&#xff0c;我们所构建的程序都受到限制&#xff0c;因为它们只能…

【Hadoop】【vim编辑器】【~/.bashrc 文件】如何编辑

1. 进入 vim 编辑器 在终端中输入以下命令&#xff1a; vim ~/.bashrc 2. 进入插入模式 打开文件后&#xff0c;你将处于普通模式。在普通模式下&#xff0c;你不能直接编辑文本。 要进入插入模式&#xff0c;请按下 i 键。这时&#xff0c;你应该会看到屏幕底部出现 -- 插…