美文网首页Android那点事
Android数据库之LitePal笔记

Android数据库之LitePal笔记

作者: NickelFox | 来源:发表于2017-05-12 22:59 被阅读154次

    郭神博客传送门

    一. 什么是LitePal?

    LitePal是郭神写的开源Android数据库框架,采用了对象-关系映射(ORM),并对数据库常用操作进行了封装,Github地址是https://github.com/LitePalFramework/LitePal

    二. 优点

    • 实现了ORM映射,不用自己对Cursor进行封装。
    • 简化了SQLiteDatabase的CURD操作。

    三. 使用方法

    1. 先进行各种配置

    • 添加依赖
    compile 'org.litepal.android:core:1.5.1'//版本号以官方最新为准
    
    • 在assets(Project\app\src\main\assets)文件夹下(若没有该文件夹,手动添加),添加配置文件litepal.xml(用来配置数据库名、版本等信息)
    <?xml version="1.0" encoding="utf-8"?>
    <litepal>
        <!--
            用来定义数据库名,应该以.db结束,但是可以不写,LitePal会自动添加
        -->
        <dbname value="demo" />
    
        <!--
            定义数据库版本号,每次升级数据库配置的时候应该将该值加1,初始版本为1
        -->
        <version value="1" />
    
        <!--
            在mapping子标签里定义要映射的类
            例如:
            <list>
                <mapping class="com.test.model.Reader" />
                <mapping class="com.test.model.Magazine" />
            </list>
        -->
        <list>
        </list>
        
        <!--
            定义数据库文件存放的位置,internal代表储存在内置存储,external代表储存在外部存储。可以不写,默认是internal。
            例如:
            <storage value="external" />
        -->
    <storage value="internal" />
    </litepal>
    
    • 配置application
    <manifest>
        <application
            android:name="org.litepal.LitePalApplication"
            ...
        >
            ...
        </application>
    </manifest>
    

    如果已经配置过application,则在自己application的onCreate添加LitePal.initialize(this);

    2. 配置完成,开始使用

    1. 新建数据库
      • 新建JavaBean
    public class Demo {
        /*@Column注解可以为映射的列添加约束,共有四个值
        * nullable 是否为空约束
        * unique 唯一约束
        * ignore 映射的时候忽略的属性
        * defaultValue 默认值设置
        * */
        @Column(nullable = false,unique = true,ignore = false,defaultValue = "123")
        private String name;
    
        @Column(nullable = false ,defaultValue = "18")
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    
    • 将bean添加到模型映射中
    <list>
            <mapping class="bean1"/>
            <mapping class="bean2"/>
            <mapping class="bean3"/>
        </list>
    
    • 调用LitePal.getDatabase(),Lite Pal就会创建数据库
    1. 升级数据库
      • 升级的时候要是要加入新的Bean则添加映射,然后再将litepal.xml里面的版本号加1即可
      • 升级数据库过程数据不会丢失
    2. 添加数据
      • 将bean类继承自DataSupport
      • 实例化bean,设置参数,调用save()方法就可以将数据插入数据库了
    Album album = new Album();
    album.setName("album");
    album.setPrice(10.99f);
    album.setCover(getCoverImageBytes());
    album.save();
    Song song1 = new Song();
    song1.setName("song1");
    song1.setDuration(320);
    song1.setAlbum(album);
    song1.save();
    Song song2 = new Song();
    song2.setName("song2");
    song2.setDuration(356);
    song2.setAlbum(album);
    song2.save();
    
    1. 删除数据
      • delete(bean.class,rowId)方法(删除某张表中rowid对应的行)
    DataSupport.delete(Song.class, id);
    
    • deleteAll(bean.class,String...conditions)方法(根据conditions条件删除表中的数据)
    DataSupport.deleteAll(Song.class, "duration > ?" , "350");
    
    1. 修改(更新)数据
      • save()(找到已经存在的对象,然后重新设置属性,重新save)
    Album albumToUpdate = DataSupport.find(Album.class, 1);
    albumToUpdate.setPrice(20.99f); // raise the price
    albumToUpdate.save();
    
    • update(int rowId)(新建对象,设置要更改的属性,调用update方法,更新要更新的行)
    Album albumToUpdate = new Album();
    albumToUpdate.setPrice(20.99f); // raise the price
    albumToUpdate.update(id);
    
    • updateAll(bean.class,String... conditinos)(更新满足条件的行)
    Album albumToUpdate = new Album();
    albumToUpdate.setPrice(20.99f); // raise the price
    albumToUpdate.updateAll("name = ?", "album");
    
    1. 查询数据
      • 通过find(bean.class,int rowId)查找指定行
    Song song = DataSupport.find(Song.class, id);
    
    • 通过findAll(bean.class,long... ids)查找想要查找的行
    List<Song> allSongs = DataSupport.findAll(Song.class);//查找所有行
    List<Song> allSongs = DataSupport.findAll(Song.class,1,2,3);//查找前三行
    
    • 连缀查询
    连缀查询 连缀查询续
    • 原生查询
    Cursor cursor = DataSupport.findBySQL(String sql)
    

    四. 更多操作

    • 分页操作:采用连缀查询,用limit限制每页展示的条数,用offset设置偏移量来查询需要的数据
    /**
         * 分页查询
         * @param offset 偏移量,用来查询分页数据,刚开始offset为0,查询前20条,然后offset设置为20,就查询21-40的数据,以此类推
         * @return 查询到的数据List
         */
        public static List<User> queryPagingData(int offset){
            List<User> userList = DataSupport.select("name","age","gender")
                    .where()
                    .limit(20)
                    .offset(offset)
                    .find(User.class);
            return userList;
        }
    

    相关文章

      网友评论

        本文标题:Android数据库之LitePal笔记

        本文链接:https://www.haomeiwen.com/subject/hhzztxtx.html