博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis-plus和Jackson坑
阅读量:2775 次
发布时间:2019-05-13

本文共 5312 字,大约阅读时间需要 17 分钟。

大坑:JPA生成数据库映射MPG代码生成器:
org.apache.velocity
velocity
1.7
com.baomidou
mybatis-plus-generator
3.3.1
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());//    }
导入依赖,使用MBP开发后续业务
com.baomidou
mybatis-plus-boot-starter
3.3.1
execute

ALTER TABLE tianshu_log_event CHANGE COLUMN id id BIGINT(20) auto_increment

 

 

SpringBoot+MybatisPlus+代码生成器整合(真正让你专心做业务)

 

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
cities;

设置如下后,需改字段属性,JPA ddl无法更新数据库

jpa:  openInView: false  database: MYSQL  databasePlatform: org.hibernate.dialect.MySQL5InnoDBDialect  generateDdl: true  showSql: true  hibernate:    ddlAuto: update

问题:

自定义Id生成器

测试spring-boot中的三种方式()都不行,还是会使用的默认生成器

 

 

 

Jackson对带有Java POJO对象的Response进行序列化的源码分析:

MapSerializer--->serializeFields

转载地址:http://lvfld.baihongyu.com/

你可能感兴趣的文章
Python高级编程 读书笔记: 5、 第3章_生成器
查看>>
Python高级编程 读书笔记: 6、 第3章_生成器之间的交互
查看>>
Python高级编程 读书笔记: 7、 第3章_迭代对象与迭代器
查看>>
Python高级编程 读书笔记: 8、 第4章_魔术方法
查看>>
Python高级编程 读书笔记: 9、 第5章_元类
查看>>
机试算法讲解: 第8题 叠筐
查看>>
Mobile 输入法接口简介收藏
查看>>
struts2_demo
查看>>
如何计算基于 Visual C++ 中的当前字体对话框框单元
查看>>
MPMoviePlayerController 视频播放器
查看>>
Cocoa Touch framework使用
查看>>
Xcode 6单元测试:XCTestCase/XCTestExpectation/measureBlock()
查看>>
Xcode 单元测试
查看>>
解决acmFormatSuggest函数报错的问题
查看>>
使对话框支持 文件拖放操作
查看>>
C++函数传出参数
查看>>
年薪15万的80后小本科:只要6分钟,告诉你少走6年弯路
查看>>
linux 下多线程错误 undefined reference to `sem_init'
查看>>
Linux下的多线程编程
查看>>
CString的GetBuffer用法
查看>>