Pocket

Pocket 是一个轻量级的 Java ORM 数据库映射框架,支持多数据源配置、实体类注解、CRUD 操作、条件查询、事务管理等功能,适用于简化数据库操作。

Check out Pocket on CurateClick

• Copy the embed code to showcase this product on your website

• Share on X to spread the word about this amazing tool

Build Status Codacy Badge# Pocket🚀If you have an improvement, I will be happy to get a pull request from you!  Github ---To get a Git project into your build:Step 1. Add the JitPack repository to your build fileAdd it in your root build.gradle at the end of repositories:allprojects {repositories {...maven { url 'https://jitpack.io' }}}Step 2. Add the dependencydependencies { implementation 'com.github.leyan95:pocket:Tag'}_## 多数据源配置这里以MySQL数据库为例### 配置信息jsonpocket: serverId: 200 datasource: node: - url: jdbc:mysql://127.0.0.1:3306/pocket1 nodeName: mysql-01 driverName: com.mysql.cj.jdbc.Driver showSql: false user: root password: root poolMiniSize: 10 poolMaxSize: 15 timeout: 1000 session: homo,user - url: jdbc:mysql://127.0.0.1:3306/pocket2 nodeName: mysql-02 driverName: com.mysql.cj.jdbc.Driver showSql: true user: root password: root poolMiniSize: 10 poolMaxSize: 15 timeout: 1000 ##根据session找到数据库并从数据库对应的连接池中获取数据库链接,故所有session不可重复 session: session1,session2## 实体类规范### 主类java@Entity(table = "TBL_ORDER", tableId = 200)public class Order extends BaseEntity { private static final long serialVersionUID = 2560385391551524826L; @Column(name = "CODE") private String code; @Column(name = "PRICE") private BigDecimal price; @Column(name = "DAY") private Date day; @Column(name = "TIME") private Date time; @Column(name = "STATE") private Boolean state; @Join(columnName = "TYPE", businessName = "订单支付方式", joinTable = "TBL_ORDER_TYPE", joinMethod = JoinMethod.LEFT, bridgeColumn = "UUID", destinationColumn = "NAME") private String type; @OneToMany(clazz = Commodity.class, bridgeField = "order") private List<Commodity> commodities; // 这里省略 getter setter}### 明细类java@Entity(table = "TBL_COMMODITY", tableId = 201, businessName = "订单明细")public class Commodity extends BaseEntity { private static final long serialVersionUID = -6711578420837877371L; @Column(name = "NAME") private String name; @Column(name = "PRICE") private BigDecimal price; @ManyToOne(columnName = "ORDER_UUID", clazz = Order.class, upBridgeField = "uuid") private Long order; // getter setter}> - 继承BaseEntity抽象类(数据标识为String)> - 类注解@Entitytable 对应数据库表名;tableId 对应数据库表标识,目的是为了在生成数据标识的时候区分表;uuidGenerator 对应主键生成策略,默认 increment,可通过集继承AbstractUuidGenerator 自定义主键生成策。> - 属性注解@Columnname 对应数据库中对应的列名称> - 属性注解@OneToManyclazz 对应子类的类类型,name 对应该表数据标识在其子表中的字段名称> - 属性注解@ManyToOnename 关联主表数据标识的列名称## 数据操作(具体操作请参考接口文档)#### 获取缓存对象通过SessionFactory的静态方法Session getSession(String sessionName)获取对象。#### 使用 Session 进行数据操作java// 开启事务this.session = SessionFactory.getSession("homo");this.session.open();this.transaction = session.getTransaction();this.transaction.begin();// 查询RelevantBill order = (RelevantBill) this.session.findOne(RelevantBill.class, "10130");System.out.println(order.getCode());order.setCode("Hello-001");// 更新this.session.update(order);System.out.println(order.getCode());// 删除this.session.delete(order);// 关闭事务this.transaction.commit();this.session.close();#### 使用 Criteria 根据条件查询数据java// 此处省略session开关操作Criteria criteria = this.session.createCriteria(Order.class);criteria.add(Restrictions.like("code", "%A%")) .add(Restrictions.or( Restrictions.gt("price", 13), Restrictions.lt("price", 12.58) )) .add(Sort.desc("price")) .add(Sort.asc("uuid")) .limit(0, 5);List orderList = criteria.list();#### 使用 Criteria 更新数据java// 此处省略session开关操作Criteria criteria = this.session.createCriteria(Order.class);criteria.add(Modern.set("price", 500.5D)) .add(Modern.set("day", new Date()) .add(Restrictions.equ("code", "C-001")));System.out.println(criteria.update());// 为保持数据一致性,已支持表达式更新,// # 后面跟对应对象中的属性名,// : 后对应参数(后面不要忘了调用setParameter)session.createCriteria(Order.class) // 在原数据基础上进行拼接 .add(Modern.setWithPoEl("#code = CONCAT_WS('', #code, :STR_VALUE)")) // 在原数据的基础上进行加操作 .add(Modern.setWithPoEl("#price = #price + :ADD_PRICE")) //条件过滤 .add(Restrictions.equ("uuid", "10")) // 给 :STR_VALUE 参数赋值 .setParameter("STR_VALUE", " - A") // 给 :ADD_PRICE 参数赋值 .setParameter("ADD_PRICE", 100) // 执行更新操作 .update(); #### 使用 Criteria 根据条件删除数据java// 此处省略session开关操作Criteria criteria = session.createCriteria(Order.class);criteria.add(Restrictions.equ("uuid", 1011011L));criteria.delete();#### 使用 SQLQueryjavaSQLQuery query = this.session.createSQLQuery("select uuid,code,price from tbl_order", Order.class);Order order = (Order) query.unique();SQLQuery query = this.session.createSQLQuery("select uuid,code,price from tbl_order", Order.class);List<Order> orders = query.limit(0, 5).list();#### 使用 ProcessQuery 调用存储过程查询数据java// 省略session开关操作ProcessQuery<Order> processQuery = session.createProcessQuery("{call test(?)}");processQuery.setParameters(new String[]{"蚂蚁"});Function<ResultSet, Order> mapperFunction = (resultSet) -> { try { Order order = new Order(); order.setCode(resultSet.getString(1)); return order; } catch (SQLException e) { e.printStackTrace(); return null; }};Order order = processQuery.unique(mapperFunction);System.out.println(order.getCode());#### 保存历史数据 @Track | 参数 | 值 || --- | --- || data | 存储对哪个实体操作的历史数据 || operator | 操作人 || operate | 操作类型 OperateEnum  |java@Repositorypublic class UserRepositoryImpl extends AbstractRepository implements UserRepository { @Override @Track(data = "#user", operator = "#avatar", operate = OperateEnum.SAVE) public int save(User user, String avatar) { user.setEnable(true); return this.getSession().save(user); }}> 笔者不建议在程序中拼写 SQL, 故未对 SQLQuery ProcessQuery 做过多的支持,此处就不做赘述。> 在接下来的版本中将会支持将 SQL 写在 xml 文件中的方式。 ## LicenseMIT

Latest Weekly Picks

make.ink favicon
Weekly Pick

Your AI tattoo generator for pro-grade concepts

Leo Wade
sellfy.com favicon
Weekly Pick

A code-free online store builder to turn views into revenue. Sell digital products, subscriptions, and merch, without fees or hassle.

Maris
www.videotoblog.ai favicon
Weekly Pick

Convert videos into awesome blog posts.

Video To Blog
www.sellerpic.ai favicon
Weekly Pick

SellerPic is the all-in-one AI design platform for e-commerce

SellerPic
fastimage.ai favicon
Weekly Pick

Fast Image AI instantly transforms your photos into stunning styles like Ghibli, Sketch, and Pixar. Effortlessly control image elements and create amazing effects with just one click.

Fast AI Team
linkedinpro.daisy.so favicon
Weekly Pick

AI-powered tool that transforms casual photos into professional LinkedIn headshots instantly. No photographer needed—just upload and download.

Gabriel
crevas.ai favicon
Weekly Pick

Crevas unifies Veo 3, Sora 2, Nano Banana and more into one intuitive canvas — so filmmakers can script, prompt, and generate cinematic stories without switching tools or losing consistency.

Spark Alpha
fotominiatur.com favicon
Weekly Pick

AI Foto Edit - Text to Image & Image Edit

foto miniatur