代码生成器 集成mybatis tkmybatis mybatis-plus mybatisPlus
·
一、mybatis代码生成器
maven项目
maven参考2
gradle项目
驱动下载地址 进去点击no,thanks just start download
1.自己做代码生成器
1.正常创建一个springboot的maven项目
2.pom加插件
<!--mabatis生成器-->
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
3.generatorConfig.xml 位置见pom里面的configurationFile 内容见最下面
4.点击maven——mybatis——plugins——mybatis-generator
2.星云
1.配置文件在resource下的 generator.xml
2.如何生成见下面截图

二、SpringBoot项目集成mybatis
1.pom依赖
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
2.配置文件
spring:
# mysql数据库
datasource:
url: jdbc:mysql://192.168.0.161:3306/newpn?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
data-password: root
data-username: password
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath*:mapper/*.xml
3.map文件写在resource里面,resource里面可以有子文件夹
<mapper namespace="com.module.web.mapper.RoleMenuMapper">
<select id="selectRoleMenuList" resultType="string">
select * from sys_menu
</select>
</mapper>
4.接口文件 发现要这两个注解
@Mapper
@Repository
public interface RoleMenuMapper {
public String selectRoleMenuList();
}
5.使用的时候用注解 @Resource 或 @autowired 都可以
@Autowired
private OrgOperationUserMapper orgOperationUserMapper;
@Resource
private OrgDeptMapper orgDeptMapper;
6.如果提示找不到mapper的方法或者ivalidstatement的
在主启动类加注解@MapperScan("com.jw.mva.repository")
三、SpringBoot项目集成tkmybatis
1.pom依赖
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.4.2</version>
</dependency>
<!--mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
2.创建实体对象
@Data
@Table(name = "user_car")
public class UserCar {
@Id
@Column(name = "uc_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
@Column(name = "uc_user_id")
private String userId;
3.创建DAO继承tk.mybatis.mapper.common.Mapper即可
public interface UserCarRepository extends BaseMapper<OrgDeptDO>, Mapper<T>,InsertListMapper<OrgDeptDO> {
}
public interface MyMapper<T> extends Mapper<T>, InsertListMapper<T> {
//mapper是 tk.mybatis:mapper-base:1.1.5
//InsertListMapper是 tk.mybatis:mapper-extra:1.1.5
}
4.如果提示找不到mapper的方法
在主启动类加注解@MapperScan("com.jw.mva.repository")
四、集成Mybatis-plus
1.pom依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
2.创建实体类包com.test.web.entity和mapper接口文件包com.test.web.mapper
3.主启动类加注解 @MapperScan
@SpringBootApplication
@MapperScan("com.test.web.mapper")
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication .class, args);
}
}
4.yml配置文件配置数据库和日志输出类
#mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mp?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
#mybatis-plus
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus:
mapper-locations: mapper1/**.xml,mapper2/**.xml
5.创建实体类和mapper接口 以及扩展IService
@TableName("tbl_employee")
@Data
public class Employee {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField(value = "last_name")
private String lastName;
@TableField(value = "email")
private String email;
@TableField(value = "gender")
private Integer gender;
@TableField(value = "age")
private Integer age;
}
@Repository
public interface EmployeeMapper extends BaseMapper<Employee> {
}
public interface OpLocationImageRepository extends IService<OpLocationImageEntity> {
}
@Service
public class OpLocationImageRepositoryImpl extends ServiceImpl<OpLocationImageMapper, OpLocationImageEntity> implements OpLocationImageRepository {
}
6.使用
查询:
a.直接调用方法查询:
Employee employee = employeeMapper.selectById(1);
b.QueryWrapper构造器查询
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.select("name", "age") //指定列
queryWrapper.eq("operation_type", opLocationQueryDTO.getOperationType());
queryWrapper
.like("last_name","B")
.eq("gender",1)
.in("location_evse_id", evseIds);
.gt("age",24);
List<Employee> employees = employeeMapper.selectList(queryWrapper);
c.lambdaQueryWrapper查询 和 LambdaUpdateWrapper更新
LambdaQueryWrapper<AppConfig> lambdaQueryWrapper = Wrappers.lambdaQuery(AppConfig.class)
.select(ChargePileLocalGroup::getMainSn,ChargePileLocalGroup::getId) //指定列
.in(AppConfig::getCode, codes)
.eq(AppConfig::getLanguage, language)
.orderByAsc(AppConfig::getCode);
LambdaUpdateWrapper<ChargePile> chargePileLambdaUpdateWrapper = Wrappers.lambdaUpdate(ChargePile.class)
.set(ChargePile::getApnInfo, updateAPNDto.getApnInfo())
.eq(ChargePile::getSn, updateAPNDto.getSn());
this.update(chargePileLambdaUpdateWrapper);
d,分页查询
Page<OpLocationEvaluationEntity> searchPage = new Page<>(pageIndex, pageSize);
Page<OpLocationEvaluationEntity> opLocationEvaluationEntityPage = opLocationEvaluationMapper.selectPage(searchPage, opLocationEvaluationEntityQueryWrapper);
e.and和or结合查询
LambdaQueryWrapper<BillEntity> queryWrapper = Wrappers.lambdaQuery(BillEntity.class);
queryWrapper.eq(BillEntity::getEvseId, evseId);
queryWrapper.eq(BillEntity::getOrderStatus, status);
queryWrapper.and(
childQueryWrapper -> childQueryWrapper
.eq(BillEntity::getUserId, userId)
.or()
.eq(BillEntity::getOperatorId, userId)
);
queryWrapper.orderByDesc(BillEntity::getId);
queryWrapper.last(LIMIT_1);
LambdaQueryWrapper<UserSharePile> userSharePileLambdaQueryWrapper = Wrappers.lambdaQuery(UserSharePile.class)
.eq(UserSharePile::getSn, sn)
.eq(UserSharePile::getPileOwnerUserId, currentUserId)
.and(childQueryWrapper -> childQueryWrapper
.eq(UserSharePile::getStatus, UserSharePileStatusEnum.JOINED.getCode())
.or()
.eq(UserSharePile::getStatus, UserSharePileStatusEnum.INVITED.getCode()));
List<UserSharePile> userSharePiles = userSharePileMapper.selectList(userSharePileLambdaQueryWrapper);
queryWrapper.select(BillEntity::getEvseSn,BillEntity::getOrderStatus,BillEntity::getDelayTime,BillEntity::getDelayTimeLeft,
BillEntity::getId,BillEntity::getUserId,BillEntity::getCdrId,BillEntity::getOrderSeq);// 非常重要 后面需要查询什么
BillEntity billEntity = billMapper.selectOne(queryWrapper);
排序:
b.opLocationPileEvseEntityQueryWrapper.orderByDesc("created_at");
c.lambda
lambdaQueryWrapper.orderByDesc(InvoiceEntity::getCreateTime);
7.插件(乐观锁插件和分页插件)
@EnableTransactionManagement //事务处理
@Configuration
@MapperScan("com.autel.cloud.app.pile.base.infrastructure.mapper")
public class MyBatisPlusConfig {
/**
* 乐观锁插件
* @return
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
五、源码分析

1。连接数据源
总结:去解析XML文件内容给到java对象Configuration setEviroment
2。执行语句
3。操作
下面是mybatis代码生成器的配置文件:generatorConfig.xml
generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- 配置生成器 -->
<generatorConfiguration>
<!--classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置 可选 -->
<classPathEntry location="E:\mysql-connector-java-8.0.21.jar"/>
<!-- 一个数据库一个context,defaultModelType="flat" 大数据字段,不分表 -->
<context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->
<property name="autoDelimitKeywords" value="true"/>
<!-- 生成的Java文件的编码 -->
<property name="javaFileEncoding" value="utf-8"/>
<!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 格式化java代码 -->
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
<!-- 格式化XML代码 -->
<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<!-- 注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
<property name="suppressDate" value="false"/> <!-- 是否生成注释代时间戳-->
</commentGenerator>
<!-- jdbc连接-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://192.168.1.15:3306/boss_project_ccw_module_yypt_back_210?serverTimezone=UTC" userId="newenergy"
password="cvFFxF@N"/>
<!-- 类型转换 -->
<javaTypeResolver>
<!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成实体类地址 -->
<javaModelGenerator targetPackage="com.nebula.microservice.web.entity" targetProject="src/main/java">
<!-- 是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
<!-- 从数据库返回的值去掉前后空格 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成map.xml文件存放地址 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 生成接口dao -->
<javaClientGenerator targetPackage="com.nebula.microservice.web.dao" targetProject="src/main/java" type="XMLMAPPER">
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- table可以有多个,每个数据库中的表都可以写一个table,tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 enableSelectByPrimaryKey相应的配置表示是否生成相应的接口 -->
<table tableName="auth_user" enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"
enableSelectByPrimaryKey="true" enableUpdateByPrimaryKey="true"
enableDeleteByPrimaryKey="true">
<property name="useActualColumnNames" value="true"/>
</table>
</context>
</generatorConfiguration>
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐




所有评论(0)