Mybatis4-MybatisPlus

mybatisPlus就是mybatis的一个增强工具,在不影响原mybatis功能的情况下,提供更多高效的功能来帮助使用mybatis。

一:使用

springboot+mybatis:

创建springboot工程,导入依赖:

pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--简化代码的⼯具包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--mybatis-plus的springboot⽀持-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>
</dependencies>
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
</build>
application.properties
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mp?
useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL
=false
spring.datasource.username=root
spring.datasource.password=root
pojo
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
     private Long id;
     private String name;
     private Integer age;
     private String email; 
}
mapper
之前介绍过,mybatis中有个mapper插件,这里使用mybatis-plus后,使用BaseMapper即可。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lagou.pojo.User;


public interface UserMapper extends BaseMapper<User> {
}

启动类

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.lagou.mp.mapper") 
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

 测试类

import com.lagou.mp.mapper.UserMapper;
import com.lagou.mp.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
 @Autowired
 private UserMapper userMapper;
 @Test
 public void testSelect() {
     List<User> userList = userMapper.selectList(null);
     for (User user : userList) {
         System.out.println(user);
       }
   }
}

 BaseMapper有很多基本方法:

二:常用属性

1、configLocation 和 mapperLocations 

这个时候,如果要自定义全局配置文件或者mapper.xml,应该放哪里

全局:

mybatis-plus.config-location = classpath : mybatis-config.xml

mapper.xml两种常用方式:

1、在resources创建Mapper接口同名文件夹用来存放Mapper.xml文件,比如:

2、resources下随便定义,在配置文件中配置:

然后在application.properties中: 

第二种配置:

mybatis-plus.mapper-locations = classpath*:mapper/*.xml

2、 typeAliasesPackage

在mapper.xml中就只需写实体的类名,如User

mybatis-plus.type-aliases-package = com.lagou.mp.pojo

3、mapUnderscoreToCamelCase

是否开启驼峰命名映射,默认true,db中就会以下划线分割。

该参数不能和 mybatis-plus.config-location 同时存在
mybatis-plus.configuration.map-underscore-to-camel-case = false

4、cacheEnabled

是否开启二级缓存

mybatis-plus.configuration.cache-enabled=false 

注意,true的时候还需要在mapper.xml中开启

<cache></cache> 

5、idType

全局默认主键类型,设置后,即可省略实体对象中的@TableId(type = IdType.AUTO)配置 

mybatis-plus.global-config.db-config.id-type=auto 

6、tablePrefix

表名前缀,全局配置后可省略@TableName()配置 

mybatis-plus.global-config.db-config.table-prefix=tb_ 

三:常用工具

1、条件构造器Wrapper,用户构建增删改查的条件。

接下来看一下 AbstractWrapper 以及其⼦类的用法:

@Test
    public void testWrapper() {
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //设置条件
        Map<String, Object> params = new HashMap<>();
        params.put("name", "jack");
        params.put("age", "20");
        // wrapper.allEq(params);       //SELECT * FROM tb_user WHERE password IS NULL AND name = ?AND age = ?
        // wrapper.allEq(params,false);   //SELECT * FROM tb_user WHERE name = ? AND age =?
        // wrapper.allEq((k, v) -> (k.equals("name") || k.equals("age")),params);   //SELECT * FROM tb_user WHERE name = ? AND age = ?
        //wrapper.eq("email", "[email protected]").ge("age", 20) .in("name", "jack", "jone", "tom");//SELECT * FROM tb_user WHERE email = ? AND age >= ? AND name IN (?,?,?)

        //wrapper.like("name", "⼦");
        //SELECT id,user_name,password,name,age,email FROM tb_user WHERE name LIKE ?
        //Parameters: %⼦%(String)

        //wrapper.orderByDesc("age");
        //wrapper.eq("name","jack").or().eq("age", 24);

        //指定查询字段:SELECT id,name,age FROM tb_user WHERE name = ? OR age = ?
        // wrapper.eq("name", "jack").or().eq("age", 24).select("id", "name", "age");

        List<User> users = this.userMapper.selectList(wrapper);
        for (User user : users) {
            System.out.println(user);
        }
    }

 2、自定义Sql注入器:

定义MyBaseMapper扩展BaseMapper的方法。

MyBaseMapper:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
public interface MyBaseMapper<T> extends BaseMapper<T> {
    List<T> findAll();
}
UserMapper可以继承并使用:
import com.mp.pojo.User;
public interface UserMapper extends MyBaseMapper<User> {
 User findById(Long id);
}

如何实现新定义的findAll方法呢(既然是公用的,不可能去每个业务mapper.xml中写吧)

编写FindAll类:

import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;
public class FindAll extends AbstractMethod {
    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?>
            modelClass, TableInfo tableInfo) {
        String sqlMethod = "findAll";
        String sql = "select * from " + tableInfo.getTableName();
        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql,
                modelClass);
        return this.addSelectMappedStatement(mapperClass, sqlMethod, sqlSource,
                modelClass, tableInfo);
    }
}

扩展DefaultSqlInjector:

MySqlInjector
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import java.util.List;
public class MySqlInjector extends DefaultSqlInjector {
    @Override
    public List<AbstractMethod> getMethodList() {
        List<AbstractMethod> methodList = super.getMethodList();
        methodList.add(new FindAll());

        // 再扩充⾃定义的⽅法
        list.add(new FindAll());
        return methodList;
    }
}

注册到spring容器:

@Bean
public MySqlInjector mySqlInjector(){
 return new MySqlInjector();
}

猜你喜欢

转载自blog.csdn.net/growing_duck/article/details/124871733