CommonDao Api詳解

CommonDao

封裝通用dao操作方法,Autowired注入方式注入到業(yè)務(wù)Service中

public void save(Object entity)

保存實(shí)體類到數(shù)據(jù)庫(kù),entity必須是實(shí)體類,需要有@Entity注解。
保存成功后,實(shí)體的id會(huì)被回寫的entity中

@Entity //表述class是一個(gè)實(shí)體類
@Table(name="test_env") //設(shè)置實(shí)體類對(duì)應(yīng)的表名,不加@Table注解,表名默認(rèn)跟類名一樣
public class Env {
    /**  */
    @Id //表示id是主鍵
    @AutoIncrease //表名id是自增的
    //@Sequence //表名id是由數(shù)據(jù)庫(kù)序列產(chǎn)生的
    private Long id;

    private String name;

    @Column(name="env_type_id") //綁定數(shù)據(jù)庫(kù)表字段名稱,不加,默認(rèn)表字段名和類字段名一樣
    private Long envTypeId;

}
Env env = new Env();
env.setName("開(kāi)發(fā)環(huán)境");
System.out.println(env.getId());//打印結(jié)果null
baseService.save(env);
System.out.println(env.getId()); //打印結(jié)果6


public void update(Object entity)

根據(jù)id(由注解 @Id 決定 ) 更新entity中不為null的值,也就是說(shuō)如果數(shù)據(jù)庫(kù)字段原來(lái)有值,想通過(guò)對(duì)象中設(shè)置為null來(lái)更新數(shù)據(jù)庫(kù)字段是不行的。id字段必須有值,否則拋出異常

public void updateWithNullValue(Object obj)

根據(jù)id(由注解 @Id 決定 ) 更新數(shù)據(jù) , 包括為null的字段,彌補(bǔ)update方法的不足

public void delete(Object entity)

根據(jù)id(由注解 @Id 決定 ) 刪除表數(shù)據(jù) ,id字段不能為空

public void deleteByIds(Class<?> clazz, List ids)

根據(jù)id批量刪除表數(shù)據(jù),適用于小數(shù)量級(jí)的批量刪除,如一次刪除50條以內(nèi)的


public <T> T get(Class<T> clazz,Object id)

最常用的單表查詢方法,根據(jù)id查詢
clazz: 要查詢的實(shí)體類class


public Object getByExample(Object vo)

根據(jù)vo中字段不為null的數(shù)據(jù)查詢符合條件的第一條數(shù)據(jù),判斷條件為=,多個(gè)條件之間用and

Account account = new Account();
account.name="test";
account.pwd = "123456";
等價(jià)與查詢
select * from Account where name='test' and pwd = '123456'

如果可以斷定給定的查詢條件只有一條記錄,這個(gè)方法非常合適。

public <T> List<T> listByExample(Object vo)

和getByExample一樣,返回所有符合條件的數(shù)據(jù)

public List<Map> listByParams(String statement , ParamMap paramMap)

根據(jù)查詢條件查詢結(jié)果
@param statement mybatis mapper文件中定義的查詢語(yǔ)句id
@param paramMap 參數(shù),是一個(gè)map ,包含了排序條件
@return 返回結(jié)果是map list.

mapper文件中parameterType和resultType的寫法統(tǒng)一如下

<select id="listProject" parameterType="paramMap" resultType="Map">
    ...
</select>
public <T> List<T> listByParams(Class<T> clazz, String statement, ParamMap paramMap)

根據(jù)查詢條件查詢結(jié)果
@param clazz 返回結(jié)果被封裝成的java類,在聯(lián)表查詢時(shí)可以定義一個(gè)組合類,包含所有查詢語(yǔ)句需要返回的字段。
@param statement mybatis mapper文件中定義的查詢語(yǔ)句id
@param paramMap 參數(shù),是一個(gè)map,包含了排序條件
@return 結(jié)果被封裝成 參數(shù)clazz的實(shí)例集合


public <T> Page<T> findPageByParams(Class<T> clazz , Page<T> page ,String statement , ParamMap paramMap)

和listByParams的用法一樣,但是加入了分頁(yè)支持
clazz可以是實(shí)體類,也可以是VO類,VO類中的字段和sql查詢中的字段名一一對(duì)應(yīng)

page參數(shù)

public class Page<T> {
    // currentPage和pageSize通過(guò)前端參數(shù)傳過(guò)來(lái)
    private int pageSize;           //每頁(yè)顯示記錄數(shù)
    private int totalResult;            //總記錄數(shù)
    private int currentPage=1;
    
    private int startRow=1;
    
    private int endRow;
    
    /**
     * 分頁(yè)查詢返回的數(shù)據(jù)
     */
    private List<T> result;
    
    public Page(){
        if(this.pageSize==0){
            this.pageSize = 15;
        }
    }
}
  • 示例
@ResponseBody
@RequestMapping(value = "listProjectData")
public ResponseVo<Page<Project>> listProjectData(Page<Project> page, String name) throws Exception {
    ParamMap pm = new ParamMap();
    if(!StringUtils.isEmpty(name)){
        pm.put("name",name);
    }
    pm.put("ownerId", SessionHelper.getUser().getId());
    page = baseService.findPageByParams(Project.class, page, "Project.listProject", pm);
    return ResponseVo.<Page<Project>> BUILDER().setData(page).setCode(Const.BUSINESS_CODE.SUCCESS);
}

mapper文件

<select id="listProject" parameterType="paramMap" resultType="Map">
    select pro.* , tmpl.title as tmplName from dm_project pro left join dm_project_template tmpl on pro.tpl_id=tmpl.id
    <where>
    <if test="name != null and name != ''">
        and pro.name LIKE CONCAT('%',#{name},'%' )
    </if>
    <if test="ownerId != null">
        and pro.owner_id = #{ownerId}
    </if>
    </where>
</select>

注意上面查詢語(yǔ)句并不需要寫limit 語(yǔ)句,不要加


public Page<Map> findPageByParams(Page<Map> page, String statement , ParamMap paramMap)

翻頁(yè)查詢,返回結(jié)果為一個(gè)map,多表聯(lián)查時(shí),如果不需要寫VO類,可以用這個(gè)方式

public <T> int updateByField(Class<T> clazz , String fieldName ,Object fieldValue, Object updateObj)

根據(jù)給定的字段值更新多條數(shù)據(jù),要更新的字段值在updateObj中所有不為null的字段
相當(dāng)于 update table set x=x,y=y wehre z=z
返回更新的條數(shù)

//把book表中所有authorId=1的數(shù)據(jù)words更新成100,price更新成22
Book book = new Book();
book.setWords(100);
book.setPrice(22f);
baseService.updateByField(Book.class, "authorId", 1L, book);//authorId為Book類的字段
public <T> int batchInsert(Class<T> clazz , List<T> list)

批量插入數(shù)據(jù),一條sql語(yǔ)句,一次性獲取多個(gè)id。批量的數(shù)量建議不要太大

public int countByExample(Object vo)

統(tǒng)計(jì)符合條件的數(shù)據(jù)數(shù)量
Account account = new Account();
account.name="test";
account.pwd = "123456";
等價(jià)與查詢
select count(*) from Account where name='test' and pwd = '123456'


public int execute(String statement , ParamMap paramMap)

用來(lái)執(zhí)行一個(gè)非查詢的sql,如update ,delete之類的sql語(yǔ)句。用來(lái)滿足一些BaseService中提供的方法不能滿足的場(chǎng)景

public <T> int updateByField(Class<T> clazz, String fieldName, Object fieldValue, Object updateObj,boolean updateNull)

根據(jù)給定的字段值更新數(shù)據(jù),要更新的字段值在updateObj中所有不為null的字段

Book book = new Book(); 
book.setWords(100);
book.setPrice(22f);
//更新authorId為1的書(shū)的價(jià)格和字?jǐn)?shù)
commonDao.updateByField(Book.class,"authorId", 1L, book);//authorId為Book類的字段
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容