美文网首页
第三方库之 LitePal

第三方库之 LitePal

作者: Kevin_小飞象 | 来源:发表于2021-07-13 16:16 被阅读0次

    目前最新版本是 3.2.3。
    GitHub:LitePal

    基本用法

    1. 在 build.gradle 添加依赖:
        // 数据库
        implementation 'org.litepal.guolindev:core:3.2.3'
    
    1. 在 assets 配置 litepal.xml
    <?xml version="1.0" encoding="utf-8"?>
    <litepal>
        <dbname value="lottery" ></dbname>
    
        <version value="1" ></version>
    
        <list>
            <mapping class="com.hk.hktlottery.db.Prize"></mapping>
        </list>
    </litepal>
    
    1. 配置 LitePalApplication
    /**
     * Created on 2021/6/22 14:16
     *
     * @author Gong Youqiang
     */
    public class MyApp extends LitePalApplication {
        private static Application mApplication;
    
        @Override
        public void onCreate() {
            super.onCreate();
            mApplication = this;
            LitePal.initialize(this);
            //获取到SQLiteDatabase的实例,创建数据库表
            SQLiteDatabase db = LitePal.getDatabase();
        }
    
        public static Context getAppContext() {
            return mApplication;
        }
    
    }
    

    开始建表

    1. Prize.java
    /**
     * Created on 2021/7/12 10:21
     *
     * @author Gong Youqiang
     */
    public class Prize extends LitePalSupport {
        @Column(unique = true)
        private int id;
        @Column(nullable = false)
        private String level;
        @Column(nullable = false)
        private String name;
        @Column(nullable = false)
        private int num;
    
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getLevel() {
            return level;
        }
    
        public void setLevel(String level) {
            this.level = level;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getNum() {
            return num;
        }
    
        public void setNum(int num) {
            this.num = num;
        }
    }
    

    升级表

    1. Comment.java
    public class Comment extends LitePalSupport {
        
        private int id;
        
        private String content;
        
        // 自动生成get、set方法 
        ...
    }
    
    1. 修改 litepal.xml 中的配置,在映射列表中新增 Comment 类,并将版本号加 1
    <?xml version="1.0" encoding="utf-8"?>
    <litepal>
        <dbname value="lottery" ></dbname>
    
        <version value="2" ></version>
    
        <list>
            <mapping class="com.hk.hktlottery.db.Prize"></mapping>
            <mapping class="com.hk.hktlottery.db.Comment"></mapping>
        </list>
    </litepal>
    

    增删改查

    Prize prize = new Prize();
    prize.setId(list.size());
    prize.setLevel("一等奖");
    prize.setName("奖励 100 元");
    prize.setNum(1);
    prize.save();    //这一句代码就是将一条记录存储进数据库中
    
    // 删除单个记录,id=1
    LitePal.delete(Prize.class,1);
    
    //删除数据库中Prize表的所有记录 
    LitePal.deleteAll(Prize.class); 
    
    //删除数据库Prize表中duration大于3500的记录 
    LitePal.deleteAll(Prize.class, "duration > ?" , "3500"); 
    

    1. 方法一:
    //第一步,查找id为1的记录 
    Movie movie = LitePal.find(Movie.class, 1); 
    //第二步,改变某个字段的值 
    movie.setPrice(4020f); 
    //第三步,保存数据 
    movie.save(); 
    

    方法二:

    Movie movie=new Movie(); 
    movie.setName("2Diots"); 
    movie.setDirector("某人");
     //直接更新id为1的记录 
     movie.update(1);
    

    方法三:

    Movie movie=new Movie(); 
    movie.setDirector("someone"); 
    //更新所有name为2Diots的记录,将director字段设为someone 
    movie.updateAll("name = ?", "2Diots");
    
    Movie movie=new Movie(); 
    movie.setName("someone"); 
    movie.setDirector("someone"); 
    //将更新所有name为2Diots,director为gpf的记录name和director均改为someone
    movie.updateAll("name=? and director=?", "2Diots","gpf");
    
       //查找movie表的所有记录,返回值是一个泛型为Movie的List集合
    List<Movie> allMovies = LitePal.findAll(Movie.class); 
    
    //查找movie表id为1的记录 
    Movie movie = LitePal.find(Movie.class,1); 
    
    // 比如获取news表中的第一条数据
    News firstNews = LitePal.findFirst(News.class);
    
    // 获取News表中的最后一条数据
    News lastNews = LitePal.findLast(News.class);
    
    // 想把news表中id为1、3、5、7的数据都查出来
    List<News> newsList = LitePal.findAll(News.class, 1, 3, 5, 7);
    // 或者
    long[] ids = new long[] { 1, 3, 5, 7 };
    List<News> newsList = LitePal.findAll(News.class, ids);
    
    //查找name为2Diots的记录,并且以时长作排序,where()方法接收任意个字符串参数,其中第一个参数用于进行条件约束,
    //从第二个参数开始,都是用于替换第一个参数中的占位符的。那这个where()方法就对应了一条SQL语句中的where部分。 
    List<Movie> movies = LitePal.where("name = ?", "2Diots").order("duration").find(Movie.class); 
    // 但是这样会将news表中所有的列都查询出来,也许你并不需要那么多的数据,而是只要title和content这两列数据。那么也很简单,我们只要再增加一个连缀就行了,如下所示:
    List<News> newsList = LitePal.select("title", "content")
            .where("commentcount > ?", "0").find(News.class);
    //将查询出的新闻按照发布的时间倒序排列,即最新发布的新闻放在最前面,那就可以这样写:
    List<News> newsList = LitePal.select("title", "content")
            .where("commentcount > ?", "0")
            .order("publishdate desc").find(News.class);
    //order()方法中接收一个字符串参数,用于指定查询出的结果按照哪一列进行排序,asc表示正序排序,desc表示倒序排序,因此order()方法对应了一条SQL语句中的order by部分。
    //也许你并不希望将所有条件匹配的结果一次性全部查询出来,因为这样数据量可能会有点太大了,而是希望只查询出前10条数据,那么使用连缀同样可以轻松解决这个问题,代码如下所示:
    List<News> newsList = LitePal.select("title", "content")
            .where("commentcount > ?", "0")
            .order("publishdate desc").limit(10).find(News.class);
    //limit()方法接收一个整型参数,用于指定查询前几条数据,这里指定成10,意思就是查询所有匹配结果中的前10条数据。
    //刚才我们查询到的是所有匹配条件的前10条新闻,那么现在我想对新闻进行分页展示,翻到第二页时,展示第11到第20条新闻,只需要再连缀一个偏移量就可以了,如下所示:
    List<News> newsList = LitePal.select("title", "content")
            .where("commentcount > ?", "0")
            .order("publishdate desc").limit(10).offset(10)
            .find(News.class);
    //这里指定成10,就表示偏移十个位置,那么原来是查询前10条新闻的,偏移了十个位置之后,就变成了查询第11到第20条新闻了,如果偏移量是20,那就表示查询第21到第30条新闻
    
    //查找所有年龄小于25岁的人
    List<Person> person = LitePal.where("age < ?", 25).find(Person.class); 
    

    参考:
    Android数据库高手秘籍

    相关文章

      网友评论

          本文标题:第三方库之 LitePal

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