二:02:AHibernate简介(一)

首先声明,很多东西是来自AHibernate框架作者博客中,因为每个人都有自己的浏览喜好,对自己规整了一下文本内容,自己以后看着稍微舒服点,在这还要感谢AHibernate框架作者给我们一个那么优秀的框架。

一句话描述,使用AHibernate框架进行sqlite数据库操作您将从重复性劳动中解脱出来.

这位作者的博客地址:http://blog.csdn.net/lk_blog

(一)支持功能:


1.自动建表,支持属性来自继承类:可根据注解自动完成建表,并且对于继承类中的注解字段也支持自动建表.
2.自动支持增删改,增改支持对象化操作:增删改是数据库操作的最基本单元,不用重复写这些增删改的代码,并且添加和更新支持类似于hibernate中的对象化操作.
3.查询方式灵活:支持android框架提供的方式,也支持原生sql方式.
4.查询结果对象化:对于查询结果可自动包装为实体对象,类似于hibernate框架.
5.查询结果灵活:查询结果支持对象化,也支持结果为List>形式,这个方法在实际项目中很实用,且效率更好些.
6.日志较详细:因为android开发不支持热部署调试,运行报错时可根据日志来定位错误,这样可以减少运行Android的次数.

(二)不足之处

1.id暂时只支持int类型,不支持uuid,在sqlite中不建议用uuid.
2.现在每个方法都自己开启和关闭事务,暂时还不支持在一个事务中做多个操作然后统一提交事务.

(三)使用AHibernate步骤:

  1. 引入AHibernate-1.0.jar 。 下载地址: http://download.csdn.net/detail/lk_blog/4222048 解压后有源码和jar包,这个jar体积非常小,仅有十几K,对您的程序整体大小不会产生影响哦。
    1.0版源码和示例下载地址: http://download.csdn.net/detail/lk_blog/4222048
    
    AHibernate1.1已经发布,下载地址: http://download.csdn.net/detail/lk_blog/4786640

     

  2. 建实体类
    
    //此处没有加Table属性,它是其他类的基类,本类中用@Column注解的字段在子类中同样会被创建到表中
    public class Person {
    	@Id
    	@Column(name = "id")
    	private int id; // 主键,int类型,数据库建表时此字段会设为自增长
     
    	@Column(name = "name", length = 20)
    	private String name; // 名字长度一般不会超过20个字符吧,length=20数据字段的长度是20
     
    	@Column(name = "age", type = "INTEGER")
    	private int age; // 年龄一般是数值,用type = "INTEGER"规范一下吧.
     
    	//假设您开始时没有此属性,程序开发中才想到此属性,去掉代码注释试试吧,数据库增删改查不用修改任何代码哦.
    	// @Column(name = "sex")
    	// private String sex;
    
    	// 有些字段您可能不希望保存到数据库中,不用@Column注释就不会映射到数据库.
    	private String noSaveFild;
     
    	//get和set方法.
    	//....
     
    	@Override
    	public String toString() {
    		return "id=" + id + ", name=" + name + ",age=" + age;
    	}
    }
    //自动生成的建表语句:
    //crate table [t_teacher]: CREATE TABLE t_teacher (id INTEGER primary key autoincrement, title TEXT, name TEXT(20), age INTEGER )
     
    @Table(name = "t_teacher")
    public class Teacher extends Person {
    
    	@Column(name = "title")
    	private String title;// 职称
     
    	//get和set方法.
    	//....
     
    	@Override
    	public String toString() {
    		return "Teacher [" + super.toString() + ",title=" + title + "]";
    	}
    }
    //自动生成的建表语句:
    //CREATE TABLE t_student (id INTEGER primary key autoincrement, classes TEXT, teacher_id INTEGER, name TEXT(20), age INTEGER )
     
    @Table(name = "t_student")
    public class Student extends Person {
     
    	@Column(name = "teacher_id")
    	private int teacherId;// 班主任id
     
    	@Column(name = "classes")
    	private String classes;// 班级
     
    	//get和set方法
    	//...
     
    	@Override
    	public String toString() {
    		return "Student [" + super.toString() + ",teacherId=" + teacherId+ ", classes=" + classes + "]";
    	}
    }

     

  3. DBHelper.java

    public class DBHelper extends MyDBHelper {
    	private static final String DBNAME = "school.db";// 数据库名
    	private static final int DBVERSION = 1;
    	private static final Class[] clazz = { Teacher.class, Student.class };// 要初始化的表
     
    	public DBHelper(Context context) {
    		super(context, DBNAME, null, DBVERSION, clazz);
    	}
    }

     

  4. StudentDaoImpl.java

    
    //如果您是J2EE高手一定希望支持接口吧,按下面的写法即可:
    //写一个接口:public interface StudentDao extends BaseDao {}
    //实现接口: public class StudentDaoImpl extends BaseDaoImpl implements StudentDao
    public class StudentDaoImpl extends BaseDaoImpl {
    	public StudentDaoImpl(Context context) {
    		super(new DBHelper(context));
    	}
    }
    

    TeacherDaoImpl.java

    public class TeacherDaoImpl extends BaseDaoImpl {
    	public TeacherDaoImpl(Context context) {
    		super(new DBHelper(context));
    	}
    }

     

  5. 运行文章开始处的例子试试吧.

    程序运行时会根据注解自动建表,增删改查的数据库访问层不用写其他的代码就能直接使用.

    最后,补充一些关于查看日志的内容,日志可是我们调试程序的利器哦:

你可能感兴趣的:(知识梳理)