{"id":23160858,"url":"https://github.com/isnott/nott-mybatis-core","last_synced_at":"2025-04-04T19:27:34.293Z","repository":{"id":239318385,"uuid":"798577596","full_name":"IsNott/nott-mybatis-core","owner":"IsNott","description":"个人的mybatis学习包，基于mybatis3.5,spring6.0,mysql，java17+，spring-aop等依赖，封装通用mapper提供curd基础操作以及动态数据源功能。","archived":false,"fork":false,"pushed_at":"2024-05-22T03:23:16.000Z","size":185,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-05-22T22:36:18.231Z","etag":null,"topics":["aop-aspects","dynamic-datasource","java17","mybatis","spring6"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IsNott.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-10T03:56:14.000Z","updated_at":"2024-05-28T06:11:00.408Z","dependencies_parsed_at":"2024-05-15T19:03:06.395Z","dependency_job_id":"e7bee93a-64b1-438d-b61a-f93dab956d7e","html_url":"https://github.com/IsNott/nott-mybatis-core","commit_stats":null,"previous_names":["isnott/nott-mybatis-core"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IsNott%2Fnott-mybatis-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IsNott%2Fnott-mybatis-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IsNott%2Fnott-mybatis-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IsNott%2Fnott-mybatis-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IsNott","download_url":"https://codeload.github.com/IsNott/nott-mybatis-core/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247236793,"owners_count":20906188,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aop-aspects","dynamic-datasource","java17","mybatis","spring6"],"created_at":"2024-12-17T23:12:21.630Z","updated_at":"2025-04-04T19:27:34.271Z","avatar_url":"https://github.com/IsNott.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mybatis通用操作包\n基于mybatis3.5,spring,mysql，java17+的通用操作包，封装curd通用基础操作。\n\n## 创建初衷\n根据mybatis文档教程从头进行学习(aop、动态数据源、mybatis插件等)，封装自用的mybatis数据操作包。\n\n## 版本 (Version)\n0.0.4\n\n## 依赖版本\n\n|name|version|\n|--|--|\n|spring-boot-starter-parent|3.1.0|\n|mysql-connector-j|8.3.0|\n|aspectjweaver|1.9.21.1|\n|mybatis-spring|3.0.1|\n|spring-context|6.0.9|\n|spring-boot-configuration-processor|3.1.5|\n|log4j-api|2.20.0|\n|spring-test|6.0.9|\n|mybatis|3.5.11|\n|...|...|\n\n*完整依赖见[GitHub](https://github.com/IsNott/nott-mybatis-core)项目pom文件*\n\n## 模块\n|name|description|\n|--|--|\n|nott-mybatis-curd|mybaits-基础|\n|nott-mybatis-dynamic-datasource|mybatis-动态数据源|\n|nott-web-test|web测试模块|\n\n\n## 使用说明\n### 引入\npom.xml引入模块(nott-mybatis-orm/dynamic-datasource)\n```xml\n\u003cdependencies\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eio.github.isnott\u003c/groupId\u003e\n        \u003cartifactId\u003enott-mybatis-orm\u003c/artifactId\u003e\n        \u003cversion\u003e0.0.4\u003c/version\u003e\n    \u003c/dependency\u003e\n    \n    \u003cdependency\u003e\n    \u003cgroupId\u003eio.github.isnott\u003c/groupId\u003e\n    \u003cartifactId\u003enott-mybatis-dynamic-datasource\u003c/artifactId\u003e\n    \u003cversion\u003e0.0.4\u003c/version\u003e\n    \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\n在web项目启动主方法上加入注解 @ComponentScan({\"org.nott\"})\n\n可参考项目web模块test文件夹下的单元测试方法。\n\n自定义service实现类继承ICommonService\u003cT\u003e获取通用service实现方法\n（在CommonMapper提供的方法上二次封装分页等方法）\n```java\n@Service\npublic class UserService extends ICommonService\u003cUser\u003e {\n\n}\n```\n\n自定义mapper可直接获取CommonMapper基础方法（需要传递泛型）\n```java\npublic interface UserMapper extends CommonMapper\u003cUser\u003e {}\n```\n\n## ORM\n**application.yml**加入以下配置\n```yml\nnott:\n  mybatis:\n    mapper-location: classpath:mapper/**Mapper.xml\n  # 不加入dynamic-dataSource时加入下面配置\n  datasource:\n    name: mysql-db01\n    url: jdbc:mysql://127.0.0.1:3306/test?allowMultiQueries=true\u0026useSSL=false\u0026useUnicode=true\u0026characterEncoding=UTF-8\u0026autoReconnect=true\u0026zeroDateTimeBehavior=convertToNull\u0026useJDBCCompliantTimezoneShift=true\u0026useLegacyDatetimeCode=false\u0026serverTimezone=GMT%2B8\u0026nullCatalogMeansCurrent=true\u0026allowPublicKeyRetrieval=true\n    username: root\n    password: 888888\n    driverClassName: com.mysql.cj.jdbc.Driver\n    type: com.zaxxer.hikari.HikariDataSource\n    hikari:\n      minimumIdle: 0\n      maximumPoolSize: 20\n      idleTimeout: 10000\n      connectionTestQuery: select 1\n      poolName: nott-hikari-01\n```\n\n支持Select、Update、Delete、Insert基础方法（selectById、selectOne）、\n单表查询、更新条件构造器\n\n使用示例：\n```java\nList\u003cUser\u003e users = userMapper.selectList();\n// 单表条件查询\nUser user = userMapper.selectOneByCondition(\n        QuerySqlConditionBuilder.build()\n        .eq(\"name\",\"youKnowWho\")\n        );\n```\n\n```java\n/**\n * 单表条件查询支持的方法接口\n */\npublic interface SqlQuery {\n    \n   SqlConditionBuilder eq(String colum, Object val);\n\n    SqlConditionBuilder neq(String colum, Object val);\n\n    SqlConditionBuilder gt(String colum, Object val);\n\n    SqlConditionBuilder ge(String colum, Object val);\n\n    SqlConditionBuilder lt(String colum, Object val);\n\n    SqlConditionBuilder le(String colum, Object val);\n\n    ...\n}\n```\n\nUpdate、Delete、Insert基础方法，详见CommonMapper文件\n```\nint affectRow = userMapper.updateById(user);\nint affectRow = userMapper.insert(user);\nint affectRow = userMapper.deleteById(\"123435345\");\nint affectRow = userMapper.deleteByIds(Arrays.asList(\"123435345\"));\n```\n\nService封装mapper基础方法、分页方法，详见CommonService文件\n```\n...\nPage\u003cT\u003e page(Page\u003cT\u003e page);\n\nPage\u003cT\u003e page(Page\u003cT\u003e page, QuerySqlConditionBuilder querySqlConditionBuilder);\n...\n```\n## dynamic-datasource\n切换数据源，支持使用hikari/druid数据源\n\n在application.yml加入动态数据源开关\n\n```yaml\nnott:\n  enable-dynamic-datasource: true\n```\n添加data-source.yml文件，加入数据源列表(hikari/druid),\n当application.yml和data-source.yml数据源配置内容同时存在，并且打开动态数据源开关，\n程序只加载data-source.yml里的内容。\n\n*不需要动态切换数据源时，关闭application.yml中的开关即可。*\n```yaml\ndataSourceConfigs:\n  - name: mysql-db01\n    url: jdbc:mysql://127.0.0.1/test?allowMultiQueries=true\u0026useSSL=false\u0026useUnicode=true\u0026characterEncoding=UTF-8\u0026autoReconnect=true\u0026zeroDateTimeBehavior=convertToNull\u0026useJDBCCompliantTimezoneShift=true\u0026useLegacyDatetimeCode=false\u0026serverTimezone=GMT%2B8\u0026nullCatalogMeansCurrent=true\u0026allowPublicKeyRetrieval=true\n    username: root\n    password: 123456\n    driverClassName: com.mysql.cj.jdbc.Driver\n    # 标识默认数据源\n    primary: true\n    type: com.zaxxer.hikari.HikariDataSource\n    #type: com.alibaba.druid.pool.DruidDataSource\n    hikari:\n      minimumIdle: 0\n      maximumPoolSize: 20\n      idleTimeout: 10000\n      connectionTestQuery: select 1\n      poolName: nott-hikari-01\n  - name: mysql-db02\n   ...\n```\n在代码或者方法体上切换数据源\n```java\npublic void test(){\n    // 显式切换\n   DynamicDataSourceHolder.setDynamicDataSourceKey(\"mysql-db02\");    \n}\n\n\n@DataSource(\"mysql-db02\")\npublic void test(){\n        ...\n}\n\n```\n\n## 迭代\n联表查询构造器，Mybatis mapper执行传入SqlBuilder组装的SQL语句并，详见META-INF/mybatis/Mapper.xml文件、ComplexityWrapper类。\n```java\n        // 返回特定对象列表\n        List\u003cUserRelationVo\u003e result = ComplexityWrapper.build(User.class, \"t1\")\n        .leftJoin(UserRelation.class, \"t2\", Join.on(\"t1.id\", \"t2.user_id\", SqlOperator.EQ))\n        .colums(Colum.select(\"T1.id\",\"userId\"))\n        .condition(Where.eq(\"t1.id\", \"410544b2-4001-4271-9855-fec4b62350d\"))\n        .orderByAsc(\"t1.id\")\n        .groupBy(\"t1.id\")\n        .beanType(UserRelationVo.class);\n\n        // 返回分页对象\n        Page\u003cUserRelationVo\u003e page = ComplexityWrapper.build(User.class, \"t1\")\n        .leftJoin(UserRelation.class, \"t2\", Join.on(\"t1.id\", \"t2.user_id\", SqlOperator.EQ))\n        .colums(Colum.select(\"T1.id\", \"userId\"))\n        .condition(Where.eq(\"t1.id\", \"410544b2-4001-4271-9855-fec4b62350d\"))\n        .groupBy(\"t1.id\")\n        .page(UserRelationVo.class, 1, 10);\n```\n\n\n## 参考文档\nmybatis中文文档：https://mybatis.net.cn/getting-started.html\n\nmybatis与spring整合版本对应关系参考：https://mybatis.org/spring/\n\njsqlparser:https://jsqlparser.github.io/JSqlParser/usage.html\n\nhikari数据源配置参考: https://www.cnblogs.com/didispace/p/12291832.html\n\ndruid配置属性：https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisnott%2Fnott-mybatis-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisnott%2Fnott-mybatis-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisnott%2Fnott-mybatis-core/lists"}