package com.example.Demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.Demo.mapper")
public class MybatisPlusStudyApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisPlusStudyApplication.class, args);
}
}
package com.example.Demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.Demo.pojo.User;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper extends BaseMapper<User> {
}
package com.example.Demo.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
package com.example.Demo;
import com.example.Demo.mapper.UserMapper;
import com.example.Demo.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class MybatisPlusStudyApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void contextLoads() {
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}
}
server.port=7099
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=root
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus.global-config.db-config.id-type=auto
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
public enum IdType {
AUTO(0),//数据库ID自增
NONE(1),//该类型为未设置主键类型
INPUT(2),//用户输入ID
//该类型可以通过自己注册自动填充插件进行填充
//以下3种类型、只有当插入对象ID 为空,才自动填充。
ID_WORKER(3),//全局唯一ID (idWorker)
UUID(4),//全局唯一ID (UUID)
ID_WORKER_STR(5);//字符串全局唯一ID (idWorker 的字符串表示)
package com.example.Demo;
import com.example.Demo.mapper.UserMapper;
import com.example.Demo.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class MybatisPlusStudyApplicationTests {
@Autowired
private UserMapper userMapper;
/**
* 查询测试
*/
@Test
void contextLoads() {
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}
/**
* 测试插入
*/
@Test
public void testInstert(){
User user = new User();
user.setName("邓家佳");
user.setEmail("2534625115@qq.com");
user.setAge(3);
int result = userMapper.insert(user);
System.out.println(result);
System.out.println(user);
}
/**
* 测试更新
*/
@Test
public void TestUpdate(){
User user = new User();
user.setId(9L);
user.setName("范涛之");
int i = userMapper.updateById(user);
System.out.println(i);
}
}
package com.example.Demo.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.omg.CORBA.IDLType;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
/**
* 第一个注解:逐渐自增
*/
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
/**
* 第二个注解:自动插入数据
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
package com.example.Demo.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* 时间自动填充处理器
*/
@Slf4j
@Component
public class MyDataHandler implements MetaObjectHandler {
// 插入时的填充策略
@Override
public void insertFill(MetaObject metaObject) {
log.info("开始执行插入.........");
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
// 更新时的填充策略
@Override
public void updateFill(MetaObject metaObject) {
log.info("开始执行更新.........");
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
// 注册乐观锁插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
/**
* 测试乐观锁失败:多线程
*/
@Test
public void TestClocker2() {
// 线程一:
//查询用户信息
User user = userMapper.selectById(5L);
user.setName("kuangshen111");
user.setEmail("124621515@qq.com");
// 线程二:模拟另外一个用户执行插队操作
User user2 = userMapper.selectById(5L);
user2.setName("kuangshen222");
user2.setEmail("124621515@qq.com");
// 自旋锁尝试多次提交
userMapper.updateById(user2); //如果没有乐观锁就回覆盖插队线程的值
}
/**
* 查询测试
*/
@Test
public void TestSelect(){
List<User> users = userMapper.selectBatchIds(Arrays.asList(5, 6, 7));
users.forEach(System.out::println);
}
/**
* 条件查询
*/
@Test
public void testTJ(){
HashMap<String, Object> map = new HashMap<>();
// 自定义查询
map.put("name","邓家佳");
List<User> users = userMapper.selectByMap(map);
users.forEach(System.out::println);
}
// 分页插件
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
return paginationInterceptor;
}
/**
* 分页查询
*/
@Test
public void TestPage(){
// 参数一:当前页 参数二:页面大小
Page<User> page = new Page<>(1,4);
userMapper.selectPage(page,null);
page.getRecords().forEach(System.out::println);
}
/**
* 删除操作:
*/
@Test
public void testDeleteById(){
userMapper.deleteById(12L);
}
/**
* 批量删除通过id
*/
public void testDeleteByBatchId(){
userMapper.deleteBatchIds(Arrays.asList(5L,8L,9L));
}
/**
* 条件删除
*/
*/
public void testDeleteByMap(){
HashMap<String, Object> map = new HashMap<>();
map.put("name","哈哈哈");
userMapper.deleteByMap(map);
}
/**
* 逻辑删除
*/
@TableLogic
private Integer deleted;
// 逻辑删除组件
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
# 配置逻辑删除
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
/**
* SQL 执行性能分析插件
* 开发环境使用,线上不推荐。 maxTime 指的是 sql 最大执行时长
*/
@Bean
@Profile({"dev","test"})// 设置 dev test 环境开启
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(100);//ms,超过此处设置的ms则sql不执行
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}
spring.profiles.active=dev
package com.example.Demo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.Demo.mapper.UserMapper;
import com.example.Demo.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
import java.util.Map;
@SpringBootTest
public class WrapperTest {
@Autowired
private UserMapper userMapper;
/**
* 测试一:查询name不为空并且邮箱不为空的用户 ,同时年龄大于等于12岁
*/
@Test
void TestWr(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNotNull("name")
.isNotNull("email")
.ge("age",12);
userMapper.selectList(wrapper).forEach(System.out::println); //和我们学习的map对比一下
}
/**
* 测试二:名字等于范涛之的
*/
@Test
void test2(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name","范涛之");
User user = userMapper.selectOne(wrapper);
System.out.println(user);
}
/**
* 测试三:查询年龄在20-30岁之间的用户
*/
@Test
void test3(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.between("age",20,30);
Integer count = userMapper.selectCount(wrapper);//查询结果数
System.out.println(count);
}
/**
* 测试四:模糊查询:名字里面不包含范的
*/
@Test
void test4(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
// 左和右:百分号在哪边 这个就相当于:t%也就是t开头
wrapper.notLike("name","范")
.likeRight("email","t");
List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
maps.forEach(System.out::println);
}
/**
* 测试五:子查询
*/
@Test
void test5(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
// id在子查询中查出来
wrapper.inSql("id","select id from user where id<3");
List<Object> objects = userMapper.selectObjs(wrapper);
objects.forEach(System.out::println);
}
/**
* 测试六:排序:通过id进行排序
*/
@Test
void test6(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
// id在子查询中查出来
wrapper.orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/justleavel/article/details/122749196
内容来源于网络,如有侵权,请联系作者删除!