网站可以分为哪些类型,上海建设部门网站,管理系统门户网站开发路线,福建百度推广开户一、基础介绍
1.1 MyBatis
MyBatis 是一款优秀的持久层框架#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息#xff0c;将接口和 Java 的 P…
一、基础介绍
1.1 MyBatis
MyBatis 是一款优秀的持久层框架它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息将接口和 Java 的 POJOPlain Old Java Objects映射成数据库中的记录。
1.2 Spring Boot 集成 MyBatis 的优势
将 Spring Boot 和 MyBatis 集成能够充分发挥 Spring Boot 的快速开发特性和 MyBatis 灵活的数据库操作能力。通过这种集成可以快速搭建一个稳定、高效的数据库访问层简化开发流程提高开发效率。
二、集成步骤
2.1 创建 Spring Boot 项目
可以使用 Spring Initializrhttps://start.spring.io/来快速创建一个 Spring Boot 项目。在创建项目时需要选择以下依赖
Spring WebSpring Data JPAMySQL DriverMyBatis Framework
2.2 配置数据源
在 application.properties 文件中配置数据库连接信息
spring.datasource.urljdbc:mysql://localhost:3306/yourdatabase
spring.datasource.usernameyourusername
spring.datasource.passwordyourpassword
spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver2.3 配置 MyBatis
在 application.properties 文件中配置 MyBatis 的相关属性
mybatis.mapper-locationsclasspath:/mapper/*.xml
mybatis.type-aliases-packagecom.example.demo.entitymybatis.mapper-locations 配置 MyBatis 映射文件的位置mybatis.type-aliases-package 配置实体类的包名这样在 MyBatis 映射文件中就可以直接使用实体类名而无需写全限定名。
2.4 创建实体类
创建一个 Java 实体类用于映射数据库表中的记录。例如创建一个 User 实体类
package com.example.demo.entity;public class User {private Long id;private String username;private String password;// 省略 getters 和 setters
}2.5 创建 Mapper 接口
创建一个 Mapper 接口用于定义数据库操作方法。例如创建一个 UserMapper 接口
package com.example.demo.mapper;import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;Mapper
public interface UserMapper {Select(SELECT * FROM user)ListUser findAll();
}Mapper 注解用于将该接口标记为 MyBatis 的 Mapper 接口。
2.6 创建 Mapper 映射文件
在 resources/mapper 目录下创建一个 UserMapper.xml 文件用于实现 Mapper 接口中的方法
?xml version1.0 encodingUTF-8?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.example.demo.mapper.UserMapperselect idfindAll resultTypecom.example.demo.entity.UserSELECT * FROM user/select
/mappernamespace 属性指定 Mapper 接口的全限定名id 属性指定要实现的方法名resultType 属性指定返回结果的类型。
2.7 创建 Service 层
创建一个 Service 层用于调用 Mapper 接口中的方法。例如创建一个 UserService 接口和其实现类 UserServiceImpl
package com.example.demo.service;import com.example.demo.entity.User;import java.util.List;public interface UserService {ListUser findAll();
}package com.example.demo.service.impl;import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;Service
public class UserServiceImpl implements UserService {Autowiredprivate UserMapper userMapper;Overridepublic ListUser findAll() {return userMapper.findAll();}
}2.8 创建 Controller 层
创建一个 Controller 层用于处理客户端请求。例如创建一个 UserController
package com.example.demo.controller;import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;RestController
RequestMapping(/users)
public class UserController {Autowiredprivate UserService userService;GetMappingpublic ListUser findAll() {return userService.findAll();}
}三、示例完整代码
1. 创建 application.yml
在 src/main/resources 目录下创建 application.yml 文件。
2. 配置数据源和 MyBatis
将原本 application.properties 中的配置内容转换为 YAML 格式如下
spring:datasource:url: jdbc:mysql://localhost:3306/yourdatabaseusername: yourusernamepassword: yourpassworddriver-class-name: com.mysql.cj.jdbc.Driver
mybatis:mapper-locations: classpath:/mapper/*.xmltype-aliases-package: com.example.demo.entity说明
在 YAML 中使用缩进表示层级关系。例如spring 和 mybatis 是顶级配置项datasource 是 spring 的子配置项url、username、password 和 driver-class-name 是 datasource 的子配置项。冒号后面需要跟一个空格然后再写具体的值。
完整项目示例
以下是基于上述 application.yml 配置的完整项目示例包括之前提到的各个部分
项目结构
src
├── main
│ ├── java
│ │ ├── com
│ │ │ ├── example
│ │ │ │ ├── demo
│ │ │ │ │ ├── controller
│ │ │ │ │ │ └── UserController.java
│ │ │ │ │ ├── entity
│ │ │ │ │ │ └── User.java
│ │ │ │ │ ├── mapper
│ │ │ │ │ │ ├── UserMapper.java
│ │ │ │ │ │ └── UserMapper.xml
│ │ │ │ │ ├── service
│ │ │ │ │ │ ├── UserService.java
│ │ │ │ │ │ └── impl
│ │ │ │ │ │ └── UserServiceImpl.java
│ │ │ │ │ └── DemoApplication.java
│ └── resources
│ ├── application.yml
│ └── mapper
│ └── UserMapper.xml
└── test└── java└── com└── example└── demo└── DemoApplicationTests.java依赖配置pom.xml
dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.mybatis.spring/groupIdartifactIdmybatis-spring/artifactIdversion2.0.6/version/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.9/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency
/dependencies实体类User.java
package com.example.demo.entity;public class User {private Long id;private String username;private String password;// 构造函数public User() {}public User(String username, String password) {this.username username;this.password password;}// getters 和 setterspublic Long getId() {return id;}public void setId(Long id) {this.id id;}public String getUsername() {return username;}public void setUsername(String username) {this.username username;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;}
}Mapper 接口UserMapper.java
package com.example.demo.mapper;import com.example.demo.entity.User;
import org.apache.ibatis.annotations.*;import java.util.List;Mapper
public interface UserMapper {Select(SELECT * FROM user)ListUser findAll();Select(SELECT * FROM user WHERE id #{id})User findById(Long id);Insert(INSERT INTO user (username, password) VALUES (#{username}, #{password}))Options(useGeneratedKeys true, keyProperty id)void save(User user);Update(UPDATE user SET username #{username}, password #{password} WHERE id #{id})void update(User user);Delete(DELETE FROM user WHERE id #{id})void delete(Long id);
}Mapper 映射文件UserMapper.xml
?xml version1.0 encodingUTF-8?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.example.demo.mapper.UserMapperselect idfindAll resultTypecom.example.demo.entity.UserSELECT * FROM user/selectselect idfindById resultTypecom.example.demo.entity.UserSELECT * FROM user WHERE id #{id}/selectinsert idsave keyPropertyid useGeneratedKeystrueINSERT INTO user (username, password) VALUES (#{username}, #{password})/insertupdate idupdateUPDATE user SET username #{username}, password #{password} WHERE id #{id}/updatedelete iddeleteDELETE FROM user WHERE id #{id}/delete
/mapperService 层
UserService.java
package com.example.demo.service;import com.example.demo.entity.User;import java.util.List;public interface UserService {ListUser findAll();User findById(Long id);void save(User user);void update(User user);void delete(Long id);
}UserServiceImpl.java
package com.example.demo.service.impl;import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;Service
public class UserServiceImpl implements UserService {Autowiredprivate UserMapper userMapper;Overridepublic ListUser findAll() {return userMapper.findAll();}Overridepublic User findById(Long id) {return userMapper.findById(id);}Overridepublic void save(User user) {userMapper.save(user);}Overridepublic void update(User user) {userMapper.update(user);}Overridepublic void delete(Long id) {userMapper.delete(id);}
}Controller 层UserController.java
package com.example.demo.controller;import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;import java.util.List;RestController
RequestMapping(/users)
public class UserController {Autowiredprivate UserService userService;GetMappingpublic ResponseEntityListUser findAll() {ListUser users userService.findAll();return new ResponseEntity(users, HttpStatus.OK);}GetMapping(/{id})public ResponseEntityUser findById(PathVariable Long id) {User user userService.findById(id);if (user! null) {return new ResponseEntity(user, HttpStatus.OK);} else {return new ResponseEntity(HttpStatus.NOT_FOUND);}}PostMappingpublic ResponseEntityVoid save(RequestBody User user) {userService.save(user);return new ResponseEntity(HttpStatus.CREATED);}PutMappingpublic ResponseEntityVoid update(RequestBody User user) {userService.update(user);return new ResponseEntity(HttpStatus.NO_CONTENT);}DeleteMapping(/{id})public ResponseEntityVoid delete(PathVariable Long id) {userService.delete(id);return new ResponseEntity(HttpStatus.NO_CONTENT);}
}测试DemoApplicationTests.java
package com.example.demo;import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import static org.junit.jupiter.api.Assertions.*;SpringBootTest
public class DemoApplicationTests {Autowiredprivate UserService userService;Testpublic void testFindAll() {assertEquals(0, userService.findAll().size());}Testpublic void testSaveAndFindById() {User user new User(testuser, testpassword);userService.save(user);assertNotNull(userService.findById(user.getId()));}Testpublic void testUpdate() {User user new User(testuser, testpassword);userService.save(user);user.setPassword(newpassword);userService.update(user);assertEquals(newpassword, userService.findById(user.getId()).getPassword());}Testpublic void testDelete() {User user new User(testuser, testpassword);userService.save(user);userService.delete(user.getId());assertNull(userService.findById(user.getId()));}
}通过上述配置和代码示例你可以在 Spring Boot 项目中使用 application.yml 配置文件来集成 MyBatis并实现完整的用户管理功能。