{"id":18021148,"url":"https://github.com/weasley-j/mybatis-encrypt-spring-boot-parent","last_synced_at":"2025-03-26T22:30:36.656Z","repository":{"id":65019701,"uuid":"580218411","full_name":"Weasley-J/mybatis-encrypt-spring-boot-parent","owner":"Weasley-J","description":"A spring-boot starter to make it easy to encrypt and decrypt some column of database tables, supports for developer custom encryption algorithms, you can even use some encrypted fields as query criteria.","archived":false,"fork":false,"pushed_at":"2023-07-16T15:17:36.000Z","size":106,"stargazers_count":43,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-22T14:22:16.000Z","etag":null,"topics":["data-decoding","data-encryption","mybatis-plugin","spring-boot-starter","table-column-decryption","table-column-encryption"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Weasley-J.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":"2022-12-20T02:20:11.000Z","updated_at":"2025-02-22T14:39:01.000Z","dependencies_parsed_at":"2024-10-30T06:29:20.457Z","dependency_job_id":null,"html_url":"https://github.com/Weasley-J/mybatis-encrypt-spring-boot-parent","commit_stats":{"total_commits":25,"total_committers":1,"mean_commits":25.0,"dds":0.0,"last_synced_commit":"f43fd9edf19dc97bf2d7f3ac54a772f0288f2607"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Weasley-J%2Fmybatis-encrypt-spring-boot-parent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Weasley-J%2Fmybatis-encrypt-spring-boot-parent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Weasley-J%2Fmybatis-encrypt-spring-boot-parent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Weasley-J%2Fmybatis-encrypt-spring-boot-parent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Weasley-J","download_url":"https://codeload.github.com/Weasley-J/mybatis-encrypt-spring-boot-parent/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245747397,"owners_count":20665782,"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":["data-decoding","data-encryption","mybatis-plugin","spring-boot-starter","table-column-decryption","table-column-encryption"],"created_at":"2024-10-30T06:08:54.335Z","updated_at":"2025-03-26T22:30:36.289Z","avatar_url":"https://github.com/Weasley-J.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mybatis-encrypt-spring-boot-parent\n\n**A spring-boot starter to encrypt and decrypt some column of database**\n\n## [![Maven Central](https://img.shields.io/maven-central/v/io.github.weasley-j/mybatis-encrypt-spring-boot-starter)](https://search.maven.org/artifact/io.github.weasley-j/mybatis-encrypt-spring-boot-starter)\n\nTips: For running test application I recommend you to set the correct path that you can get a cleanning project directory.\n\n- Set value of `spring.datasource.url`\n\n```yaml\nspring:\n  datasource:\n    embedded-database-connection: h2\n    driver-class-name: org.h2.Driver\n    #url: jdbc:h2:mem:h2;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n    url: jdbc:h2:/Users/weasley/Development/IdeaProjects/mybatis-encrypt-spring-boot-parent/mybatis-encrypt-spring-boot-tests/h2;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n    username: \"\"\n    password: \"\"\n```\n\n- Set value for  `alphahub.dtt.all-in-one-table.filepath` and `alphahub.dtt.code-generator.module-path`\n\n```yaml\nalphahub:\n  dtt:\n    show-sql: on\n    all-in-one-table:\n      enable: true\n      filename: all_in_one.sql\n      filepath: /Users/weasley/Downloads\n    code-generator:\n      is-enable: on\n      include-controller: on\n      include-interface: on\n      override-exists: off\n      remove-prefix: dtt\n      base-classes:\n        - com.example.demain.DttMember\n      module-name: example\n      module-package: com.example\n      module-path: /Users/weasley/Development/IdeaProjects/mybatis-encrypt-spring-boot-parent/mybatis-encrypt-spring-boot-tests\n```\n\n\n\n# Quick start\n\n\n\n## 1 Add dependences  for your project pom.xml\n\n```xml\n\u003c!-- mybatis-encrypt --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.weasley-j\u003c/groupId\u003e\n    \u003cartifactId\u003emybatis-encrypt-spring-boot-starter\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.3\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n\n\n## 2 Configure your configuration yaml file\n\n[`MyBatis` encryption configuration](https://github.com/Weasley-J/mybatis-encrypt-spring-boot-parent/blob/main/mybatis-encrypt-spring-boot-starter/src/main/java/io/github/weasleyj/mybatis/encrypt/config/MybatisEncryptProperties.java)，2 algorithms embeded. you can choose one of them. Or you can implement you own algorithm.\n\n### 2.1 Base64 algorithm\n\n```yaml\n# mybatis encryption configuration\nmybatis:\n  encrypt:\n    enable: on\n    encrypt-type: base64\n```\n\n###  2.2 AES algorithm\n\n**Replace your own key and keyIv**\n\n```yaml\n# mybatis encryption configuration\nmybatis:\n  encrypt:\n    enable: on\n    encrypt-type: aes\n    aes:\n      key: Jidkdp1mWL1tRyK=\n      key-iv: Poikdp1mWL1jijK=\n```\n\n## 2.3 DIY algorithm\n\nAs you choose `encrypt-type = diy`，you must implement [`io.github.weasleyj.mybatis.encrypt.core.EncryptStrategy`](https://github.com/Weasley-J/mybatis-encrypt-spring-boot-parent/blob/main/mybatis-encrypt-spring-boot-starter/src/main/java/io/github/weasleyj/mybatis/encrypt/core/EncryptStrategy.java) to define your own algorithms for encryption and decryption some column of database,\n\n```yaml\n# mybatis encryption configuration\nmybatis:\n  encrypt:\n    enable: on\n    encrypt-type: diy\n    diy:\n      encrypt-strategy: com.somepackage.YourEncryptStrategyImpl\n```\n\n\n\n3 Use `@EnableMybatisEncryption` annotation to annotate a `Bean` of your application that `Spring AOC` can find it\n\n- Annotate on Java configuration class\n\n```java\nimport io.github.weasleyj.mybatis.encrypt.annotation.EnableMybatisEncryption;\nimport org.springframework.context.annotation.Configuration;\n\n/**\n * Mybatis Encrypt Configuration class\n *\n * @author weasley\n * @version 1.0.0\n */\n@Configuration\n@EnableMybatisEncryption\npublic class MybatisEncryptConfig {\n\n}\n```\n\n- Annotate on your SpringBoot aplciation Main class\n\n```java\nimport io.github.weasleyj.mybatis.encrypt.annotation.EnableMybatisEncryption;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n/**\n * Some application Main class\n */\n@SpringBootApplication\n@EnableMybatisEncryption\npublic class SomeApplication {\n    public static void main(String[] args) {\n        SomeApplication.run(SomeApplication.class, args);\n    }\n}\n```\n\n\n\n## 3 Wirte a Java bean that  MyBatis can map with table column\n\n- Use `@Encryption` annotate on the field property which you need encryption and decryption，Here is an example to decrypt and encrypt `nickname`:\n\n[API link](https://github.com/Weasley-J/mybatis-encrypt-spring-boot-parent/blob/8500f7454d5ec150b5ece6549f4608b38183af19/mybatis-encrypt-spring-boot-tests/src/main/java/com/example/controller/MemberController.java#L112): http://localhost:8080/api/member/save/direct\n\n\n\n```java\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport io.github.weasleyj.mybatis.encrypt.annotation.Encryption;\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\nimport lombok.experimental.Accessors;\n\nimport java.io.Serializable;\nimport java.math.BigDecimal;\nimport java.time.LocalDate;\nimport java.time.LocalDateTime;\nimport java.time.LocalTime;\n\n/**\n * 用户信息\n */\n@Data\n@Builder\n@AllArgsConstructor\n@NoArgsConstructor\n@Accessors(chain = true)\npublic class DttMember implements Serializable {\n    /**\n     * 主键id\n     *\n     * @primaryKey\n     */\n    @TableId\n    private Long memberId;\n    /**\n     * 用户openId\n     *\n     * @defaultValue e1be63305\n     * @length 16\n     */\n    private String openId;\n    /**\n     * 用户昵称\n     *\n     * @length 32\n     */\n    @Encryption\n    private String nickname;\n    /**\n     * 是否启用, 默认：1\n     *\n     * @defaultValue true\n     */\n    private Boolean isEnable;\n    /**\n     * 用户积分余额, 默认：0.00\n     *\n     * @precision 10\n     * @scale 4\n     * @defaultValue 0.01\n     */\n    private BigDecimal balance;\n    /**\n     * 出生日期，格式：yyyy-MM-dd HH:mm:ss\n     */\n    private LocalDateTime birthday;\n    /**\n     * 用户状态；0 正常(默认)，1 已冻结，2 账号已封，3 账号异常\n     *\n     * @defaultValue 3\n     */\n    private Integer status;\n    /**\n     * 账户注销状态；0 未注销（默认），1 已销户\n     *\n     * @defaultValue 1\n     * @dbDataType SMALLINT\n     */\n    private Integer deleted;\n    /**\n     * 注册时间，格式: yyyy-MM-dd\n     */\n    private LocalDate registrarDate;\n    /**\n     * 会员加速开始时间, 格式：HH:mm:ss\n     */\n    private LocalTime accelerateBeginTime;\n    /**\n     * 会员加速结束时间, 格式：HH:mm:ss\n     */\n    private LocalTime accelerateEndTime;\n    /**\n     * 修改时间\n     */\n    private LocalDateTime updateTime;\n}\n```\n\n- When sql with type of  `\tINSERT`，`UPDATE` Executed by `MyBatis` Executor, `nickname` will be encrypted, i.e:\n\n```log\nCreating a new SqlSession\nRegistering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69693f7a]\nJDBC Connection [HikariProxyConnection@1043294096 wrapping conn1: url=jdbc:h2:/Users/weasley/Development/IdeaProjects/mybatis-encrypt-spring-boot-parent/mybatis-encrypt-spring-boot-tests/h2 user=] will be managed by Spring\n==\u003e  Preparing: SELECT MAX(member_id) memberId FROM dtt_member\n==\u003e Parameters: \n\u003c==    Columns: MEMBERID\n\u003c==        Row: 5\n\u003c==      Total: 1\nReleasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69693f7a]\n2022-12-20 17:30:27.737  INFO 15312 --- [nio-8080-exec-1] com.example.controller.MemberController  : {\"memberId\":6,\"openId\":\"fawezOE5sT\",\"nickname\":\"蒋震南\",\"isEnable\":true,\"balance\":865,\"birthday\":\"2022-12-20 17:30:27\",\"status\":0,\"deleted\":1,\"registrarDate\":\"2022-12-20\",\"accelerateBeginTime\":\"17:30:27\",\"accelerateEndTime\":\"17:30:27\",\"updateTime\":\"2022-12-20 17:30:27\"}\nFetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69693f7a] from current transaction\n2022-12-20 17:30:27.822 DEBUG 15312 --- [nio-8080-exec-1] w.m.e.i.DefaultMybatisEncryptInterceptor : Encrypt field for 'nickname', Plaintext: 蒋震南, Ciphertext: IgaLfu2eBut5jAKENLZd3A==\n==\u003e  Preparing: INSERT INTO dtt_member ( member_id, open_id, nickname, is_enable, balance, birthday, status, deleted, registrar_date, accelerate_begin_time, accelerate_end_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )\n==\u003e Parameters: 6(Long), fawezOE5sT(String), IgaLfu2eBut5jAKENLZd3A==(String), true(Boolean), 865(BigDecimal), 2022-12-20T17:30:27.558(LocalDateTime), 0(Integer), 1(Integer), 2022-12-20(LocalDate), 17:30:27.558(LocalTime), 17:30:27.558(LocalTime), 2022-12-20T17:30:27.558(LocalDateTime)\n\u003c==    Updates: 1\n```\n\nReal SQL:\n\n```sql\nINSERT INTO dtt_member ( member_id, open_id, nickname, is_enable, balance, birthday, status, deleted, registrar_date, accelerate_begin_time, accelerate_end_time, update_time ) VALUES ( 6, 'fawezOE5sT', 'IgaLfu2eBut5jAKENLZd3A==', true, 865, '2022-12-20T17:30:27.558', 0, 1, '2022-12-20', '17:30:27.558', '17:30:27.558', '2022-12-20T17:30:27.558' );\n\n```\n\n\n\n- When sql with type of  `\tSELECT` Executed by `MyBatis` Executor, `nickname` will be decrypted, i.e:\n\n[API link](https://github.com/Weasley-J/mybatis-encrypt-spring-boot-parent/blob/8500f7454d5ec150b5ece6549f4608b38183af19/mybatis-encrypt-spring-boot-tests/src/main/java/com/example/controller/MemberController.java#L53): http://localhost:8080/api/member/page/pagehelper?pageNum=1\u0026pageSize=10\n\n```log\nJDBC Connection [HikariProxyConnection@670142194 wrapping conn1: url=jdbc:h2:/Users/weasley/Development/IdeaProjects/mybatis-encrypt-spring-boot-parent/mybatis-encrypt-spring-boot-tests/h2 user=] will not be managed by Spring\n==\u003e  Preparing: SELECT count(0) FROM dtt_member\n==\u003e Parameters: \n\u003c==    Columns: COUNT(*)\n\u003c==        Row: 6\n\u003c==      Total: 1\n==\u003e  Preparing: SELECT member_id,open_id,nickname,is_enable,balance,birthday,status,deleted,registrar_date,accelerate_begin_time,accelerate_end_time,update_time FROM dtt_member LIMIT ?\n==\u003e Parameters: 10(Integer)\n\u003c==    Columns: MEMBER_ID, OPEN_ID, NICKNAME, IS_ENABLE, BALANCE, BIRTHDAY, STATUS, DELETED, REGISTRAR_DATE, ACCELERATE_BEGIN_TIME, ACCELERATE_END_TIME, UPDATE_TIME\n\u003c==        Row: 1, fawezOE5sT, IgaLfu2eBut5jAKENLZd3A==, TRUE, 865.0000, 2022-12-20 13:33:46.547, 0, 1, 2022-12-20, 13:33:47, 13:33:47, 2022-12-20 13:33:46.547\n\u003c==        Row: 2, fawezOE5sT, IgaLfu2eBut5jAKENLZd3A==, TRUE, 865.0000, 2022-12-20 13:33:49.226, 0, 1, 2022-12-20, 13:33:49, 13:33:49, 2022-12-20 13:33:49.226\n\u003c==        Row: 3, fawezOE5sT, IgaLfu2eBut5jAKENLZd3A==, TRUE, 865.0000, 2022-12-20 13:33:50.398, 0, 1, 2022-12-20, 13:33:50, 13:33:50, 2022-12-20 13:33:50.398\n\u003c==        Row: 4, fawezOE5sT, IgaLfu2eBut5jAKENLZd3A==, TRUE, 865.0000, 2022-12-20 13:33:51.319, 0, 1, 2022-12-20, 13:33:51, 13:33:51, 2022-12-20 13:33:51.319\n\u003c==        Row: 5, fawezOE5sT, IgaLfu2eBut5jAKENLZd3A==, TRUE, 865.0000, 2022-12-20 13:33:52.31, 0, 1, 2022-12-20, 13:33:52, 13:33:52, 2022-12-20 13:33:52.31\n\u003c==        Row: 6, fawezOE5sT, IgaLfu2eBut5jAKENLZd3A==, TRUE, 865.0000, 2022-12-20 17:30:27.558, 0, 1, 2022-12-20, 17:30:28, 17:30:28, 2022-12-20 17:30:27.558\n\u003c==      Total: 6\n2022-12-20 17:45:12.534 DEBUG 15634 --- [nio-8080-exec-1] w.m.e.i.DefaultMybatisEncryptInterceptor : Decrypt field for 'nickname', Ciphertext: IgaLfu2eBut5jAKENLZd3A==, Plaintext: 蒋震南\n2022-12-20 17:45:12.534 DEBUG 15634 --- [nio-8080-exec-1] w.m.e.i.DefaultMybatisEncryptInterceptor : Decrypt field for 'nickname', Ciphertext: IgaLfu2eBut5jAKENLZd3A==, Plaintext: 蒋震南\n2022-12-20 17:45:12.534 DEBUG 15634 --- [nio-8080-exec-1] w.m.e.i.DefaultMybatisEncryptInterceptor : Decrypt field for 'nickname', Ciphertext: IgaLfu2eBut5jAKENLZd3A==, Plaintext: 蒋震南\n2022-12-20 17:45:12.535 DEBUG 15634 --- [nio-8080-exec-1] w.m.e.i.DefaultMybatisEncryptInterceptor : Decrypt field for 'nickname', Ciphertext: IgaLfu2eBut5jAKENLZd3A==, Plaintext: 蒋震南\n2022-12-20 17:45:12.535 DEBUG 15634 --- [nio-8080-exec-1] w.m.e.i.DefaultMybatisEncryptInterceptor : Decrypt field for 'nickname', Ciphertext: IgaLfu2eBut5jAKENLZd3A==, Plaintext: 蒋震南\n2022-12-20 17:45:12.535 DEBUG 15634 --- [nio-8080-exec-1] w.m.e.i.DefaultMybatisEncryptInterceptor : Decrypt field for 'nickname', Ciphertext: IgaLfu2eBut5jAKENLZd3A==, Plaintext: 蒋震南\nClosing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4b849667]\n```\n\nSQL\n\n```sql\nSELECT member_id,open_id,nickname,is_enable,balance,birthday,status,deleted,registrar_date,accelerate_begin_time,accelerate_end_time,update_time FROM dtt_member LIMIT 10;\n```\n\nFinally, you can get some results  like this:\n\n```json\n{\n  \"pageNum\": 1,\n  \"pageSize\": 10,\n  \"total\": 6,\n  \"pages\": 1,\n  \"list\": [\n    {\n      \"memberId\": 1,\n      \"openId\": \"fawezOE5sT\",\n      \"nickname\": \"蒋震南\",\n      \"isEnable\": true,\n      \"balance\": 865.0000,\n      \"birthday\": \"2022-12-20T13:33:46.547\",\n      \"status\": 0,\n      \"deleted\": 1,\n      \"registrarDate\": \"2022-12-20\",\n      \"accelerateBeginTime\": \"13:33:47\",\n      \"accelerateEndTime\": \"13:33:47\",\n      \"updateTime\": \"2022-12-20T13:33:46.547\"\n    },\n    {\n      \"memberId\": 2,\n      \"openId\": \"fawezOE5sT\",\n      \"nickname\": \"蒋震南\",\n      \"isEnable\": true,\n      \"balance\": 865.0000,\n      \"birthday\": \"2022-12-20T13:33:49.226\",\n      \"status\": 0,\n      \"deleted\": 1,\n      \"registrarDate\": \"2022-12-20\",\n      \"accelerateBeginTime\": \"13:33:49\",\n      \"accelerateEndTime\": \"13:33:49\",\n      \"updateTime\": \"2022-12-20T13:33:49.226\"\n    },\n    {\n      \"memberId\": 3,\n      \"openId\": \"fawezOE5sT\",\n      \"nickname\": \"蒋震南\",\n      \"isEnable\": true,\n      \"balance\": 865.0000,\n      \"birthday\": \"2022-12-20T13:33:50.398\",\n      \"status\": 0,\n      \"deleted\": 1,\n      \"registrarDate\": \"2022-12-20\",\n      \"accelerateBeginTime\": \"13:33:50\",\n      \"accelerateEndTime\": \"13:33:50\",\n      \"updateTime\": \"2022-12-20T13:33:50.398\"\n    },\n    {\n      \"memberId\": 4,\n      \"openId\": \"fawezOE5sT\",\n      \"nickname\": \"蒋震南\",\n      \"isEnable\": true,\n      \"balance\": 865.0000,\n      \"birthday\": \"2022-12-20T13:33:51.319\",\n      \"status\": 0,\n      \"deleted\": 1,\n      \"registrarDate\": \"2022-12-20\",\n      \"accelerateBeginTime\": \"13:33:51\",\n      \"accelerateEndTime\": \"13:33:51\",\n      \"updateTime\": \"2022-12-20T13:33:51.319\"\n    },\n    {\n      \"memberId\": 5,\n      \"openId\": \"fawezOE5sT\",\n      \"nickname\": \"蒋震南\",\n      \"isEnable\": true,\n      \"balance\": 865.0000,\n      \"birthday\": \"2022-12-20T13:33:52.31\",\n      \"status\": 0,\n      \"deleted\": 1,\n      \"registrarDate\": \"2022-12-20\",\n      \"accelerateBeginTime\": \"13:33:52\",\n      \"accelerateEndTime\": \"13:33:52\",\n      \"updateTime\": \"2022-12-20T13:33:52.31\"\n    },\n    {\n      \"memberId\": 6,\n      \"openId\": \"fawezOE5sT\",\n      \"nickname\": \"蒋震南\",\n      \"isEnable\": true,\n      \"balance\": 865.0000,\n      \"birthday\": \"2022-12-20T17:30:27.558\",\n      \"status\": 0,\n      \"deleted\": 1,\n      \"registrarDate\": \"2022-12-20\",\n      \"accelerateBeginTime\": \"17:30:28\",\n      \"accelerateEndTime\": \"17:30:28\",\n      \"updateTime\": \"2022-12-20T17:30:27.558\"\n    }\n  ]\n}\n```\n\n\n\n# Q \u0026 A\n\n## 1 How can I use some encrypted fields as query criteria？\n\n**Exclude `LIKE` SQL grammar**\n\n- You can use this `API` [`EncryptStrategy#convert`](https://github.com/Weasley-J/mybatis-encrypt-spring-boot-parent/blob/main/mybatis-encrypt-spring-boot-starter/src/main/java/io/github/weasleyj/mybatis/encrypt/core/EncryptStrategy.java#L29) to convert your plain bean as a cipher bean (Only converts the field annotated by annotation [`@Encryption`](https://github.com/Weasley-J/mybatis-encrypt-spring-boot-parent/blob/8500f7454d/mybatis-encrypt-spring-boot-starter/src/main/java/io/github/weasleyj/mybatis/encrypt/annotation/Encryption.java)), [Here is an Example that you can reference](https://github.com/Weasley-J/mybatis-encrypt-spring-boot-parent/blob/350b08c2b6/mybatis-encrypt-spring-boot-tests/src/test/java/com/example/EncryptionTestsAppTests.java#L101).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweasley-j%2Fmybatis-encrypt-spring-boot-parent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweasley-j%2Fmybatis-encrypt-spring-boot-parent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweasley-j%2Fmybatis-encrypt-spring-boot-parent/lists"}