zoukankan      html  css  js  c++  java
  • mybatisplus 分页查询+ dao层抽象

    1.配置文件添加paginationInterceptor

    @Configuration
    @MapperScan("fama.cost.*.mapper")
    public class SpringConnectionFactory {
    	@Bean
        public MybatisPlusInterceptor paginationInterceptor() {
            MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
            interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
            return interceptor;
        }
    }	
    

    2.mapper

    mapper与正常配置一致

    3.编写测试用例

    @Test
        public void selectPage(){
            Page<RdsInstanceType> page = new Page<>(1,2);
            IPage<RdsInstanceType> page1 = rdsInstanceTypesMapper.selectPage(page, Wrappers.query());
            LOG.info("total : {}",page1.getTotal());
            LOG.info("pages : {}",page1.getPages());
            page1.getRecords().forEach(rdsInstanceType -> {
                LOG.info("instanceType : {}",JsonUtils.toJSONString(rdsInstanceType));
            });
    
        }
    

    Dao 层
    image

    4.doa层的pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>fama</artifactId>
            <groupId>fama.cost</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>fama-dao</artifactId>
    
        <profiles>
            <!-- 开发环境 -->
            <profile>
                <id>dev</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
                <properties>
                    <activeEnv>dev</activeEnv>
                    <mysql.url>jdbc:mysql://192.168.1.1:3358/fama?rewriteBatchedStatements=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;tinyInt1isBit=false&amp;useCompression=true&amp;autoReconnect=true&amp;defaultFetchSize=100</mysql.url>
                    <mysql.user>test</mysql.user>
                    <mysql.pass>test</mysql.pass>
                </properties>
            </profile>
            <profile>
                <id>prod</id>
                <properties>
                    <activeEnv>prod</activeEnv>
                    <mysql.url>jdbc:mysql://192.168.1.1:3358/fama?rewriteBatchedStatements=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;tinyInt1isBit=false&amp;useCompression=true&amp;autoReconnect=true&amp;defaultFetchSize=100</mysql.url>
                    <mysql.user>test</mysql.user>
                    <mysql.pass>test</mysql.pass>
                </properties>
            </profile>
        </profiles>
    
        <dependencies>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.ow2.asm</groupId>
                        <artifactId>asm</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-autoconfigure</artifactId>
                    </exclusion>
                    <exclusion>
                        <artifactId>log4j-api</artifactId>
                        <groupId>org.apache.logging.log4j</groupId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.logging.log4j</groupId>
                        <artifactId>log4j-to-slf4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.logging.log4j</groupId>
                        <artifactId>log4j-to-slf4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>fama.cost</groupId>
                <artifactId>fama-common</artifactId>
                <version>${project.version}</version>
            </dependency>
    
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
    
    <!--            <plugin>-->
    <!--                <groupId>org.springframework.boot</groupId>-->
    <!--                <artifactId>spring-boot-maven-plugin</artifactId>-->
    <!--                <configuration>-->
    <!--                    <mainClass>sigma.resource.sync.SigmaApplication</mainClass>-->
    <!--                    <layout>JAR</layout>-->
    <!--                </configuration>-->
    <!--                <executions>-->
    <!--                    <execution>-->
    <!--                        <goals>-->
    <!--                            <goal>repackage</goal>-->
    <!--                        </goals>-->
    <!--                    </execution>-->
    <!--                </executions>-->
    <!--            </plugin>-->
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                    <configuration>
                        <useDefaultDelimiters>true</useDefaultDelimiters><!--  这是重点-->
                    </configuration>
                    <executions>
                        <execution>
                            <id>copy-fatjar</id>
                            <phase>install</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${project.build.directory}/build</outputDirectory>
                                <resources>
                                    <resource>
                                        <directory>${project.build.directory}</directory>
                                        <include>${project.build.finalName}.${project.packaging}</include>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                        <execution>
                            <id>copy resource</id>
                            <phase>process-resources</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${basedir}/target/classes</outputDirectory>
                                <overwrite>true</overwrite>
                                <resources>
                                    <resource>
                                        <directory>${basedir}/src/main</directory>
                                        <includes>
                                            <include>*</include>
                                        </includes>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
    
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <configuration>
                        <filesets>
                            <fileset>
                                <directory>src/main/resources/public</directory>
                            </fileset>
                        </filesets>
                    </configuration>
                </plugin>
            </plugins>
    
            <resources>
                <resource>
                    <directory>${project.basedir}/src/main/resources</directory>
                    <filtering>true</filtering>
                </resource>
            </resources>
    
        </build>
    
    </project>
    

    5.datasource.properties

    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.url=@mysql.url@
    spring.datasource.username=@mysql.user@
    spring.datasource.password=@mysql.pass@
    spring.datasource.validationQuery=SELECT 1
    spring.datasource.idle.timeout=180000
    spring.datasource.maximumPoolSize=10
    spring.datasource.defaultAutoCommit=true
    spring.datasource.maxLifetime=1800000
    spring.datasource.connectionTimeout=30000
    

    6.mapper目录是fama.cost.dao.mapper,在resource目录下,xml文件

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="fama.cost.dao.mapper.CommandMapper">
    </mapper>
    

    7.dao层里的工厂

    package fama.cost.dao.datasource;
    
    import com.baomidou.mybatisplus.annotation.DbType;
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.core.MybatisConfiguration;
    import com.baomidou.mybatisplus.core.config.GlobalConfig;
    import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
    import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
    import com.zaxxer.hikari.HikariDataSource;
    import fama.cost.common.utils.Constants;
    import fama.cost.dao.utils.PropertyUtils;
    import org.apache.ibatis.logging.stdout.StdOutImpl;
    import org.apache.ibatis.mapping.DatabaseIdProvider;
    import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.type.JdbcType;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.core.io.support.ResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    
    import java.util.Properties;
    
    
    
    @Configuration
    @MapperScan("fama.cost.*.mapper")
    public class SpringConnectionFactory {
    
        private static final Logger logger = LoggerFactory.getLogger(SpringConnectionFactory.class);
    
        @Bean
        public MybatisPlusInterceptor paginationInterceptor() {
            MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
            interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
            return interceptor;
        }
    
        @Bean(destroyMethod="")
        public HikariDataSource dataSource() {
    
            HikariDataSource hikariDataSource = new HikariDataSource();
            
            hikariDataSource.setDriverClassName(PropertyUtils.getString(Constants.SPRING_DATASOURCE_DRIVER_CLASS_NAME));
            hikariDataSource.setJdbcUrl(PropertyUtils.getString(Constants.SPRING_DATASOURCE_URL));
            hikariDataSource.setUsername(PropertyUtils.getString(Constants.SPRING_DATASOURCE_USERNAME));
            hikariDataSource.setPassword(PropertyUtils.getString(Constants.SPRING_DATASOURCE_PASSWORD));
            hikariDataSource.setConnectionTestQuery(PropertyUtils.getString(Constants.SPRING_DATASOURCE_VALIDATION_QUERY,"SELECT 1"));
            hikariDataSource.setConnectionTimeout(PropertyUtils.getLong(Constants.SPRING_DATASOURCE_CONNECTION_TIMEOUT,30000));
            hikariDataSource.setMaximumPoolSize(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MAX_POOL_SIZE, 10));
            hikariDataSource.setIdleTimeout(PropertyUtils.getLong(Constants.SPRING_DATASOURCE_IDLE_TIMEOUT,180000));
            hikariDataSource.setAutoCommit(PropertyUtils.getBoolean(Constants.SPRING_DATASOURCE_DEFAULT_AUTO_COMMIT,true));
            hikariDataSource.setMaxLifetime(PropertyUtils.getLong(Constants.SPRING_DATASOURCE_MAX_LIFE_TIME,1800000));
            return hikariDataSource;
        }
    
        @Bean
        public DataSourceTransactionManager transactionManager() {
            return new DataSourceTransactionManager(dataSource());
        }
    
        @Bean
        public SqlSessionFactory sqlSessionFactory() throws Exception {
            MybatisConfiguration configuration = new MybatisConfiguration();
    //        configuration.setLogImpl(StdOutImpl.class);
            configuration.setMapUnderscoreToCamelCase(true);
            configuration.setCacheEnabled(false);
            configuration.setCallSettersOnNulls(true);
            configuration.setJdbcTypeForNull(JdbcType.NULL);
            configuration.addInterceptor(paginationInterceptor());
            MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
            sqlSessionFactoryBean.setConfiguration(configuration);
            sqlSessionFactoryBean.setDataSource(dataSource());
    
            GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();
            dbConfig.setIdType(IdType.AUTO);
            GlobalConfig globalConfig = new GlobalConfig();
            globalConfig.setDbConfig(dbConfig);
            sqlSessionFactoryBean.setGlobalConfig(globalConfig);
            sqlSessionFactoryBean.setTypeAliasesPackage("fama.cost.dao.entity");
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            sqlSessionFactoryBean.setMapperLocations(resolver.getResources("fama/cost/dao/mapper/*Mapper.xml"));
    //        sqlSessionFactoryBean.setTypeEnumsPackage("fama.cost.*.fama.cost.api.enums");
            sqlSessionFactoryBean.setTypeEnumsPackage("fama.cost.*.enums");
            sqlSessionFactoryBean.setDatabaseIdProvider(databaseIdProvider());
            return sqlSessionFactoryBean.getObject();
        }
    
        @Bean
        public SqlSession sqlSession() throws Exception{
            return new SqlSessionTemplate(sqlSessionFactory());
        }
    
        @Bean
        public DatabaseIdProvider databaseIdProvider(){
            DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
            Properties properties = new Properties();
            properties.setProperty("MySQL", "mysql");
            databaseIdProvider.setProperties(properties);
            return databaseIdProvider;
        }
    }
    
    

    8.entity 放db的实体类

    package fama.cost.dao.entity;
    
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.baomidou.mybatisplus.annotation.TableName;
    import fama.cost.common.enums.CommandType;
    
    import java.util.Date;
    
    @TableName(value = "fama_command")
    public class Command {
    
        @TableId(value = "id", type = IdType.AUTO)
        private Long id;
    
        private long orderId;
        private String commandParam;
        private Date applyTime;
        private Date scheduleTime;
        private String applyUser;
        private CommandType commandType;
    
        public long getOrderId() {
            return orderId;
        }
    
        public void setOrderId(long orderId) {
            this.orderId = orderId;
        }
    
        public String getCommandParam() {
            return commandParam;
        }
    
        public void setCommandParam(String commandParam) {
            this.commandParam = commandParam;
        }
    
        public Date getApplyTime() {
            return applyTime;
        }
    
        public void setApplyTime(Date applyTime) {
            this.applyTime = applyTime;
        }
    
        public Date getScheduleTime() {
            return scheduleTime;
        }
    
        public void setScheduleTime(Date scheduleTime) {
            this.scheduleTime = scheduleTime;
        }
    
        public String getApplyUser() {
            return applyUser;
        }
    
        public void setApplyUser(String applyUser) {
            this.applyUser = applyUser;
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public CommandType getCommandType() {
            return commandType;
        }
    
        public void setCommandType(CommandType commandType) {
            this.commandType = commandType;
        }
    }
    
    

    9.mapper目录就是放interface接口的

    package fama.cost.dao.mapper;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import fama.cost.dao.entity.Command;
    
    public interface CommandMapper extends BaseMapper<Command> {
    
    }
    
    

    10.utils里放BeanContext工具类及PropertyUtils工具类,用于加载datasoure.properties

    BeanContext.java

    package fama.cost.dao.utils;
    
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    @Component
    public class BeanContext implements ApplicationContextAware {
        private static ApplicationContext applicationContext;
    
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
        @SuppressWarnings("unchecked")
        public static <T> T getBean(String name) throws BeansException {
            return (T) applicationContext.getBean(name);
        }
    
        public static <T> T getBean(Class<T> clazz) throws BeansException {
            return applicationContext.getBean(clazz);
        }
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            BeanContext.applicationContext = applicationContext;
        }
    }
    

    PropertyUtils.java

    package fama.cost.dao.utils;
    
    
    import fama.cost.common.utils.Constants;
    import fama.cost.common.utils.IOUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    
    public class PropertyUtils {
    
        private static final Logger logger = LoggerFactory.getLogger(PropertyUtils.class);
    
        private static final Properties properties = new Properties();
    
        private static final PropertyUtils propertyUtils = new PropertyUtils();
    
        private PropertyUtils(){
            init();
        }
    
        private void init(){
            String[] propertyFiles = new String[]{Constants.DATASOURCE_PROPERTIES};
            for (String fileName : propertyFiles) {
                InputStream fis = null;
                try {
                    fis = PropertyUtils.class.getResourceAsStream(fileName);
                    properties.load(fis);
    
                } catch (IOException e) {
                    logger.error(e.getMessage(), e);
                    if (fis != null) {
                        IOUtils.closeQuietly(fis);
                    }
                    System.exit(1);
                } finally {
                    IOUtils.closeQuietly(fis);
                }
            }
        }
    
        public static String getString(String key) {
            return properties.getProperty(key);
        }
    
        public static String getString(String key, String defaultVal) {
            String val = properties.getProperty(key.trim());
            return val == null ? defaultVal : val;
        }
    
        public static int getInt(String key) {
            return getInt(key, -1);
        }
    
        public static int getInt(String key, int defaultValue) {
            String value = getString(key);
            if (value == null) {
                return defaultValue;
            }
    
            try {
                return Integer.parseInt(value);
            } catch (NumberFormatException e) {
                logger.info(e.getMessage(),e);
            }
            return defaultValue;
        }
    
        public static Boolean getBoolean(String key) {
            String value = properties.getProperty(key.trim());
            if(null != value){
                return Boolean.parseBoolean(value);
            }
    
            return false;
        }
    
        public static Boolean getBoolean(String key, boolean defaultValue) {
            String value = properties.getProperty(key.trim());
            if(null != value){
                return Boolean.parseBoolean(value);
            }
    
            return defaultValue;
        }
    
        public static long getLong(String key, long defaultVal) {
            String val = getString(key);
            return val == null ? defaultVal : Long.parseLong(val);
        }
    }
    
    
  • 相关阅读:
    C#中的String.Length获取中文字符串长度出错
    PHP+Jquery+Ajax实现checkbox多选删除功能
    WIndows下AppAche服务中调试php页面出现警告:Call to undefined function mysql_connect()
    简洁的SQL一条语句更新从属账号
    算法导论数论一般离散对数问题
    Poj 2115
    算法导论数论计算x^2=1(mod n) 在区间[1,n1]的解
    算法导论数论RSA公钥加密系统
    算法导论数论中国余数定理
    Poj 2891 中国剩余定理 非互素
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/14823252.html
Copyright © 2011-2022 走看看