日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

summerDao-比mybatis更强大无需映射配置的dao工具

發布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 summerDao-比mybatis更强大无需映射配置的dao工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

summerDao是summer框架中的一個數據庫操作工具,項目地址:http://git.oschina.net/xiwa/summer。

怎么比mybatis更強大,怎么比beetlsql更簡單,如何無需映射配置,看看它是如何使用的就知道了~

?

單表orm操作

單表orm準備步驟

1、 在App.java中配置自動生成實體類存放目錄

Config.dbBeanScanFilter=".*sample.*db";

2、在App.java中配置生成實體類規則

@Bean public IBeanMapperRule getBeanMapperRule(){return new UnderlinedBeanMapperRule(); }

系統提供了2種映射規則:

DefaultBeanMapperRule-和表字段名保持一致

UnderlinedBeanMapperRule-將下劃線風格的字段名稱轉換為駝峰風格的bean屬性名

3、添加自動生成實體類代碼

new EntityGenerator(new UnderlinedBeanMapperRule(""),new MysqlTypeMapperRule() //指定數據類型映射規則 ).autoGenEntity("/src/main/java","src/main/resources");

系統提供了mysql數據庫的數據類型映射規則,其它數據庫請自行添加。

4、執行AppTool啟動自動實體生成(不關閉,一旦有腳本更新或添加就會生成對應的實體類文件)

5、使用數據庫工具生成Bean_create.sql建表腳本放在resources對應模塊db目錄

如,生成Address_create.sql放在resources/summer/sample/area/db目錄,此時可以看到在對應包summer.sample.area.db中已經生成了Address.java文件。

單表orm關系映射是依靠Bean_create.sql來完成的,生成好實體類后請不要刪除。

?

一、單表orm查詢:list(Class elementType, Object... args)

@Autowired BaseDao dao; public List<Address> getAddresses(Address a){return dao.list(Address.class,a); }

elementType要返回的實體類型。

args查詢條件,可以是任意多個bean或ConditionEntity對象。

二、單表orm分頁查詢

@Controller @RequestMapping("/area") public class AreaController { @Autowired BaseDao dao; @RequestMapping("/getAddresses") public List<Address> getAddresses(){ return dao.list(Address.class); } }

和普通查詢一樣,只需要在訪問時帶上page或pageSize參數即可,如:area/getAddresses.json?page=1

注:同一個請求中同時只能存在一個查詢需要分頁,其它查詢不需要分頁的要使用all。

三、單表orm排序查詢:list(Class elementType, OrderBy orderBy, Object... args)

@Autowired BaseDao dao; public List<Address> getAddresses(Address a){return dao.list(Address.class, dao.order().desc("addressId"), a); }

elementType要返回的實體類型。

orderBy排序信息,可鏈式調用。

args查詢條件,可以是任意多個bean或ConditionEntity對象。

四、單表orm查詢所有:all(Class elementType, Object... args)

同list方法,但不支持分頁查詢

五、單表orm取單條記錄:get(Class type, Object... args)

@Autowired BaseDao dao; public Address getAddress(Address a){return dao.get(Address.class,a); }

type要返回的實體類型。

args查詢條件,可以是任意多個bean或ConditionEntity對象。

?

六、單表orm新增:int insert(T bean)

@Autowired BaseDao dao; public int addAddresses(Address address){return dao.insert(address); }

?

?

七、單表orm按主鍵更新:int update(T bean)

@Autowired BaseDao dao; public int editAddresses(Address address){return dao.update(address); }

?

八、單表orm按條件更新:int update(T bean, ConditionEntity condition)

@Autowired BaseDao dao; public int editAddresses(Address address){return dao.update(address,dao.ce().set("條件名",條件值)); }

?

?

九、單表orm按主鍵刪除:int delete(T bean)

@Autowired BaseDao dao; public int delAddress(Address address){return dao.delete(address); }

?

十、單表orm按條件刪除:int delete(Class?type, ConditionEntity condition)

@Autowired BaseDao dao; public int delAddress(Address address){return dao.delete(Address.class,dao.ce().set("addressId",1); }

?

?

根據sqlId增刪改查

1.sql配置文件,文件名:sql-名稱.xml

<SqlConfig><query><sql id="全局唯一id"> sql語句 </sql> </query> <insert> </insert> <update> </update> <delete> </delete> </SqlConfig>

sql配置文件中必須包含query、insert、update、delete四個節點,分別放置不同語義的sql。

2.sql語句格式

/*多行注釋,支持任意合法sql語句,支持多條sql寫在一起*/ SELECTa.`areaId`, //單行注釋a.`areaName`,a.areaLevel, //字段名可用`包圍a.`parentId`,b.`areaName` as parentArea //可取別名 FROM`mg_area` a left join #tableName# b //可任意關聯,可動態設置表名 on a.parentId = b.areaId where //大小寫不限 a.areaId = :areaId //參數以:xx的形式表示 and a.areaName like %:areaName% //like參數無須特別處理 and a.areaLevel = :areaLevel //自動刪除值為空的參數 and a.parentId in(:pids) //in參數直接傳數組 order by parentId , areaId

?

?

一、根據sqlId查單條記錄:T get(String sql, Class type, Object... args)

@Autowired BaseDao dao; public Address getAddress(Address a){return dao.get("getAddress",Address.class,a); }<sql id="getAddress">SELECT`address_id`,`address`,`address2`,`district`,`city_id`,`postal_code`,`phone`,`last_update`FROM `address`whereaddress_id=:addressId andcity_id=:cityId andaddress like %:address% andpostal_code=:postalCode </sql>

sqlsqlId或完整sql語句。

type要返回的實體類型。

args查詢條件,可以是任意多個bean或ConditionEntity對象。

二、根據sqlId查詢:list(String sql, Class elementType, Object... args)

sql同上,支持自動分頁查詢。

當需要分頁查詢時,只需要在訪問時帶上page或pageSize參數即可,如:area/getAddresses.json?page=1

注:同一個請求中同時只能存在一個查詢需要分頁,其它查詢不需要分頁的要使用all。

sqlsqlId或完整sql語句。

elementType要返回集合中的實體類型。

args查詢條件,可以是任意多個bean或ConditionEntity對象。

三、根據sqlId分頁查詢:page(String sql, Class elementType, int pageSize, int page, Object... args)

sql同上,專門的分頁查詢。

sqlsqlId或完整sql語句。

elementType要返回集合中的實體類型。

pageSize分頁大小。

page當前頁碼。

args查詢條件,可以是任意多個bean或ConditionEntity對象。

四、根據sqlId強制查詢所有:all(String sql, Class elementType, Object... args)

同list方法,但不支持分頁查詢,強制查詢所有。

?

五、根據sqlId組合查詢

為一個sql節點添加多個子sql,并設置子sql的name屬性,代碼中根據業務場景使用"+"連接父sqlId和子sql的name作為一個完全的sql執行。

sql配置 <sql id="getActors"> SELECT `actor_id`,`first_name`,`last_name`,`last_update` FROM `actor`<sql name="condition1"> WHERE `first_name` like %:firstName% </sql> <sql name="condition2"> WHERE length(first_name)= :len OR `last_name` like %:lastName% </sql> <sql name="condition3"> where actor_id in(:actorIds) </sql> </sql> 代碼 //Actor.java @Data public class Actor { private Short actorId; private String firstName; private String lastName; private Timestamp lastUpdate; } //ActorVo.java @Data public class ActorVo extends Actor { private Integer len; } //Service public List getActors2(ActorVo actorVo){ return dao.list( //當firstName不為空時使用condition1的查詢條件,否則使用condition2的查詢條件 "getActors+condition"+(actorVo.getFirstName()!=null?1:2), Actor.class, actorVo ); }

?

?

六、根據sqlId級聯查詢

1.一對一級聯查詢

創建實體類:Address.java、City.java、AddressVo.java

@Data public class Address { private java.lang.Short addressId; private java.lang.String address; private java.lang.String address2; private java.lang.String district; private java.lang.Short cityId; private java.lang.String postalCode; private java.lang.String phone; private java.sql.Timestamp lastUpdate; } @Data public class City { private java.lang.Short cityId; private java.lang.String city; private java.lang.Short countryId; private java.sql.Timestamp lastUpdate; } @Data public class AddressVo extends Address { private City city; //一對一city屬性 }

sql配置,使用子sql標簽,寫上要級聯查詢的sql,并設置prop為對應級聯的屬性名。

<sql id="getAddress">SELECT`address_id`,`address`,`address2`,`district`,`city_id`,`postal_code`,`phone`,`last_update`FROM `address`WHEREcity_id=:cityId<sql prop="city"> //一對一關聯city屬性 SELECT `city_id`, `city`, `country_id`, `last_update` FROM `city` WHERE city_id=:cityId </sql> </sql>

使用"sqlId<-prop"作為sqlId進行查詢。

public AddressVo getAddress(Address address){return dao.get("getAddress<-city",AddressVo.class,address); }

?

2.一對多級聯查詢

創建實體類:Address.java、City.java、CityVo.java

@Data public class CityVo extends City { private List<Address> addresses; //一對多addresses屬性 }

sql配置,使用子sql標簽,寫上要級聯查詢的sql,并設置prop為對應級聯的屬性名。

<sql id="getCity">SELECT`city_id`,`city`,`country_id`,`last_update`FROM `city`WHEREcity_id=:cityId<sql prop="addresses"> //一對多關聯addresses屬性 SELECT `address_id`, `address`, `address2`, `district`, `city_id`, `postal_code`, `phone`, `last_update` FROM `address` WHERE city_id=:cityId </sql> </sql>

使用"sqlId<-prop"作為sqlId進行查詢。

public CityVo getCity(City city){return dao.get("getCity<-addresses",CityVo.class,city); }

?

?

七、根據sqlId新增、修改、刪除:int update(String sql, Object... args)

新增、修改、刪除都使用update方法

<sql id="addArea"> INSERT INTO `mg_area` (`areaId`,`areaName`,`areaLevel`,`parentId` )VALUES(:areaId,:areaName,:areaLevel,:parentId ) </sql> //代碼: update("addArea",area); ================================= <sql id="editArea"> UPDATE `mg_area` SET `areaId` = :areaId, `areaName` = :areaName, `areaLevel` = :areaLevel, `parentId` = :parentId WHERE `areaId` = :areaId </sql> //代碼: update("editArea",area); ================================= <sql id="delArea"> DELETE FROM `mg_area` WHERE `areaId` = :areaId </sql> //代碼: update("delArea",area);

轉載于:https://www.cnblogs.com/xiwa/p/6775839.html

總結

以上是生活随笔為你收集整理的summerDao-比mybatis更强大无需映射配置的dao工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。