1.properties文件写入数据库连接

spring.datasource.username=root
spring.datasource.password=
spring.datasource.url=jdbc:mysql://localhost:3306/t2?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

2.创建实体类

@Data   //lombok插件--代表生成getset方法
@TableName(value = "user")  //指定对应的数据库
public class User {
    //@TableField注解表示如果数据库列名和实体类属性名字不一样的话需要指定
    //@TableName注解表示如果数据库名字和实体类名字不一样的话需要指定
    // @TableId指定主键生成策略AUTO自动增长
    @TableId(type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    @TableField("name")
    private String name;
    @TableField("score")
    private Integer score;
    @TableField("sex")
    private int sex;
    @TableField("date")
    private String date;
    @Version    //代表这是一个乐观锁
    private Integer version;
   // @TableLogic     //逻辑删除注解
    private int del;
    @TableField("password")
    private String password;
    @TableField("prems")
    private String prems;
}

3.创建一个mapper包创建一个UserMapper接口---继承BaseMapper<User>里面有很多自带的增删改查方法

//BaseMapper<User> User对应你要使用的实体类
public interface UserMapper extends BaseMapper<User> {
}

 

4.在控制器中把接口导入过来

 

@RunWith(SpringRunner.class)
@Controller
class UserController{
    @Resource     //表示该bean交由spring容器来管理,一般情况下会将resource写在类或者接口的实现类上---和@Autwrie注解作用相似
    private UserMapper userMapper;     //接口--继承了BaseMapper<>
}

 

5.方法的使用---根据id查询

public String contextLoads(int id) {//根据id查询
        //自带的查询方法
        User user=userMapper.selectById(id);    //接口点方法,这些方法自带的,返回一个实体类    
       return "index"
    }

 

6.复杂查询的使用

 public void contextLoads2() {//条件查询
        //查询专用QueryWrapper-----增删改专用UpdateWrapper
        //User是你要查询的实体类
        QueryWrapper<User> wrapper=new QueryWrapper<User>();
        //第一个参数字段名,后面的字段是属性---还可以设置多个条件,具体可以参考MyBatis-Plus官方文档
        wrapper.eq("name","曹雨")
                .like("password","%2%");
        List<User>list=userMapper.selectList(wrapper);
        System.out.println(list.size());
    }    

 

7.修改的使用

    //修改
    void Update(){
        User user=new User();
        user.setId(47);  //根据这个id进行修改
        user.setName("曹某");  //修改的内容
        int i=userMapper.updateById(user);  //自带的方法
        System.out.println(i+"...................");
    }

 

8.乐观锁的使用,防止多线程增删改时数据被覆盖

    8.1.创建一个config包里面创建一个配置类

@EnableTransactionManagement    //开启事务
@MapperScan("com.li.mapper")     //扫描Mapper的包
@Configuration      //代表这是一个配置类
public class MyBatisPlusConfig {
    //注册乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor(){
        return new OptimisticLockerInterceptor();
    }

    8.2.成功的乐观锁

 //测试成功乐观锁
   public void testOpen(){
        //查询用户
        User user = userMapper.selectById(47);
        //修改用户
        user.setName("李某");
        user.setScore(8888);
        //执行更新操作
        int i=userMapper.updateById(user);
        System.out.println(".............."+i);
    }

 8.2.失败的乐观锁

//测试失败乐观锁  多线程下
  public  void testOpen1(){
        //线程1
        User user = userMapper.selectById(47);
        user.setName("李某9");
        user.setScore(8888);

        //模拟线程2
        User user1 = userMapper.selectById(47);
        user1.setName("李某2");
        user1.setScore(8888);
        userMapper.updateById(user);

        //自旋锁多次尝试提交
        userMapper.updateById(user1);   //没有没有乐观锁就会覆盖插队线程的值

    }

9.分页查询---在config配置类里面增加下面的代码

@EnableTransactionManagement    //开启事务
//@MapperScan("com.li.mapper")     //扫描Mapper的包
@Configuration      //代表这是一个配置类
public class MyBatisPlusConfig {
    //分页
    @Bean   //交给spring托管
    public PaginationInnerInterceptor paginationInnerInterceptor(){
        return new PaginationInnerInterceptor();
    }

  9.1.在控制器中写以下代码

 public void fy(){
        //user是你的实体类
        QueryWrapper<User>wrapper=new QueryWrapper<User>();
        wrapper.eq("score",99); //查询条件---可以设置多个条件
        //分页对象:查询获得分数为99的用户,查看第一页数据,每页显示2条记录
        Page<User>page=new Page<>(1,2);
        //需要两个参数,page第一个分页规格,wrapper是查询出来的内容
        IPage<User> userAdminPage=userMapper.selectPage(page,wrapper);
        System.out.println("总记录"+userAdminPage.getTotal());
        System.out.println("总页数"+userAdminPage.getPages());
        System.out.println("当前页数"+userAdminPage.getCurrent());
        System.out.println("每页记录数"+userAdminPage.getSize());

        for(User userAdmin:userAdminPage.getRecords()){    //获得查询的记录
            System.out.println("分数"+userAdmin.getScore());
        }
    }

 

10.配置文件中配置以下log4j可以在控制台打印SQL语句

logging.level.root=warn
logging.level.com.li.mapper=trace
logging.pattern.console=%p%m%n

11.所需要的依赖

 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>