Skip to content

ttayaa/ttsql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ttsql

一款 零配置 基于mybatis的 框架

<dependency> <groupId>io.github.ttayaa.ttsql</groupId> <artifactId>ttsql-spring-boot-starter</artifactId> <version>1.0.4</version> </dependency>

service层 不用继承
mapper层 不用继承 甚至不用写mapper层
用了框架 基本不写xml了 在mapper中 可以使用defaul 默认方法来写sql

代码 比现在市面的框架 更接近 sql

框架基于 根据数据表生成的 实体类

内置 模型转换

用法 :

支持 动态sql 并且支持lambda

1 单表操作

1.1, 查询 的 用法

//根据 主键 查询

PmsCategoryVo one = TTSQL.selectById(PmsCategory.class,id).executeQueryOne(PmsCategoryVo.class);

//普通查询 List umsUserAddressVos = TTSQL.select(UmsUserAddress.class) .where(UmsUserAddress::getUserId, userId) .executeQueryList(UmsUserAddressVo.class);

等等用法 .......

// 分页查询

TTPage ttPage = new TTPage(pageReqVo.getPageNo(), pageReqVo.getPageSize());

  List<PmsCategoryVo> PmsCategoryVos
                = TTSQL.select(PmsCategory.class)
              //  .like(PmsCategory::getXXX,"%" + pageReqVo.getKeyword() + "%",pageReqVo.getKeyword()!=null)
                .executeQueryPage(ttPage, PmsCategoryVo.class);

1.2, 新增 的用法 支持 主键回显

PmsCategory po = new PmsCategory();
BeanUtils.copyProperties(insertReqVo,po);
   
int i = TTSQL.insertInto(po)
            .executeUpdate();

1.3, 更新 的用法

PmsCategory po = new PmsCategory();
BeanUtils.copyProperties(updateReqVo,po);

int i = TTSQL.updateById(po)
            .executeUpdate();

1.4, 删除 的用法

int i = TTSQL.deleteById(PmsCategory.class,reqVo.getId()) .executeUpdate();

2 多表操作

    String[] ids = reqVo.getId().split(",");

        List<UmsCartVo> umsCartVos = TTSQL.start()
                .select("c.*,p.product_name,p_i.url,s.stock,s.sku_name")
                .from("ums_cart c")
                .innerJoin("pms_spu p")
                .innerJoin("pms_spu_img p_i")
                .innerJoin("pms_sku s")
                .on("c.product_id = p.product_id")
                .and("p.product_id = p_i.item_id")
                .and("c.sku_id = s.sku_id")
                .where("c.user_id", userId)
                .andIn("c.cart_id",ids)
                .andEqual("p_i.is_main", 1)
                .executeQueryList(UmsCartVo.class);

3 多数据源 

我们可以在 一个方法中 调用 N个不同的数据库   颗粒度是一条 sql语句  现在市面上的都是一个方法 只能绑定一个数据源 

配置方法 在 项目创建一个配置类

注意 当你使用配置类配置数据源后 您的yml中的配置 就被忽略了

@Configuration public class TTSQLCfg {

@Bean
@Primary
public DynamicDataSource dataSource() {

    //可以在方法中 自己定制 自己的 数据源 连接池等

    DruidDataSource dataSource1 = DruidDataSourceBuilder.create().build();
    dataSource1.setUrl("jdbc:mysql://localhost:3306/mall1?serverTimezone=GMT%2B8");
    dataSource1.setUsername("root");
    dataSource1.setPassword("root");


    DruidDataSource dataSource2 = DruidDataSourceBuilder.create().build();
    dataSource2.setUrl("jdbc:mysql://localhost:3306/mall2?serverTimezone=GMT%2B8");
    dataSource2.setUsername("root");
    dataSource2.setPassword("root");

    DruidDataSource dataSource3 = DruidDataSourceBuilder.create().build();
    dataSource3.setUrl("jdbc:mysql://localhost:3306/mall3?serverTimezone=GMT%2B8");
    dataSource3.setUsername("root");
    dataSource3.setPassword("root");

    Map<Object, Object> dataSources = new HashMap<>();
    dataSources.put("db1", dataSource1);
    dataSources.put("db2", dataSource2);
    dataSources.put("db3", dataSource3);

    return new DynamicDataSource(dataSource1, dataSources);

}

}

在项目中就可以 

       //不写db 默认第一个数据源
    List<HashMap> hashMaps1 = TTSQL.start().select()
            .from("pms_spu")
            .executeQueryList();

    //数据库1
    List<HashMap> hashMaps2 = TTSQL.start().select()
            .from("pms_brand")
            .executeQueryList("db2");

    //数据库2
    List<HashMap> hashMaps3 = TTSQL.start().select()
            .from("edu_teacher")
            .executeQueryList("db3");

    return BackUtil.ok()
            .data("pms_spu",hashMaps1)
            .data("pms_brand",hashMaps2)
            .data("pms_category",hashMaps3);



4 实体类中的 一些注解 

4.1 主键的注解

@TTAutoPrimaryKey   // 使用数据库自增 数据库主键必须加上 auto_increment


//雪花算法就是  用于 保证每个表 的 主键 都不一样  并且 有递增顺序 

@TTSnowFlakePrimaryKey  // 在使用新增语句时 会 根据 雪花算法 生成 id  注意 数据库表的id 最好为 varchar

//redis + 雪花  保证 高并发情况 下 每个表的主键不一样

@TTRedisPrimaryKey  // 基于redis的雪花算法 只要 正常配置了redis 并加上这个注解 就可以

@TTSnowFlakePrimaryKey  // 在使用新增语句时 会 根据 雪花算法 生成 id  注意 数据库表的id 最好为 varchar 
定义为主键   这样 你的TTSQL 语句中的 xxxxbyid 才能生效



@TTLogicField  逻辑删除字段  在使用delete语句时  会根据实体属性上 的这个注解 将数据更新为 1 0


@TTCreateField 在新增的时候 会自定填充 当前时间


@TTUpdateField 在更新的时候 会自动填充 当前时间


注解配置比较简单  本人精力有限   如果需要的朋友 可以提需求  我新增功能



还有很多用法  这里不一一说明 

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages