由于工作的一些原因,需要从C#转成JAVA。之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件:
基于以上的理解,便打算造一个JAVA版的PetaPoco——PataPojo:
下载petapojo.jar包后,在项目中进行引用
实体Mapping
//对应表user_info@TableName("user_info")//主键映射,字段名,是否自增@PrimaryKey(value="id",autoIncrement=true)publicclassUserInfo{privateintid;privateStringuserName;//列名与字段名的映射(若无注解,则按字段名映射为列名)@Column("password")privateStringpassword;//该字段不进行映射@IgnoreprivateStringnone;//...getterandsetter}下一步,使用database.java进行查询:
DruidDataSourcedataSource=newDruidDataSource();//配置dataSource//...Databasedatabase=newDatabase(dataSource);List
Integernumber=database.executeScalar(Integer.class,"SELECTCOUNT(1)FROMuser_info");或者,查找第一条记录:
UserInfouserInfo=database.firstOrDefault(UserInfo.class,"SELECT*FROMuser_infoWHEREid=",123);分页
//参数说明://1-页索引//10-页大小//20-是指age>的参数值PageInfo
/***分页泛型*/publicclassPageInfo
//返回影响行数introw=database.executeUpdate("DELETEFROMuser_infoWHEREid=",123);实体的增删改新增:
UserInfouserInfo=newUserInfo();userInfo.setUserName("PetaPojo");userInfo.setPassword("123123");database.insert(userInfo);修改:
UserInfouserInfo=database.firstOrDefault(UserInfo.class,"SELECT*FROMuser_infoWHEREid=",1);userInfo.setPassword("123456");database.update(userInfo);删除:
UserInfouserInfo=database.firstOrDefault(UserInfo.class,"SELECT*FROMuser_infoWHEREid=",1);PetaPojo可以允许简化为:
在此基础上,PetaPojo提供了一个非常便捷的SQL查询组装器。
基础模式:
intid=1;Sqlsql=Sql.create().append("SELECT*FROMuser_info").append("WHEREid=",id);UserInfouserInfo=database.firstOrDefault(UserInfo.class,sql);或者:
intid=1;Sqlsql=Sql.create().append("SELECT*FROMuser_info").append("WHEREid=",id).append("ANDcreateDate>=",DateTime.now());UserInfouserInfo=database.firstOrDefault(UserInfo.class,sql);同样,可以根据不同的条件来进行组装:
intid=1;Sqlsql=Sql.create().append("SELECT*FROMuser_info").append("WHEREid<>",id)if(age!=null)sql.append("ANDage>",age);if(startDate!=null)sql.append("ANDcreateDate>=",startDate);List
intid=1;DateTimenow=DateTime.now();Sqlsql=Sql.create().append("SELECT*FROMuser_info").append("WHEREid<>ANDcreateDate>=",id,now);List
Sqlsql=Sql.create().select("*").from("user_info").where("id=",1).where("createDate>=",DateTime.now().toString()).where("age>=ANDage<=",10,20).orderBy("createDateDESC");PageInfo
Sqlsql=Sql.create().where("id=",1).where("createDate>=",DateTime.now()).where("age>=ANDage<=",10,20).orderBy("createDateDESC");PageInfo
因此,PetaPojo在枚举的支持上做了一些扩展。
首先,PetaPojo定义了一个枚举接口:
/***枚举必须要实现的接口*/publicinterfaceIEnumMessage{intgetValue();StringgetName();}并提供了一个枚举帮助类:
/***用户类型*/publicenumUserTypeimplementsIEnumMessage{Student(1,"学生"),Teacher(2,"老师"),Coder(4,"码农");privateintvalue;privateStringname;UserType(intvalue,Stringname){this.value=value;this.name=name;}@OverridepublicintgetValue(){returnthis.value;}@OverridepublicStringgetName(){returnthis.name;}}对应的实体:
@TableName("user_info")@PrimaryKey(value="id",autoIncrement=true)publicclassUserInfo{privateintid;privateStringuserName;privateStringpassword;//直接使用枚举,数据库中作为int型进行存储privateUserTypeuserType;privateDateTimecreateDate;//...gettersetter}当SQL查询中的参数值为org.joda.time.DateTime时,这样使用:
Sqlsql=Sql.create().where("createDate>=",DateTime.now().toString());//将DateTime类型toString即可