GitHub - biezhi/anima: ? Operate the database like Stream API.
source link: https://github.com/biezhi/anima
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
Anima
Anima
allows you to query database like SQL
and Stream
.
Feature
- Simple DSL
- H2、MySQL、SQLite、PostgreSQL、Oracle、SqlServer
- Paging support
- Flexible configuration
- Connection pool support
- Support
LocalDate
、LocalDateTime
- Support lambda expression
- SQL performance statistics
- Based Java8
Usage
As Gradle
compile 'io.github.biezhi:anima:0.0.5'
As Maven
<dependency> <groupId>io.github.biezhi</groupId> <artifactId>anima</artifactId> <version>0.0.5</version> </dependency>
? Although
Anima
can also be used by adding a jar package, we do not recommend doing this.
Examples
Open Connection
// MySQL Anima.open("jdbc:mysql://127.0.0.1:3306/demo", "root", "123456"); // SQLite Anima.open("jdbc:sqlite:./demo.db"); // H2 Anima.open("jdbc:h2:file:~/demo;FILE_LOCK=FS;PAGE_SIZE=1024;CACHE_SIZE=8192", "sa", ""); // DataSource DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl(blade.environment().getOrNull("jdbc.url")); dataSource.setUsername(blade.environment().getOrNull("jdbc.username")); dataSource.setPassword(blade.environment().getOrNull("jdbc.password")); Anima.open(dataSource);
? This operation only needs one time
public class User extends Model { private Integer id; private String userName; private Integer age; public User() { } public User(String userName, Integer age) { this.userName = userName; this.age = age; } }
Query
long count = select().from(User.class).count(); // SELECT COUNT(*) FROM users long count = select().from(User.class).where("age > ?", 15).isNotNull("user_name").count(); // SELECT COUNT(*) FROM users WHERE age > ? AND user_name IS NOT NULL User user = select().from(User.class).byId(2); // SELECT * FROM users WHERE id = ? List<User> users = select().from(User.class).byIds(1, 2, 3); // SELECT * FROM users WHERE id IN (?, ?, ?) String name = select().bySQL(String.class, "select user_name from users limit 1").one(); List<String> names = select().bySQL(String.class, "select user_name from users limit ?", 3); List<User> users = select().from(User.class).all(); // SELECT * FROM users List<User> users = select().from(User.class).like("user_name", "%o%").all(); // SELECT * FROM users WHERE user_name LIKE ?
limit
List<User> users = select().from(User.class).order("id desc").limit(5); // SELECT * FROM users ORDER BY id desc
paging
Page<User> userPage = select().from(User.class).order("id desc").page(1, 3); // SELECT * FROM users ORDER BY id desc LIMIT ?, ?
map
select().from(User.class).map(User::getUserName).limit(3).collect(Collectors.toList());
filter
select().from(User.class).filter(u -> u.getAge() > 10).collect(Collectors.toList());
lambda
User user = select().from(User.class).where(User::getUserName).eq("jack").one(); // SELECT * FROM users WHERE user_name = ?
List<User> user = select().from(User.class) .where(User::getUserName).notNull() .and(User::getAge).gt(10) .all(); // SELECT * FROM users WHERE user_name IS NOT NULL AND age > ?
Insert
Integer id = new User("biezhi", 100).save().asInt(); // INSERT INTO users(id,user_name,age) VALUES (?,?,?)
or
Anima.save(new User("jack", 100));
Batch Save
List<User> users = new ArrayList<>(); users.add(new User("user1", 10)); users.add(new User("user2", 11)); users.add(new User("user3", 12)); Anima.saveBatch(users);
? This operation will begin a transaction and rollback when there is a transaction that is unsuccessful.
Update
int result = update().from(User.class).set("user_name", newName).where("id", 1).execute(); // UPDATE users SET username = ? WHERE id = ?
or
int result = update().from(User.class).set("user_name", newName).where("id", 1).execute(); // UPDATE users SET user_name = ? WHERE id = ?
or
User user = new User(); user.setId(1); user.setUserName("jack"); user.update(); // UPDATE users SET user_name = ? WHERE id = ?
Delete
int result = delete().from(User.class).where("id", 1).execute(); // DELETE FROM users WHERE id = ?
or
User user = new User(); user.setAge(15); user.setUserName("jack"); user.delete(); // DELETE FROM users WHERE user_name = ? and age = ?
Transaction
Anima.atomic(() -> { int a = 1 / 0; new User("apple", 666).save(); }).catchException(e -> Assert.assertEquals(ArithmeticException.class, e.getClass()));
?
Anima
uses theatomic
method to complete a transaction. normally, the code will not throw an exception. when aRuntimeException
is caught, the transaction will berollback
.
Test Code
See here
License
Apache2
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK