1,编写项目,初始化依赖,使用Spring boot初始化
2,导入依赖
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
3,连接数据库
#mysql5驱动不同com.mysql.jdbc.Driver
#mysql8驱动不同com.mysql.cj.jdbc.Driver需要增加时区配置serverTimezone=GMT%2B8
#高版本兼容低版本
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
4.传统pojo-dao(连接mybatis,配置mapper.xml文件)-service-controller
4,使用mybatisplus之后
Pojo:
@Data
@AllArgsConstructor
@NoArgsConstructor
publicclassUser{
privateLongid;
privateStringname;
privateIntegerage;
privateStringemail;
}
mapper接口
//在对应的Mapper上面继承基本类BaseMapper
@Repository//代表持久层
publicinterfaceUserMapperextendsBaseMapper<User>{
}
注意点:我们需要在主启动类上去扫描mapper包下的所有接口
@MapperScan("com.wyy.mapper")//扫描mapper包下的所有接口
测试类中测试
@Autowired
privateUserMapperuserMapper;
@Test
voidcontextLoads(){
//查询全部
List<User>users=userMapper.selectList(null);
users.forEach(System.out::println);
}
5.配置日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
作用:能在控制台查看执行步骤,
6.insert插入
@Test
voidtsetinsert(){
//新增
Useruser=newUser();
user.setName("wyy");
user.setAge(18);
user.setEmail("123321123");
intinsert=userMapper.insert(user);
System.out.println("insert="+insert);
System.out.println("user="+user);//会自动生成id
}
id会自动生成
数据可插入的id默认值:全局唯一id
主键生成策略:
https://cloud.tencent.com/developer/article/1165714
Twitter的snowflake算法
snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。
主键自增
1在实体类字段上 @TableId(type=IdType.AUTO)
2,数据库字段必须也是自增
3,插入数据就行了
7,更新操作
//修改
@Test
voidtestUpdate(){
Useruser=newUser();
user.setId(5L);
user.setName("wyy123");
user.setAge(123);
userMapper.updateById(user);
}
所有的sql都是帮你动态配置的!!!!!!!!!
8.自动填充
1,数据库字段没有设置默认值,更新操作
2,字段实体类属性上需要增加注解:
3.便似处理器来处理这个注解
4,测试插入
5,测试时间,查看更新时间即可
9.乐观锁
1乐观锁:十分乐观,它总是认为不会出现问题,无论干什么都不会去上锁,出现问题,再次更新值测试
2,悲观锁:十分悲观,他总是认为会出现问题,无论干什么都会去上锁,再去操作
测试MyBatisPlus乐观锁:\
1,给数据库加上version字段默认值1
2,实体类加上对应注解
3,注册组件
4,测试
10,查询操作
11,分页查询
1,配置拦截器组件
2,直接使用Page对象
11,删除操作
12,逻辑删除
物理删除:从数据库中直接移除
逻辑删除:在数据库中没有被移除,通过一个变量来让它失效,deleted=0 ==> deleted=1
管理员可查看到数据记录,类之于回收站,防止数据丢失
测试:
1,在数据库中添加一个字段,默认值为0!!!!
2,在实体类中增加属性,逻辑删除注解
3,配置
4,测试
13,性能分析插件
作用:性能分析拦截器,用于输出每条sql语句以及执行时间
1,导入插件
//性能分析插件
@Bean
@Profile({"dev","test"})//设置devtest环境开启
publicPerformanceInterceptorperformanceInterceptor(){
PerformanceInterceptorperformanceInterceptor=newPerformanceInterceptor();
performanceInterceptor.setMaxTime(100);//设置sql最大执行时间,超过不执行,,,,,毫秒值
performanceInterceptor.setFormat(true);//是否格式化代码
returnperformanceInterceptor;
}
要在spring boot中配置环境为dev或者test环境
2,测试使用
@Test
publicvoidcontextLoads(){
//查询全部
List<User>users=userMapper.selectList(null);
users.forEach(System.out::println);
}
14,条件构造器
测试一:
@Test
publicvoidtest2(){
//查询name,enail不为空的,且age大于等于12的
QueryWrapper<User>wrapper=newQueryWrapper();
wrapper.isNotNull("name")
.isNotNull("email")
.ge("age",12);
userMapper.selectList(wrapper).forEach(System.out::println);
}
测试二:
@Test
publicvoidtest2(){
//查询name,Tom的
QueryWrapper<User>wrapper=newQueryWrapper();
wrapper.eq("name","Tom");
userMapper.selectOne(wrapper);
}
测试三:
@Test
publicvoidtest3(){
//查询年龄在20~30之间的
QueryWrapper<User>wrapper=newQueryWrapper();
wrapper.between("age",20,30);
Integerinteger=userMapper.selectCount(wrapper);
System.out.println("integer="+integer);
}
测试四:
@Test
publicvoidtest4(){
//查询name中不包含e的,且email以t开头的
QueryWrapper<User>wrapper=newQueryWrapper();
wrapper.notLike("name","y")
.likeRight("email","t");
List<Map<String,Object>>maps=userMapper.selectMaps(wrapper);
maps.forEach(System.out::println);
}
测试五:
@Test
publicvoidtest5(){
//id在子查询中查出来
QueryWrapper<User>wrapper=newQueryWrapper();
wrapper.inSql("id","selectidfromuserwhereid>3");
List<Object>objects=userMapper.selectObjs(wrapper);
objects.forEach(System.out::println);
}
测试六:
@Test
publicvoidtest6(){
//根据id降序排列
QueryWrapper<User>wrapper=newQueryWrapper();
wrapper.orderByDesc("id");
List<User>users=userMapper.selectList(wrapper);
users.forEach(System.out::println);
}