1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/tsc9526-monalisa-orm

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Возможности

  • Использование базы данных занимает всего 1 строку кода.
  • Общие функции ORM (CRUD).
  • Автоматическое создание DTO.
  • Поля объектов.
  • Динамическая перезагрузка SQL.
  • Поддержка сегментирования.
  • Простое написание многострочных строк.

5-минутное видео: Youtube, YouKu.

Пример проекта: https://github.com/11039850/monalisa-example. Плагин Eclipse: https://github.com/11039850/monalisa-orm/wiki/Code-Generator#eclipse-plugin.

Использование

Применение базы данных с плагином

Применение базы данных без плагина

@DB(url="jdbc:mysql://127.0.0.1:3306/test" ,username="root", password="root")
public interface TestDB{
    public static DBConfig DB=DBConfig.fromClass(TestDB.class);  
    
    public static class NewsModelGenerator{
        public static void main(String[] args) {
            DBModelGenerateMain.generateModelClass(TestDB.class);
        }
    }
}
new User().setName("zzg.zhou").setStatus(1).save();

Автоматическое создание DTO (требуется плагин для Eclipse)

public class UserBlogDao {
    @Select(name="test.result.UserBlogs")      // <--- Автоматически создать/обновить: test.result.UserBlogs
    public List  selectUserBlogs(int user_id){ // <--- Автоматически заменить List на List<UserBlogs>
        Query q=TestDB.DB.createQuery();
                        
        q.add(""/**~{
            SELECT a.id, a.name, b.title, b.content, b.create_time
                FROM user a, blog b   
                WHERE a.id=b.user_id AND a.id=?     
        }*/, user_id);
             
        return q.getList();               // <--- Автоматически заменить getList() на getList<UserBlogs>
    } 
}

Служба базы данных

Прямой доступ к базе данных через HTTP, см.: monalisa-service.

curl http://localhost:8080/your_web_app/dbs/testdb/your_table_name

Пример запроса

Вставка

//insert
new User().setName("zzg.zhou").setStatus(1).save();

//parse data from type: Map, json/xml string, JsonObject(Gson), HttpServletRequest, JavaBean
new User().parse("{'name':'oschina','status':0}").save();
new User().parse("<data> <name>china01</name><status>1</status> </data>").save();
new User().parse(request).save();

//Object field
Address address=new Address("guangdong","shenzhen");
user.setAddress(address).save();

//File field
String detail_save_path="path/001.txt";
String content="This is a big text.";
user.setDetail(path,content.getBytes()).save(); 
user.getDetailAsString();

Удаление

//delete user by primary key or unique key
user.delete();

//SQL: DELETE FROM `user` WHERE `name`='china01'
User.WHERE().name.eq("china01").delete();

User.DELETE().deleteAll();
User.DELETE().truncate();     

Обновление

//update by primary key
User user=User.SELECT().selectOne("name=?", "zzg.zhou");
user.setStatus(3).update();


//SQL: UPDATE user SET name='tsc9526' WHERE name like 'zzg%'    
User updateTo=new User().setName("tsc9526");
User.WHERE().name.like("zzg%").update(updateTo);

Выбор

//select by primary key
User.SELECT().selectByPrimaryKey(1);

//SQL: SELECT * FROM `user` WHERE `name` = 'zzg.zhou'
User.SELECT().selectOne("name=?", "zzg.zhou");

//SQL: SELECT `name`, `status` FROM `user`
User.SELECT().include("name","status").select();

//SQL: SELECT * FROM `user` WHERE (`name` like 'zzg%' AND `status` >= 0) 
``` **Перевод текста на русский язык:**

### Запрос

```java
    OR (`name` = 'zzg' AND `status` > 1) ORDER BY `status` ASC 
        for(User x:User.WHERE()
                .name.like("zzg%").status.ge(0)
                .OR()
                .name.eq("zzг").status.gt(1)
                .status.asc()
                .SELECT().select()){ //SELECT / delete / update
            System.out.println(x);
        }
        
        //Page
        Page<User> page=User.WHERE()
            .name.like("zzg%")
            .status.in(1,2,3)
            .SELECT().selectPage(10,0); 

Query

    TestDB.DB.select("SELECT * FROM user WHERE name like ?","zzg%");
    
    TestDB.DB.createQuery()
        .add("SELECT * FROM user WHERE name like ?","zzg%")
        .getList(User.class);
     ```

### DataTable   

```java
    Query q=new Query(TestDB.DB);
    DataTable<DataMap> rs=q.add("SELECT * FROM user WHERE name like ?","zzg%")
     .add(" AND status ").in(1,2,3)
     .getList();
     
    //Query inside DataTable
    //SQL: SELECT name, count(*) as cnt FROM _THIS_TABLE WHERE status>=0 GROUP BY name ORDER BY name ASC
    DataTable<DataMap> newTable=rs.select("name, count(*) as cnt","status>=0","name ASC","GROUP BY name");  

Transaction

    //transaction
    Tx.execute(new Tx.Atom() {
        public int execute() {
            new User().setName("name001").setStatus(1).save();
            new User().setName("name002").setStatus(2).save();
            //... other database operation
            return 0;
        }
    });

Record

    //Dynamic model: Record
    Record r=new Record("user").use(TestDB.DB);
    r.set("name", "jjyy").set("status",1)
     .save();
        
    //SQL: SELECT * FROM `user` WHERE (`name` like 'jjyy%' AND `status` >= 0)
    //                             OR (`name` = 'zzg' AND `status` > 1) ORDER BY `status` ASC 
    for(Record x:r.WHERE()
            .field("name").like("jjyy%").field("status").ge(0)
            .OR()
            .field("name").eq("zzg").field("status").gt(1)
            .field("status").asc()
            .SELECT().select()){
        System.out.println(x);
    } 
        
    //SQL: DELETE FROM `user` WHERE `name` like 'jjyy%' AND `status` >= 0
    r.WHERE()
     .field("name").like("jjyy%").field("status").ge(0)
     .delete();

Sharding

    public class ShardingUser extends User{
        //Override
        public Table table(){
            String tableName= "user_"+( getId()%10 );
            return ModelMeta.createTable(tableName);
        }
        
        //Override
        public DBConfig db(){
            return getId()<10 ? TestDB.DB1 : TestDB.DB2;
        }
    }
    
    ShardingUser user1=new ShardingUser(1);
    user1.save(); //Will be saved to table: user_1, database: TestDB.DB1
    
    ShardingUser user2=new ShardingUser(15);
    user2.save(); //Will be saved to table: user_5, database: TestDB.DB2

Многострочные строки

см. Multiple-line-syntax

    public static void main(String[] args) {
        String name="zzg";
        
        String lines = ""/**~!{
            SELECT * 
                FROM user
                WHERE name="$name"
        }*/;
        
        System.out.println(lines);
    }

Вывод будет:

    SELECT * 
        FROM user
        WHERE name="zzg"

Детали

Maven:

    <dependency>
        <groupId>com.tsc9526</groupId>
        <artifactId>monalisa-orm</artifactId>
        <version>2.1.0</version>
    </dependency>

Журнал изменений

  • 2.1.0 Добавить диалект oracle
  • 2.0.0 Только Mysql

TODO list

  • Другие диалекты базы данных
  • Автоматическое обновление кеша запросов в фоновом режиме
  • ...

Если у вас есть какие-либо идеи или вы хотите помочь с разработкой, просто напишите мне сообщение.

Чжоу Цзэгу, 11039850@qq.com

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Это совершенно новое ORM-программное обеспечение (требуется только один jar-файл: gson). Для использования базы данных нужен всего 1 строчный код. Также можно автоматически генерировать DTO на основе динамического SQL-запроса. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/tsc9526-monalisa-orm.git
git@api.gitlife.ru:oschina-mirror/tsc9526-monalisa-orm.git
oschina-mirror
tsc9526-monalisa-orm
tsc9526-monalisa-orm
master