目录
内容介绍
1 尚医通项目介绍 2业务流程 3系统架构 4 MyBatisPlus学习 |
尚医通项目介绍
1、是什么、为什么 尚医通即为网上预约挂号系统,网上预约挂号是近年来开展的一项便民就医服务,旨在缓解看病难、挂号难的就医难题,许多患者为看一次病要跑很多次医院,最终还不一定能保证看得上医生。网上预约挂号全面提供的预约挂号业务从根本上解决了这一就医难题。随时随地轻松挂号!不用排长队! |
业务流程
系统架构
1、考虑因素 性能、可扩展性、高可用、安全性、成本 |
MyBatisPlus简介
1、是什么 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 官网:Redirect 2、为什么 见课件 |
MyBatisPlus入门
1、准备数据库表 2、创建工程 (1)使用 Spring Initializr 快速初始化一个 Spring Boot 工程 (2)修改版本,添加依赖 <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--lombok用来简化实体类-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies> (3)添加配置信息 # 应用名称
spring.application.name=mybatisplus
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123123 3、实现功能 (1)给启动类添加注解 (2)创建实体 创建包 entity 编写实体类 @Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
} (3)创建mapper @Repository public interface UserMapper extends BaseMapper<User> {
} (4)创建测试案例
@Autowired
private UserMapper userMapper;
@Test
public void findAll(){
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
} |
MP配置日志输出
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl |
MP添加信息+主键策略
1、添加信息 @Test
public void addUser(){
User user = new User();
user.setName("zhang3");
user.setAge(33);
user.setEmail("[email protected]");
int insert = userMapper.insert(user);
System.out.println("insert = " + insert);
} 2、主键策略 |
MP修改数据
@Test
public void updateUser(){
User user = new User();
user.setId(1677521904694546433L);
user.setName("zhang3upup");
int update = userMapper.updateById(user);
System.out.println("update = " + update);
} |
MP实现自动填充
1、修改表增加两个字段 在User表中添加datetime类型的新的字段 create_time、update_time 2、修改实体增加属性 3、给实体的属性添加注解(什么时候填充) @TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime; 4、添加控制器(填充什么) @Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
} 5、测试 *新增 |
乐观锁
1、乐观锁 2、实现乐观锁 (1)添加表字段、修改实体 ALTER TABLE `user` ADD COLUMN `version` INT private Integer version; (2)配置自动填充 (3)给属性添加乐观锁注解 (4)添加配置类,添加插件 @EnableTransactionManagement
@Configuration
@MapperScan("com.atguigu.mybatisplus.mapper")
public class MybatisPlusConfig {
/**
* 乐观锁插件
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
} (5)测试 @Test
public void updateUser(){
User user =userMapper.selectById(1677577776967778306L);
user.setName("wang5");
int update = userMapper.updateById(user);
System.out.println("update = " + update);
} |
MP实现基本查询
1、根据id查询数据 User user =userMapper.selectById(1677577776967778306L); 2、根据id集合查询数据 @Test
public void getUserByIds(){
List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
users.forEach(System.out::println);
} 3、根据多个条件查询 @Test
public void getUserByInfo(){
Map<String,Object> map = new HashMap<>();
map.put("name", "zhang3upup");
map.put("age", 33);
List<User> users = userMapper.selectByMap(map);
users.forEach(System.out::println);
} 4、分页查询 (1)添加分页插件 /**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
} (2)分页查询 @Test
public void getUserByPage(){
Page<User> page = new Page<>(1,2);
//方式一
// Page<User> userPage = userMapper.selectPage(page, null);
//方式二
userMapper.selectPage(page, null);
page.getRecords().forEach(System.out::println);
System.out.println(page.getCurrent());
System.out.println(page.getPages());
System.out.println(page.getSize());
System.out.println(page.getTotal());
System.out.println(page.hasNext());
System.out.println(page.hasPrevious());
} |
MP实现删除数据
1、根据id删除 @Test
public void delUserById(){
int delete = userMapper.deleteById(1677521904694546433L);
System.out.println("delete = " + delete);
} 2、根据ids批量删除 @Test
public void delUserByIds(){
int delete = userMapper.deleteBatchIds(Arrays.asList(
1677565142663000065L,
1677577776967778306L
));
System.out.println("delete = " + delete);
} 3、逻辑删除
(1)修改表字段、实体添加属性 ALTER TABLE `user` ADD COLUMN `deleted` boolean private Integer deleted; (2)实现自动填充 (3)添加注解标注逻辑删除 (4)添加配置(符合如下默认规则,可以不加配置) mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0 (5)测试 *删除 *查询 |
MP实现条件查询
1、wrapper 条件查询构造器 2、常用方法 //1 eq、ne
//2ge、gt、le、lt
//3between
//4like
//5orderByDesc
//6select 3、测试 @Test
public void getUserByWrapper(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
//1 eq、ne
//wrapper.eq("name","zhang3");
//2ge、gt、le、lt
//wrapper.ge("age",33);
//3between
//wrapper.between("age",33,55);
//4like
//wrapper.like("name","J");
//5orderByDesc
wrapper.orderByDesc("age");
//6select
wrapper.select("name","age");
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
} |