1、新建SpringBoot项目,引入依赖包
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<!--代码自动生成插件-->
<!--使用完必须注释掉下面这个插件-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.6</version>
</dependency>
2、编写generatorConfig.xml并配置到build中
<!DOCTYPE generatorConfiguration PUBLIC
"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="mysql" targetRuntime="MyBatis3">
<!-- 数据Model属性对应Column获取插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.ModelColumnPlugin"/>
<!-- 批量插入插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.BatchInsertPlugin"/>
<!-- 数据Model链式构建插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.ModelBuilderPlugin"/>
<!-- 查询单条数据插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.SelectOneByExamplePlugin"/>
<!-- 查询结果选择性返回插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.SelectSelectivePlugin" />
<!-- MySQL分页插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.LimitPlugin"/>
<!-- Example 目标包修改插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.ExampleTargetPlugin">
<!-- 修改Example类生成到目标包下 -->
<property name="targetPackage" value="com.songguo.ai.feixong.provider.mybatis.example"/>
</plugin>
<plugin type="com.itfsw.mybatis.generator.plugins.TableRenamePlugin" />
<commentGenerator>
<property name="suppressDate" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://10.xxx.xxx.120:6033/xxx"
userId="xxxx" password="Abcd@xxxxx">
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成vo对象 -->
<javaModelGenerator targetPackage="com.songguo.ai.feixong.provider.mybatis.domain" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaModelGenerator>
<!-- 生成DAO的类文件以及配置文件 -->
<sqlMapGenerator targetPackage="com.songguo.ai.feixong.provider.mybatis.mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成mapper类 -->
<javaClientGenerator targetPackage="com.songguo.ai.feixong.provider.mybatis.mapper" targetProject="src/main/java" type="XMLMAPPER">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--配置上下边代码后,就可以获得insert之后的数据的id。
会生成:
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
等同于:useGeneratedKeys="true" keyProperty="id"
identity=true,是AFTER
identify=false(默认),是BEFORE。如果你的数据表设置的id是自增长的,在插入前数据就有了id,会报错: Duplicate entry '7' for key 'PRIMARY'
-->
<table tableName="city_group" >
<generatedKey column="id" sqlStatement="SELECT LAST_INSERT_ID()" identity="true"/>
</table>
<!-- <table tableName="city_auth" />-->
<!-- <table tableName="city_group" />-->
<!-- <table tableName="city_group_mapping" />-->
<!-- <table tableName="city_group_model_group_mapping" />-->
<!-- <table tableName="city_group_model_group_mapping_expand" />-->
<!-- <table tableName="model" />-->
<!-- <table tableName="model_group" />-->
<!-- <table tableName="model_group_expand" />-->
<!-- <table tableName="operation" />-->
</context>
</generatorConfiguration>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<version>3.0.1</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.3</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<!--MyBatis自动生成代码的插件和配置-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!-- 在控制台打印执行日志 -->
<verbose>true</verbose>
<!-- 重复生成时会覆盖之前的文件-->
<overwrite>true</overwrite>
<configurationFile>src/main/resources/mybatis/generatorConfig.xml</configurationFile>
</configuration>
<!-- 数据库连接选择8.0以上的,因为用的mysql8.0-->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.itfsw</groupId>
<artifactId>mybatis-generator-plugin</artifactId>
<version>${mybatis.generator.plugin.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
generatorConfig.xml文件所在位置
3、配置数据源,这里用DynamicDataSource多数据源的方案配置
@Aspect
@Component
@Slf4j
public class DataSourceAOP {
@Before("execution(* com.songguo.ai.feixong.provider.mybatis.*.*(..))")
public void setGeoDataSourceType(JoinPoint point) {
DynamicDataSource.setFeixiong();
}
}
=====================================
@Configuration
public class DataSourceConf {
public DataSourceConf() {
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.feixiong")
public DataSource feixiong() {
return new DruidDataSource();
}
@Autowired
@Primary
@Bean("dataSource")
public DynamicDataSource dynamicDataSource(@Qualifier("feixiong") DataSource feixiong) {
Map<Object, Object> targetDataSources = new HashMap<Object, Object>();
targetDataSources.put(DynamicDataSource.DatabaseType.FEI_XIONG, feixiong);
DynamicDataSource dataSource = new DynamicDataSource();
dataSource.setTargetDataSources(targetDataSources);// 该方法是AbstractRoutingDataSource的方法
dataSource.setDefaultTargetDataSource(feixiong);
return dataSource;
}
}
========================================
@Slf4j
public class DynamicDataSource extends AbstractRoutingDataSource {
private static final ThreadLocal<DatabaseType> contextHolder = new ThreadLocal<DatabaseType>();
@Override
protected Object determineCurrentLookupKey() {
return contextHolder.get();
}
public static void setFeixiong() {
contextHolder.set(DatabaseType.FEI_XIONG);
}
public static void setMozi() {
contextHolder.set(DatabaseType.MOZI);
}
public static DatabaseType getType() {
return contextHolder.get();
}
public static enum DatabaseType {
FEI_XIONG, MOZI
}
}
application-dev.properties
#db
spring.datasource.feixiong.url=jdbc:mysql://10.100.67.120:6033/feixiong?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&connectTimeout=2000&socketTimeout=2000&zeroDateTimeBehavior=convertToNull
spring.datasource.feixiong.username=geo_usertest
spring.datasource.feixiong.password=Abcd@123
spring.datasource.feixiong.initial-size=5
spring.datasource.feixiong.max-active=20
spring.datasource.feixiong.min-idle=5
spring.datasource.feixiong.max-wait=2000
spring.datasource.feixiong.stat-view-servlet.login-username=admin
spring.datasource.feixiong.stat-view-servlet.login-password=admin
mybatis.mapper-locations=classpath:mapper/**/*.xml
bootstrap.yml
spring:
profiles:
active: dev
application:
name: xxxxx
server:
servlet:
context-path: /${spring.application.name}
port: 8080
---
spring:
profiles: dev
cloud:
nacos:
config:
server-addr: 10.xxxx.xxx.20:8848
file-extension: yml
namespace: xxxxxxxxxxxx-c0930c1ec810
username: xxxxdev_nacos
password: 4xxxxxFU9
discovery:
server-addr: 10.xxxx.xxx.20:8848
file-extension: yml
namespace: xxxxxxxxxxxx-c0930c1ec810
username: xxxxdev_nacos
password: 4xxxxxFU9
Application.java
@SpringBootApplication(scanBasePackages = {"com.xxxx.*"}, exclude = {DataSourceAutoConfiguration.class})
@MapperScan({"com.xxxx.**.mapper", "com.xxxx.**.mapper"})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
自动生成mybatis代码的操作
编辑好后,直接选择然后运行
.
注意:要确保src.main下有java和resources目录,才能成代码
image.png
简单使用:
CityGroupExample cityGroupExample = new CityGroupExample();
CityGroupExample.Criteria criteria = cityGroupExample.createCriteria();
criteria.andIsValidEqualTo((byte) 1);
//设置分页,row为每页的数量,offset是从第几条数据开始(忽略掉的数据条数)
cityGroupExample.setRows(4);
cityGroupExample.setOffset(1);
cityGroupExample.setOrderByClause("id DESC");
List<CityGroup> cityGroups = cityGroupMapper.selectByExample(cityGroupExample);
网友评论