大坑:
JPA生成数据库映射
MPG代码生成器:
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.1</version>
</dependency>
package ik.starriver.log.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan("ik.starriver.log.mapper*")
public class MyBatisPlusConfig {
private final static String DATASOURCE_PREIFX = "spring.datasource";
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor interceptor = new PaginationInterceptor();
// interceptor.setLimit(500);
interceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return interceptor;
}
@Bean
@ConfigurationProperties(prefix = DATASOURCE_PREIFX)
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
// dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/springtest?serverTimezone=UTC");
return dataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
//不要用SqlSessionFactoryBean,否则会报错:Invalid bound statement (not found):解决
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
// SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mapper*/*.xml"));
return sqlSessionFactoryBean.getObject();
}
}
代码生成完成后,注释掉MPG代码生成器的配置和pom中的依赖
// @Bean
// @ConfigurationProperties(prefix = DATASOURCE_PREIFX)
// public DataSource dataSource() {
// BasicDataSource dataSource = new BasicDataSource();
//// dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/springtest?serverTimezone=UTC");
// return dataSource;
// }
//
// @Bean
// public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
// //不要用SqlSessionFactoryBean,否则会报错:Invalid bound statement (not found):解决
// MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
//// SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
// sqlSessionFactoryBean.setDataSource(dataSource());
// PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
// sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mapper*/*.xml"));
// return sqlSessionFactoryBean.getObject();
// }
// @Bean
// public PlatformTransactionManager transactionManager() {
// return new DataSourceTransactionManager(dataSource());
// }
<!-- <dependency>-->
<!-- <groupId>org.apache.velocity</groupId>-->
<!-- <artifactId>velocity</artifactId>-->
<!-- <version>1.7</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.baomidou</groupId>-->
<!-- <artifactId>mybatis-plus-generator</artifactId>-->
<!-- <version>3.3.1</version>-->
<!-- </dependency>-->
导入依赖,使用MBP开发后续业务
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
execute
ALTER TABLE tianshu_log_event CHANGE COLUMN id id BIGINT(20) auto_increment
SpringBoot+MybatisPlus+代码生成器整合(真正让你专心做业务)
https://blog.csdn.net/m0_37754981/article/details/80451300
MyBatisPlusConfig.java:
//不要用SqlSessionFactoryBean,否则会报错:Invalid bound statement (not found):
@Bean
public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
//不要用SqlSessionFactoryBean,否则会报错:Invalid bound statement (not found)
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
// SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mapper*/*.xml"));
return sqlSessionFactoryBean.getObject();
}
多表关联的问题:
city post的nation为id无法使用City实体进行验证,nation字段的解析为null(类型不一致,一个是long,一个是Nation)
@Valid @RequestBody CityForeignKeyObj obj
设置CascadeType.REMOVE, 删除nation时报错,不能级联删除,删除失败
@OneToMany(mappedBy = "nation", targetEntity = City.class, cascade = CascadeType.REMOVE)
private Collection<City> cities;
设置如下后,需改字段属性,JPA ddl无法更新数据库
jpa:
openInView: false
database: MYSQL
databasePlatform: org.hibernate.dialect.MySQL5InnoDBDialect
generateDdl: true
showSql: true
hibernate:
ddlAuto: update
问题:
自定义Id生成器
测试spring-boot中的三种方式(https://mybatis.plus/guide/id-generator.html#spring-boot)都不行,还是会使用的默认生成器
Jackson对带有Java POJO对象的Response进行序列化的源码分析:
MapSerializer--->serializeFields