spring boot + mybatis plus 搭建
看了几位大佬的文章后,终于搭建spring boot + mybatis plus成功了,实现分页查询,代码自动生成,这里使用的数据库为mysql ,数据库连接池为druid
1.maven管理:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/>
</parent>
<!-- 属性添加版本号 --> <properties> <mybatis-plus-spring-boot-starter.version>2.2.0</mybatis-plus-spring-boot-starter.version> <mybatisplus.version>2.1.4</mybatisplus.version> <druid.version>1.0.2</druid.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 数据库MySQL驱动依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- Druid springBoot-starter依赖 --> <dependency> <groupId>com.github.drtrang</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid.version}</version> </dependency> <!-- MyBatis Plus springBoot-starter依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus-spring-boot-starter.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> <scope>test</scope> </dependency> </dependencies>
2.配置application.yml
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://改为自己数据库地址:3306/改为自己数据库名字?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true username: 用户名 password: 密码 druid: # 初始化大小,最小,最大 initial-size: 5 min-idle: 5 maxActive: 20 # 配置获取连接等待超时的时间 maxWait: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false # 打开PSCache,并且指定每个连接上PSCache的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 # 配置DruidStatFilter web-stat-filter: enabled: true url-pattern: "/*" exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" # 配置DruidStatViewServlet stat-view-servlet: url-pattern: "/druid/*" # IP白名单(没有配置或者为空,则允许所有访问) allow: 127.0.0.1,192.168.122.140 # 禁用HTML页面上的“Reset All”功能 reset-enable: false # 登录名 login-username: root # 登录密码 login-password: 123456 mybatis-plus: mapper-locations: 改为mapper.xml的地址 typeAliasesPackage: 改为实体类存放的地址 global-config: id-type: 2 field-strategy: 2 db-column-underline: true refresh-mapper: true configuration: map-underscore-to-camel-case: true cache-enabled: false server: port: 8080
3.代码生成器配置
可以试着运行junit,看代码生成的和预想的是否一样
public class CodeGenerator { public static final String DB_URL = "jdbc:mysql://192.168.122.140:3306/springboottest?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true"; public static final String USER_NAME = "root"; public static final String PASSWORD = "123456"; public static final String DRIVER = "com.mysql.jdbc.Driver"; public static final String AUTHOR = "j4ffee"; //生成的文件输出到哪个目录 public static final String OUTPUT_FILE = "D:\\codeGen"; //包名,会按照com/example/demo这种形式生成类 public static final String PACKAGE = "com.example.demo"; //TODO 更多配置请参考http://mp.baomidou.com/#/generate-code public void generateByTables(boolean serviceNameStartWithI, String... tableNames) { GlobalConfig config = new GlobalConfig(); config.setOpen(false).setBaseResultMap(true); DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDbType(DbType.MYSQL) .setUrl(DB_URL) .setUsername(USER_NAME) .setPassword(PASSWORD) .setDriverName(DRIVER); StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig .setCapitalMode(true) .setEntityLombokModel(false) .setDbColumnUnderline(true) .setNaming(NamingStrategy.underline_to_camel) .setInclude(tableNames);//修改替换成你需要的表名,多个表名传数组 config.setActiveRecord(false) .setAuthor(AUTHOR) .setOutputDir(OUTPUT_FILE) .setFileOverride(true); if (!serviceNameStartWithI) { config.setServiceName("%sService"); } new AutoGenerator().setGlobalConfig(config) .setDataSource(dataSourceConfig) .setStrategy(strategyConfig) .setPackageInfo( new PackageConfig() .setParent(PACKAGE) .setController("controller") .setEntity("entity") ).execute(); } @Test public void generateCode() { boolean serviceNameStartWithI = false;//user -> UserService, 设置成true: user -> IUserService generateByTables(serviceNameStartWithI, "order_details", "order_master", "product_category","product_info"); } }
4.尝试运行mybati plus自带的crud操作
到此步骤,基本整合已经完成,可以进行自带的crud操作,以selectById()为例,直接在controller层进行操作
在进行此项操作时,曾遇到一个错误,大致是运行到mapper层时找不到方法,解决方法:在entity打注解@TableName(),@TableId()
5.进行分页查询
以方法为getAllInfo()为例
5.1在mapper.xml写getAllInfo对应的select方法,像写普通的查询一样
5.2在mapper.xml对应的mapper类中写方法:
5.3在service和controller里面依次写入方法:
service:
controller:
至此,一个简单框架就算搭建完成了