[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-public-Q1TCG9Jj":3,"public-project-articles-Q1TCG9Jj":17},{"id":4,"uuid":5,"project_id":6,"title":7,"content":8,"type":9,"status":10,"public_enabled":10,"views":11,"sort":12,"created_at":13,"updated_at":14,"project_title":15,"project_slug":16},772,"Q1TCG9Jj",49,"04. Springboot3整合MyBatis实现数据库操作","## 安装软件\n\nMySQL5.7 或 8.x、Navicat（数据库可视化工具）\n\n\n\n**前置知识：Mysql 的基础语法**\n\n## 创建数据库 code2025\n\n### 新建数据库，配置字符集和编码\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1740140871316-24caef75-5486-4809-95df-34c19ae58504.png)\n\n### 新建表管理员表 admin\n\n所有表的主键名称叫 id，都是自动递增的，id 是唯一的数据，删除后无法再填充回去，比如删除 id=2 这个数据，那么 id=2 就永远没有了\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1740141035756-81eb545a-e546-423c-951d-db436cd92d33.png)\n\nadmin 表的结构\n\n```sql\nCREATE TABLE `admin` (\n  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',\n  `username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '账号',\n  `password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码',\n  `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称',\n  `phone` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机',\n  `email` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱',\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='管理员信息';\n```\n\n设置 username 唯一\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1740141242302-7ec1f55e-c7a3-4b80-baa6-e713216824a1.png)\n\n### 测试查询操作\n\n```sql\nSELECT * FROM admin WHERE id = 1;\n```\n\n\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1740141375697-c4c3820a-993a-4fa2-80a5-dd3a30155aa9.png)\n\n## SpringBoot 集成 Mybatis\n\nMybatis 官网：[https:\u002F\u002Fmybatis.org\u002Fmybatis-3\u002Fzh_CN\u002Findex.html](https:\u002F\u002Fmybatis.org\u002Fmybatis-3\u002Fzh_CN\u002Findex.html)\n\n\n\n\u003Cfont style=\"color:rgb(51, 51, 51);\">在 pom.xml 里面添加 Mysql 依赖  和 MyBatis 依赖\u003C\u002Ffont>\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>com.mysql\u003C\u002FgroupId>\n    \u003CartifactId>mysql-connector-j\u003C\u002FartifactId>\n    \u003Cscope>runtime\u003C\u002Fscope>\n\u003C\u002Fdependency>\n\n\u003Cdependency>\n    \u003CgroupId>org.mybatis.spring.boot\u003C\u002FgroupId>\n    \u003CartifactId>mybatis-spring-boot-starter\u003C\u002FartifactId>\n    \u003Cversion>3.0.3\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\n## Springboot 配置数据库和 Mybatis\n\n### application.yml 里面的配置\n\n```yaml\n# 数据库配置\nspring:\n  datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    username: root\n    password: 123456\n    url: jdbc:mysql:\u002F\u002Flocalhost:3306\u002Fcode2025?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true\n# 配置mybatis实体和xml映射\nmybatis:\n  ## 映射xml\n  mapper-locations: classpath:mapper\u002F*.xml\n  configuration:\n    # 配置日志\n    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl\n    map-underscore-to-camel-case: true\n```\n\n**classpath: 表示 resources 的目录**\n\n**创建 mapper 文件夹**\n\n\n\n### 创建实体类 Admin\n\n```java\npackage com.example.entity;\n\n\u002F**\n * 管理员信息\n *\u002F\npublic class Admin {\n    private Integer id;\n    private String username;\n    private String password;\n    private String phone;\n    private String email;\n\n    public Integer getId() {\n        return id;\n    }\n\n    public void setId(Integer id) {\n        this.id = id;\n    }\n\n    public String getUsername() {\n        return username;\n    }\n\n    public void setUsername(String username) {\n        this.username = username;\n    }\n\n    public String getPassword() {\n        return password;\n    }\n\n    public void setPassword(String password) {\n        this.password = password;\n    }\n\n    public String getPhone() {\n        return phone;\n    }\n\n    public void setPhone(String phone) {\n        this.phone = phone;\n    }\n\n    public String getEmail() {\n        return email;\n    }\n\n    public void setEmail(String email) {\n        this.email = email;\n    }\n}\n\n```\n\n\n\n### 创建 AdminMapper.xml 文件\n\n```xml\n\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n\u003C!DOCTYPE mapper\n        PUBLIC \"-\u002F\u002Fmybatis.org\u002F\u002FDTD Mapper 3.0\u002F\u002FEN\"\n        \"https:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-mapper.dtd\">\n\u003Cmapper namespace=\"com.example.mapper.AdminMapper\">\n    \n\n\u003C\u002Fmapper>\n```\n\n\n\n### 创建 mapper 接口层\n\n```java\npackage com.example.mapper;\n\nimport com.example.entity.Admin;\n\nimport java.util.List;\n\npublic interface AdminMapper {\n\n    List\u003CAdmin> selectAll();\n\n}\n\n```\n\n### 在启动类上面扫描 mapper 接口层\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1740142397736-a44737f0-083c-4783-bded-510c33e621d9.png)\n\n\n\n## Mapper 接口和 Mapper.xml 的关系\n\nMapper 定义接口的方法\n\nMapper.xml 里面去实现方法（SQL 语句实现）\n\n\n\n### 下载插件 MybatisX\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1740142328536-eea25a7e-4fdf-4eb0-8d9d-f39febeb7c65.png)\n\n## 连接数据库写一个查询接口\n\nAdminController\n\n```java\nimport com.example.service.AdminService;\nimport jakarta.annotation.Resource;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport java.util.List;\n\n@RestController\n@RequestMapping(\"\u002Fadmin\")\npublic class AdminController {\n\n    @Resource\n    AdminService adminService;\n\n    @GetMapping(\"\u002FselectAll\")  \u002F\u002F   完整的请求路径：http:\u002F\u002Fip:port\u002Fadmin\u002FselectAll\n    public Result selectAll() {\n        List\u003CAdmin> adminList = adminService.selectAll();\n        return Result.success(adminList);\n    }\n\n}\n```\n\n\n\nAdminService\n\n```java\npackage com.example.service;\n\nimport com.example.entity.Admin;\nimport com.example.exception.CustomerException;\nimport com.example.mapper.AdminMapper;\nimport jakarta.annotation.Resource;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service\npublic class AdminService {\n\n    @Resource\n    AdminMapper adminMapper;\n\n    public List\u003CAdmin> selectAll() {\n        return adminMapper.selectAll();\n    }\n\n}\n```\n\nAdminMapper\n\n```java\npackage com.example.mapper;\n\nimport com.example.entity.Admin;\n\nimport java.util.List;\n\npublic interface AdminMapper {\n\n    List\u003CAdmin> selectAll();\n\n}\n\n```\n\nAdminMapper.xml\n\n```xml\n\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n\u003C!DOCTYPE mapper\n        PUBLIC \"-\u002F\u002Fmybatis.org\u002F\u002FDTD Mapper 3.0\u002F\u002FEN\"\n        \"https:\u002F\u002Fmybatis.org\u002Fdtd\u002Fmybatis-3-mapper.dtd\">\n\u003Cmapper namespace=\"com.example.mapper.AdminMapper\">\n\n    \u003Cselect id=\"selectAll\" resultType=\"com.example.entity.Admin\">\n        select * from `admin` order by id desc\n    \u003C\u002Fselect>\n\n\u003C\u002Fmapper>\n```\n\n\n\n## 测试查询接口\n\n最后测试的结果：\n\n[http:\u002F\u002Flocalhost:9999\u002Fadmin\u002FselectAll](http:\u002F\u002Flocalhost:9999\u002Fadmin\u002FselectAll)\n\n![](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2025\u002Fpng\u002F751015\u002F1740143034279-db1510d4-1597-49d4-ac35-08e2b09a5afc.png)\n","coding",1,11144,1518,"2025-03-07 15:50:30","2026-05-03 22:49:02","带小白做毕设2025系列课程","graduation-project-2025",{"project":18,"items":19},{"id":6,"title":15,"slug":16},[20,28,35,42,49,50,57,64,71,78,85,92,99,106,113,120,127,134,141,148,155],{"id":21,"uuid":22,"project_id":6,"title":23,"type":9,"status":10,"public_enabled":10,"views":24,"sort":25,"created_at":26,"updated_at":27,"project_title":15,"project_slug":16},766,"XmlcAcY0","00. 带小白做毕设2025课程介绍",19012,1512,"2025-02-22 15:29:01","2026-05-07 15:33:28.189425+00",{"id":29,"uuid":30,"project_id":6,"title":31,"type":9,"status":10,"public_enabled":10,"views":32,"sort":33,"created_at":34,"updated_at":14,"project_title":15,"project_slug":16},767,"nmjXCdVH","01. 前端Vue3 框架的快速搭建以及项目工程的讲解",15797,1513,"2025-02-13 17:13:40",{"id":36,"uuid":37,"project_id":6,"title":38,"type":9,"status":10,"public_enabled":10,"views":39,"sort":40,"created_at":41,"updated_at":14,"project_title":15,"project_slug":16},768,"pMdPrVeH","02. 使用Vue3集成Element-Plus快速搭建一个管理系统的页面框架",15959,1514,"2025-02-14 11:25:07",{"id":43,"uuid":44,"project_id":6,"title":45,"type":9,"status":10,"public_enabled":10,"views":46,"sort":47,"created_at":48,"updated_at":14,"project_title":15,"project_slug":16},771,"8PikYMQU","03. Springboot3框架的快速搭建以及项目工程的讲解",12768,1517,"2025-02-21 17:21:51",{"id":4,"uuid":5,"project_id":6,"title":7,"type":9,"status":10,"public_enabled":10,"views":11,"sort":12,"created_at":13,"updated_at":14,"project_title":15,"project_slug":16},{"id":51,"uuid":52,"project_id":6,"title":53,"type":9,"status":10,"public_enabled":10,"views":54,"sort":55,"created_at":56,"updated_at":14,"project_title":15,"project_slug":16},773,"De7YPnEc","05. Springboot3+vue3实现增删改查、分页查询、批量删除（上）",10827,1519,"2025-02-22 15:09:19",{"id":58,"uuid":59,"project_id":6,"title":60,"type":9,"status":10,"public_enabled":10,"views":61,"sort":62,"created_at":63,"updated_at":14,"project_title":15,"project_slug":16},774,"YKEHfsPd","06. Springboot3+vue3实现增删改查、分页查询、批量删除（下）",7760,1520,"2025-02-22 22:00:02",{"id":65,"uuid":66,"project_id":6,"title":67,"type":9,"status":10,"public_enabled":10,"views":68,"sort":69,"created_at":70,"updated_at":14,"project_title":15,"project_slug":16},775,"sNDKpWVJ","07. Springboot3+Vue3实现excel批量导入导出",6552,1521,"2025-02-23 10:49:24",{"id":72,"uuid":73,"project_id":6,"title":74,"type":9,"status":10,"public_enabled":10,"views":75,"sort":76,"created_at":77,"updated_at":14,"project_title":15,"project_slug":16},776,"1uMP9O6C","08. Springboot3+vue3实现登录注册功能",7964,1522,"2025-02-23 18:14:13",{"id":79,"uuid":80,"project_id":6,"title":81,"type":9,"status":10,"public_enabled":10,"views":82,"sort":83,"created_at":84,"updated_at":14,"project_title":15,"project_slug":16},777,"WahvQp1v","09. Springboot3+vue3实现JWT登录鉴权",7151,1523,"2025-02-23 21:58:00",{"id":86,"uuid":87,"project_id":6,"title":88,"type":9,"status":10,"public_enabled":10,"views":89,"sort":90,"created_at":91,"updated_at":14,"project_title":15,"project_slug":16},778,"QFFAqZh1","10. Springboot3+vue3实现文件上传和下载",6171,1524,"2025-02-24 14:16:27",{"id":93,"uuid":94,"project_id":6,"title":95,"type":9,"status":10,"public_enabled":10,"views":96,"sort":97,"created_at":98,"updated_at":14,"project_title":15,"project_slug":16},1278,"S2eL2g5L","11. Springboot3+vue3实现个人中心、修改密码",5945,1525,"2025-02-24 18:10:59",{"id":100,"uuid":101,"project_id":6,"title":102,"type":9,"status":10,"public_enabled":10,"views":103,"sort":104,"created_at":105,"updated_at":14,"project_title":15,"project_slug":16},1279,"LkN8Mmsn","12. Springboot3+Vue3实现系统公告功能",4967,1526,"2025-02-25 11:50:13",{"id":107,"uuid":108,"project_id":6,"title":109,"type":9,"status":10,"public_enabled":10,"views":110,"sort":111,"created_at":112,"updated_at":14,"project_title":15,"project_slug":16},1280,"i7wziuEN","13. Springboot3+Vue3实现角色权限控制",4446,1527,"2025-02-25 11:51:38",{"id":114,"uuid":115,"project_id":6,"title":116,"type":9,"status":10,"public_enabled":10,"views":117,"sort":118,"created_at":119,"updated_at":14,"project_title":15,"project_slug":16},1281,"pGwiTCRn","14. Springboot3+Vue3实现富文本编辑器功能",4578,1528,"2025-02-26 16:04:58",{"id":121,"uuid":122,"project_id":6,"title":123,"type":9,"status":10,"public_enabled":10,"views":124,"sort":125,"created_at":126,"updated_at":14,"project_title":15,"project_slug":16},1282,"tZ8iDql5","15. Springboot3+Vue3实现模块之间的关联",4454,1529,"2025-02-26 18:28:55",{"id":128,"uuid":129,"project_id":6,"title":130,"type":9,"status":10,"public_enabled":10,"views":131,"sort":132,"created_at":133,"updated_at":14,"project_title":15,"project_slug":16},1283,"gb01JPC2","16. Springboot3+Vue3实现echarts数据统计",4307,1530,"2025-03-03 16:58:21",{"id":135,"uuid":136,"project_id":6,"title":137,"type":9,"status":10,"public_enabled":10,"views":138,"sort":139,"created_at":140,"updated_at":14,"project_title":15,"project_slug":16},1284,"59bDkSFf","17. Springboot3+Vue3实现提交审核业务功能",3793,1531,"2025-03-04 11:58:16",{"id":142,"uuid":143,"project_id":6,"title":144,"type":9,"status":10,"public_enabled":10,"views":145,"sort":146,"created_at":147,"updated_at":14,"project_title":15,"project_slug":16},1285,"gApyb58X","18. Springboot3+Vue3实现预约审核业务功能",3332,1532,"2025-03-05 20:07:24",{"id":149,"uuid":150,"project_id":6,"title":151,"type":9,"status":10,"public_enabled":10,"views":152,"sort":153,"created_at":154,"updated_at":14,"project_title":15,"project_slug":16},1286,"XfpY5re0","19. Springboot3+Vue3实现前台首页的设计",3508,1533,"2025-03-05 20:08:12",{"id":156,"uuid":157,"project_id":6,"title":158,"type":9,"status":10,"public_enabled":10,"views":159,"sort":160,"created_at":161,"updated_at":14,"project_title":15,"project_slug":16},1287,"BnSPRBOc","20. Springboot3+Vue3实现前台轮播图和详情页的设计",4062,1534,"2025-03-17 17:13:36"]