Ormlite一对多配置

1.工具类

/**
 * Created by sail on 16/6/2.
 */
public class DataBaseHelper extends OrmLiteSqliteOpenHelper{
    private static final String TAG = "DataBaseHelper";
    private static final String TABLE_NAME = "ontomany.db";
    private static final int DATABASE_VERSION = 1;
    private static DataBaseHelper instance;
    private Dao<User,Integer> userDao;
    private Dao<Dept,Integer> deptDao;
    public DataBaseHelper(Context context) {
        super(context, TABLE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
        Log.d(TAG, "onCreate: ");
        try {
            TableUtils.createTable(connectionSource,User.class);
            TableUtils.createTable(connectionSource,Dept.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {

    }

    public static DataBaseHelper getInstance(Context context){
        if(null == instance){
            instance = new DataBaseHelper(context);
        }
        return instance;
    }

    public Dao<User,Integer> getUserDao(){
        if(null == userDao){
            try {
                userDao = getDao(User.class);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return userDao;
    }

    public Dao<Dept,Integer> getDeptDao(){
        if(null == deptDao){
            try {
                deptDao = getDao(Dept.class);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return deptDao;
    }

}

部门工具类

public class DeptDao {
    private Dao<Dept, Integer> deptDaoHelper;
    private DataBaseHelper dataBaseHelper;

    public DeptDao(Context context) {
        dataBaseHelper = DataBaseHelper.getInstance(context);
        deptDaoHelper = dataBaseHelper.getDeptDao();

    }

    /**
     * 保存所有
     */
    public void saveAll(List<Dept> depts) {
        for (Dept dept : depts
                ) {
            addDept(dept);
        }
    }

    public void addDept(Dept dept) {
        try {
            deptDaoHelper.createOrUpdate(dept);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    public void delete(int depetId){
        try {
            deptDaoHelper.deleteById(depetId);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void deleteObject(Dept dept){
        try {
            deptDaoHelper.delete(dept);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public List<Dept> loadAllByTag(int deptId) {
        List<Dept> postLists = new ArrayList<>();
        try {
            QueryBuilder<Dept, Integer> builder = deptDaoHelper
                    .queryBuilder();
            builder.where().eq("deptId", deptId);
            postLists = builder.query();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return postLists;
    }

    public Dept getDept(int deptId){
        Dept d = null;
        try {
            d = deptDaoHelper.queryForId(deptId);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return d;
    }

}

职工工具类:

public class UserDao {
    private Dao<User,Integer> userDaoHelper;
    private DataBaseHelper dataBaseHelper;

    public UserDao(Context context) {
        dataBaseHelper = DataBaseHelper.getInstance(context);
        userDaoHelper = dataBaseHelper.getUserDao();

    }

    /**
     * 保存所有
     */
    public void saveAll(List<User> users){
        for (User user: users
             ) {
            addUser(user);
        }
    }

    public void addUser(User user){
        try {
            userDaoHelper.createOrUpdate(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


 }

部门实体:

public class Dept {
    @DatabaseField(id = true)
    private int deptId;
    @DatabaseField(columnName = "deptName")
    private String deptName;
    @ForeignCollectionField(eager = true)
    private Collection<User> users;

    public Dept(){

    }

    public Dept(int deptId, String deptName) {
        this.deptId = deptId;
        this.deptName = deptName;
    }

    public int getDeptId() {
        return deptId;
    }

    public void setDeptId(int deptId) {
        this.deptId = deptId;
    }

    public String getDeptName() {
        return deptName;
    }

    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }

    public Collection<User> getUsers() {
        return users;
    }

    public void setUsers(Collection<User> users) {
        this.users = users;
    }

    @Override
    public String toString() {
        String result = "deptId=="+deptId+"=deptName="+deptName
                +"=users="+users.toString();
        return result;
    }
}

职工实体:

public class User {
    @DatabaseField(id = true)
    private int userId;
    //用户名
    @DatabaseField(columnName = "userName")
    private String userName;
    @DatabaseField(columnName = "age")
    private int age;
    @DatabaseField(columnName = "create_time",format = "DATE_STRING")
    private Date date;
    @DatabaseField(foreign=true,foreignAutoRefresh=true,foreignAutoCreate = true)
    private Dept dept;

    public User() {
    }

    public User(String userName, int userId, int age) {
        this.userName = userName;
        this.userId = userId;
        this.age = age;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public Dept getDept() {
        return dept;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    @Override
    public String toString() {
        String result = "userId="+userId+
                "=userName="+userName+"=age="+age;
        return result;
    }
}

Activity:

public class MainActivity extends AppCompatActivity {
    DeptDao deptDao;
    UserDao userDao;

    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        deptDao = new DeptDao(this);
        userDao = new UserDao(this);
        User user = new User();
        user.setUserId(2);
        user.setUserName("11111");
        User user1 = new User();
        user1.setUserId(4);
        user1.setUserName("12222");
        Dept dept = new Dept();
        dept.setDeptName("ceshi");
        dept.setDeptId(40);
        //要先将部门实体加入数据库,然后user再调用setDept
        deptDao.addDept(dept);
        user.setDept(dept);
        userDao.addUser(user);
        user1.setDept(dept);
        userDao.addUser(user1);
        //获取的就是关联的数据,有Dept数据,也有User数据,User数据一般为List
        Dept dept1 = deptDao.getDept(40);
        Log.d(TAG, "onCreate: "+dept1.toString()+"--"+dept1.getUsers().size());
        for (User we:dept1.getUsers()
             ) {
            Log.d(TAG, "onCreate: we=="+we.toString());
        }
        //删除的时候不能关联删除,这样只删除了dept,没有删除关联的user
        deptDao.deleteObject(dept);
    }
}

官网一对多示例:
https://github.com/j256/ormlite-jdbc/tree/master/src/test/java/com/j256/ormlite/examples/foreignCollection

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android的Ormlite是一个用于Android数据库操作的ORM(对象关系映射)库,它允许您将Android应用程序中的Java对象与数据库表进行映射,以便轻松地存储和检索数据。 关于倒序,Ormlite库本身并没有直接支持倒序查询的功能。但是,您可以通过使用其他方法来实现倒序查询。 一种方法是使用SQL查询语句来执行倒序查询。您可以使用SQLite的ORDER BY子句来按照所需字段进行倒序排序。例如,如果您要按照某个字段的倒序排序一个名为“users”的表中的数据,您可以使用以下查询语句: ```sql SELECT * FROM users ORDER BY field_name DESC; ``` 其中,“field_name”是您要按照其倒序排序的字段的名称。 另一种方法是使用Ormlite的查询构建器来构建自定义查询。您可以使用QueryBuilder类来构建一个查询对象,并使用该对象的orderByAsc()或orderByDesc()方法来指定排序顺序。例如: ```java QueryBuilder<User, Integer> queryBuilder = userDao.queryBuilder(); queryBuilder.orderByAsc(FIELD_NAME); // 正序排序 queryBuilder.orderByDesc(FIELD_NAME); // 倒序排序 ``` 在这段代码中,“User”是您的数据模型类,“userDao”是数据访问对象,“FIELD_NAME”是您要排序的字段的名称。使用这种方式,您可以根据自己的需求来自定义排序顺序。 需要注意的是,上述两种方法都需要对数据库操作有一定的了解,并且可能需要对您的应用程序进行一些调整以适应倒序查询的需求。 总结起来,如果您想在Ormlite中执行倒序查询,您需要使用SQL查询语句或自定义查询对象来指定排序顺序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值