Mybatis-plus和Jackson坑

大坑:

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
发布了105 篇原创文章 · 获赞 33 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/github_38596081/article/details/104218133
今日推荐