Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android數據庫hibernate框架

Android數據庫hibernate框架

編輯:關於Android編程

用法

/**
 * YDL_Hibernate概要 

 * (一)支持功能: 1.自動建表,支持屬性來自繼承類:可根據注解自動完成建表,並且對於繼承類中的注解字段也支持自動建表. 2.自動支持增刪改
 * ,增改支持對象化操作:增刪改是數據庫操作的最基本單元,不用重復寫這些增刪改的代碼,並且添加和更新支持類似於hibernate中的對象化操作.
 * 3.查詢方式靈活:支持android框架提供的方式,也支持原生sql方式.
 * 4.查詢結果對象化:對於查詢結果可自動包裝為實體對象,類似於hibernate框架.
 * 5.查詢結果靈活:查詢結果支持對象化,也支持結果為List>形式,這個方法在實際項目中很實用,且效率更好些.
 * 6.日志較詳細:因為android開發不支持熱部署調試,運行報錯時可根據日志來定位錯誤,這樣可以減少運行Android的次數. 

 * (二)不足之處: 

 * 1.id暫時只支持int類型,不支持uuid,在sqlite中不建議用uuid.
 * 2.現在每個方法都自己開啟和關閉事務,暫時還不支持在一個事務中做多個操作然後統一提交事務. 

 * (三)作者寄語:

 * 昔日有JavaScript借Java發展,今日也希望YDL_Hibernate借Hibernate之名發展.
 * 希望這個項目以後會成為開源社區的重要一員,更希望這個項目能給所有Android開發者帶便利.
 * 歡迎訪問我的博客:http://blog.csdn.net/linglongxin24,
 * 這裡有這個框架的使用范例和源碼,希望朋友們多多交流完善這個框架,共同推動中國開源事業的發展,YDL_Hibernate期待與您共創美好未來!!!
 */
public class MainActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		// 熟悉用接口的朋友注意哦,這裡也可以定義為接口哦,見StudentDaoImpl.java中的注釋.
		TeacherDaoImpl teacherDao = new TeacherDaoImpl(MainActivity.this);
		StudentDaoImpl studentDao = new StudentDaoImpl(MainActivity.this);

		// 添加
		Teacher teacher = new Teacher();
		teacher.setName("米老師");
		teacher.setAge(50);
		teacher.setTitle("教授");
		Long teacherId = teacherDao.insert(teacher);

		Student student1 = new Student();
		student1.setName("lk");
		student1.setAge(26);
		student1.setClasses("五");
		student1.setTeacherId(teacherId.intValue());
		Long studentId1 = studentDao.insert(student1);

		Student student2 = new Student();
		student2.setName("cls");
		student2.setAge(26);
		student2.setClasses("五");
		student2.setTeacherId(teacherId.intValue());
		Long studentId2 = studentDao.insert(student2);

		Student student3 = new Student();
		student3.setName("lb");
		student3.setAge(27);
		student3.setClasses("五期");
		student3.setTeacherId(teacherId.intValue());
		Long studentId3 = studentDao.insert(student3);

		// 查詢
		// 方式1:根據Id查詢單個對象
		// 結果:student1Student [id=1, name=lk,age=26,teacherId=1, classes=五]
		Student student4 = studentDao.get(studentId1.intValue());
		System.out.println("student4" + student4);

		// 方式2:查詢出表中的所有記錄
		// 執行結果如下:
		// list1:Student [id=1, name=lk,age=26,teacherId=1, classes=五]
		// list1:Student [id=2, name=cls,age=26,teacherId=1, classes=五]
		// list1:Student [id=3, name=lb,age=27,teacherId=1, classes=五期]
		List list1 = studentDao.find();
		for (Student student : list1) {
			System.out.println("list1:" + student);
		}

		// 方式3:限制條件查詢和查詢結果
		// 執行結果:list2:Student [id=2, name=cls,age=0,teacherId=0, classes=null]
		List list2 = studentDao.find(new String[] { "id", "name" },
				" id = ? ", new String[] { studentId2.toString() }, null, null,
				null, null);
		for (Student student : list2) {
			System.out.println("list2:" + student);
		}

		// 方式4:使用sql查詢出結果,此種方式是2,3,4中最靈活的.
		// 執行結果:
		// list3:Student [id=2, name=cls,age=26,teacherId=1, classes=五]
		// list3:Student [id=3, name=lb,age=27,teacherId=1, classes=五期]
		List list3 = studentDao.rawQuery(
				"select * from t_student where id in (?,?) ", new String[] {
						studentId2.toString(), studentId3.toString() });
		for (Student student : list3) {
			System.out.println("list3:" + student);
		}

		// 方式4進階:如果想查詢出米老師的學生,可以這樣實現:
		// 執行結果:
		// list4:Student [id=1, name=lk,age=26,teacherId=1, classes=五]
		// list4:Student [id=2, name=cls,age=26,teacherId=1, classes=五]
		// list4:Student [id=3, name=lb,age=27,teacherId=1, classes=五期]
		List list4 = studentDao
				.rawQuery(
						"select s.* from t_student s join t_teacher t on s.teacher_id = t.id where t.name= ? ",
						new String[] { "米老師" });
		for (Student student : list4) {
			System.out.println("list4:" + student);
		}

		// 方式5:我只想知道姓名和年齡,查詢得到List>形式.只查2個字會比查詢所有字段並封裝為對象效率高吧,尤其字段值很多時我們的手機更喜歡這種方式哦.
		// 結果:
		// listMap1: name:lk;age:26
		// listMap1: name:cls;age:26
		// listMap1: name:lb;age:27
		List> listMap1 = studentDao.query2MapList(
				"select name,Age from t_student ", null);
		for (Map map : listMap1) {
			// 查詢的List中的map以查詢sql中的屬性值的小寫形式為key,注意是小寫形式哦.
			System.out.println("listMap1: name:" + map.get("name") + ";age:"
					+ map.get("age"));
		}

		// 方式5進階:我想知道前2名學生的姓名和班主任姓名,這種方式是不是超靈活啊,用其他的方式查詢都沒這種方式好用吧,哈哈.
		// 結果:
		// listMap2: student_name:lk;teacher_name:米老師
		// listMap2: student_name:cls;teacher_name:米老師
		List> listMap2 = studentDao
				.query2MapList(
						"select s.name sname,t.name tname from t_student s join t_teacher t on s.teacher_id = t.id limit ? ",
						new String[] { "2" });
		for (Map map : listMap2) {
			System.out.println("listMap2: student_name:" + map.get("sname")
					+ ";teacher_name:" + map.get("tname"));
		}

		// 更新
		// 結果: Student [id=1, name=李坤,age=26,teacherId=1, classes=五期]
		student1 = studentDao.get(studentId1.intValue());
		student1.setName("李坤");
		student1.setClasses("五期");
		studentDao.update(student3);
		System.out.println(student1);

		// 刪除:支持單個id刪除,也支持多個id同時刪除哦.
		studentDao.delete(studentId1.intValue());
		studentDao.delete(new Integer[] { studentId2.intValue(),
				studentId3.intValue() });

		// 支持執行sql語句哦.
		teacherDao.execSql("insert into t_teacher(name,age) values('米教授',50)",
				null);

	}
}

 


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved