最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot使用Mybatis注解實(shí)現(xiàn)分頁動(dòng)態(tài)sql開發(fā)教程

 更新時(shí)間:2022年03月23日 12:06:34   作者:KimZing  
這篇文章主要為大家介紹了SpringBoot使用Mybatis注解實(shí)現(xiàn)分頁及動(dòng)態(tài)sql開發(fā)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、環(huán)境配置

1.引入mybatis依賴

    compile(
            //SpringMVC
            'org.springframework.boot:spring-boot-starter-web',
            "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.3",
            //Mybatis依賴及分頁插件
            "org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1",
            "com.github.pagehelper:pagehelper:4.1.0",
            'mysql:mysql-connector-java'
    )

2.數(shù)據(jù)源配置

spring:
  datasource:
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql:///mybatis?characterEncoding=utf8&useSSL=false
    //根據(jù)resources目錄下的schema.sql自動(dòng)建表,可省略
    schema: classpath:schema.sql
    //根據(jù)resources目錄下的data.sql自動(dòng)插入假數(shù)據(jù),可省略
    data: classpath:data.sql

3.分頁插件配置

@Configuration
public class CommonConfiguration {

    /**
     * 注冊MyBatis分頁插件PageHelper
     */
    @Bean
    public PageHelper pageHelper() {
        PageHelper pageHelper = new PageHelper();
        Properties p = new Properties();
        p.setProperty("offsetAsPageNum", "true");
        p.setProperty("rowBoundsWithCount", "true");
        p.setProperty("reasonable", "true");
        pageHelper.setProperties(p);
        return pageHelper;
    }

}

4.配置SpringBoot掃描Mybatis倉儲(chǔ),有兩種配置方式

在啟動(dòng)類上加入@MapperScan,填寫Mapper接口所在的包名,SpringBoot就會(huì)自動(dòng)將該包中的Mapper接口進(jìn)行加載

@MapperScan(basePackages = "com.kingboy.repository")
@SpringBootApplication
public class KingboySpringbootDataApplication {
    public static void main(String[] args) {
        SpringApplication.run(KingboySpringbootDataApplication.class, args);
    }
}

在Mapper接口上加上@Mapper注解,SpringBoot就會(huì)自動(dòng)夾在該Mapper接口

@Mapper
public interface UserMapper {
        @Insert("INSERT INTO `user` VALUES (#{id}, #{nickName}, #{phoneNumber}, #{sex}, #{age}, #{birthday}, #{status})")
        @Options(useGeneratedKeys = true, keyColumn = "id", keyProperty = "id")
        void saveUser(User user);
        
}

這兩種方式都可以,根據(jù)項(xiàng)目結(jié)構(gòu)進(jìn)行選擇即可,也可以結(jié)合私用。

5.配置駝峰屬性自動(dòng)映射

mybatis:
  configuration:
    map-underscore-to-camel-case: true

例如實(shí)體中屬性為phoneNumber,數(shù)據(jù)庫屬性為phone_number,Mybatis默認(rèn)是不能自動(dòng)轉(zhuǎn)換的,通常我們要自定義以下結(jié)果集映射

@Result(column = "phone_number", property = "phoneNumber")

然而這樣很不方便,當(dāng)我們加上以上配置之后,Mybatis在映射結(jié)果時(shí),會(huì)自動(dòng)轉(zhuǎn)換,去掉下劃線,變n為大寫N。

6.設(shè)置mybatis日志打印,在配置文件中加入如下配置

logging: level: #Mapper所在的包 com.kingboy.repository: debug

開啟日志有三種方式,可以參考我的另一篇博客

logback中顯示mybatis查詢?nèi)罩疚募懭氲姆椒?/a>

二、Mybatis注解

Mybatis提供了四個(gè)注解,先簡單了解一下,后面的完整示例中演示了相應(yīng)的實(shí)例

@Insert(“sql”) 增
@Delete(“sql”) 刪
@Update(“sql”) 改
@Select(“sql”) 查

三、方法參數(shù)讀取

1.普通參數(shù)讀取

在方法參數(shù)前使用@Param注解對參數(shù)進(jìn)行標(biāo)記,在sql中使用#{屬性名}來讀取屬性。

示例

    //刪除用戶,根據(jù)用戶ID和名稱刪除用戶
    @Delete("DELETE FROM `user` WHERE id = #{id} AND nick_name = #{nickName}")
    void delete(@Param(value = "id") Long id, @Param(value = "nickName") String nickName);

2.對象參數(shù)讀取

直接在sql中使用#{屬性名}來讀取屬性

示例

    @Insert("INSERT INTO `user` VALUES (#{id}, #{nickName}, #{phoneNumber}, #{sex}, #{age}, #{birthday}, #{status})")
    @Options(useGeneratedKeys = true, keyColumn = "id", keyProperty = "id")
    void saveUser(User user);

這里補(bǔ)充一點(diǎn),@Options注解和@Insert注解結(jié)合使用,可以將保存后的主鍵設(shè)置到user實(shí)體中。也就是說保存前user的id是沒值的,
保存后mybatis會(huì)自動(dòng)將數(shù)據(jù)庫中的主鍵設(shè)置到user的id屬性上,keyColumn = "id"為數(shù)據(jù)庫主鍵名,keyProperty = "id"為實(shí)體的主鍵屬性名。

四、分頁插件的使用

分頁插件單獨(dú)拿出來說,是因?yàn)轫?xiàng)目實(shí)戰(zhàn)中發(fā)現(xiàn)很多同學(xué)都使用錯(cuò)了,所以著重強(qiáng)調(diào)一下。

分頁插件的核心類是PageHelper,這個(gè)類提供了很多的靜態(tài)方法,其中我們最常用的是PageHelper.startPage(int page, int size)這個(gè)方法,返回com.github.pagehelper.Page對象,
該對象包含了包含了查詢結(jié)果result, 當(dāng)前頁pageNum,每頁大小pageSize, 總條數(shù)total等信息,可以獲取這些信息返回給前端。需要注意的是,PageHelper的頁數(shù)是從1開始的。

我們來看一段實(shí)際的代碼操作,這里就不寫service層了。

//controller
RestController
@RequestMapping(value = "/user")
public class UserController {
    @Resource
    UserRepository userRepository;
    @GetMapping
    @Transactional(readOnly = true)
    public Page get(@RequestParam Integer page, @RequestParam Integer size) {
        //分頁并查詢
        Page<User> pageInfo = PageHelper.startPage(page, size);
        List<User> users = userRepository.listUser();
        //獲取分頁信息演示, 實(shí)際項(xiàng)目中一般會(huì)封裝為自己的返回體。
        int pageNum = pageInfo.getPageNum();
        int pageSize = pageInfo.getPageSize();
        long total = pageInfo.getTotal();
        List<User> result = pageInfo.getResult();//和上面的users結(jié)果相同
        return pageInfo;
    }
}
//repository
@Mapper
public interface UserRepository {
    //分頁查詢用戶
    @Select("SELECT * FROM `user`")
    List<User> listUser();
}

五、動(dòng)態(tài)標(biāo)簽

熟悉Mybatis的同學(xué)一定對Mybatis的動(dòng)態(tài)SQL很了解,解決了我們編寫動(dòng)態(tài)SQL的很多痛點(diǎn)。接下來介紹以下Mybatis常用的動(dòng)態(tài)sql的注解寫法,其實(shí)和xml是幾乎完全一致的。

首先在注解中使用動(dòng)態(tài)sql時(shí),我們需要為sql加上<script></script>標(biāo)簽,這時(shí)候mybatis才會(huì)解析里面的標(biāo)簽。

1.<if test="條件判斷">sql</if>

用來對參數(shù)進(jìn)行判斷,若為真,則包裹的sql語句生效。條件中可以使用and作連接

    //分頁查詢用戶,如果sex有值,則查詢相應(yīng)sex的所有用戶,sex沒值則查詢所有
    @Select("<script>SELECT * FROM `user` <if test='sex != null'>where sex = #{sex}</if><script>")
    List<User> listUser(Sex sex);//sex是一個(gè)枚舉類型,值為BOY,GIRL

2.<foreach item = 'item' index = 'index' collection='list' separator=',', open='(', close=')'>sql</foreach>

循環(huán)參數(shù)中的集合參數(shù)進(jìn)行操作,和java中的for循環(huán)比較類似,不過多了open/close/separator三個(gè)參數(shù)。

open是在操作之前加上一個(gè)"("

close是在操作之后加上一個(gè)")"

separator是每個(gè)元素間的分割符

需要注意的是,collection的值只能是list或者collection

示例

    @Select("<script>"
            + "SELECT * FROM `user` WHERE id in "
            + "<foreach item='item' collection='list' open='(' close=')' separator=','>"
            + "#{item}"
            + "</foreach>"
            + "</script>")
    List<User> listUserByIds(List<Long> ids);

例如傳入的ids為[2,4,6]生成的sql如下:

SELECT * FROM `user` WHERE id in ( 2 , 4, 6 ) 

3.<set></set>

更新實(shí)體屬性要用到的標(biāo)簽,一般我們使用動(dòng)態(tài)sql更新用戶信息 update user set username = ?, age = ?,時(shí)要處理最后一個(gè)逗號(hào)的問題,那么使用set標(biāo)簽就可以自動(dòng)幫我們處理這個(gè)逗號(hào)。

示例

    //使用set標(biāo)簽進(jìn)行動(dòng)態(tài)set,要注意條件判斷:沒被刪除的用戶才可以更新數(shù)據(jù)
    @Update("<script>"
            + "UPDATE `user` "
            + "<set>"
            + "<if test='nickName != null'>nick_name = #{nickName}, </if>"
            + "<if test='age != null'>age = #{age}, </if>"
            + "<if test='phoneNumber != null'>phone_number = #{phoneNumber}, </if>"
            + "<if test='birthday != null'>birthday = #{birthday}, </if>"
            + "<if test='status != null'>status = #{status}, </if>"
            + "<if test='sex != null'>sex = #{sex}, </if>"
            + "</set>"
            + "WHERE id = #{id} AND status != 'DELETE';"
            + "</script>")
    void updateUser(User user);

4.<where></where>

和更新數(shù)據(jù)時(shí)遇到的問題一樣,我們在動(dòng)態(tài)查詢時(shí)也要?jiǎng)討B(tài)拼接查詢條件,最前邊一個(gè)查詢條件是沒有AND或者OR的,以前通常使用1 = 1避開這個(gè)問題,那么現(xiàn)在可以使用標(biāo)簽自動(dòng)幫我們處理。

示例

    /**
     * 根據(jù)條件查詢用戶
     * 注意其中nickName模糊查詢的處理方法
     * 注意其中關(guān)于生日的區(qū)間判斷, &lt; &gt;
     * @param userQueryDTO
     * @return
     */
    @Select("<script>"
            + "SELECT * FROM `user`"
            + "<where>"
            + "<bind name='nickName' value=\"'%' + nickName + '%'\" />"
            + "<if test='nickName != null'>AND nick_name like #{nickName}</if>"
            + "<if test='phoneNumber !=null'>AND phone_number = #{phoneNumber}</if>"
            + "<if test='sex !=null'>AND sex = #{sex}</if>"
            + "<if test='age !=null'>AND age = #{age}</if>"
            + "<if test='fromBirthday !=null'>AND birthday &gt; #{fromBirthday}</if>"
            + "<if test='toBirthday !=null'>AND birthday &lt; #{toBirthday}</if>"
            + "<if test='status !=null'>AND status = #{status}</if>"
            + "</where>"
            + "</script>")
    List<User> queryByCondition(UserQueryDTO userQueryDTO);

5.<bind name='新屬性' value="'%' + 原屬性 + '%'" />

在模糊查詢時(shí),我們通常使用 where name like %金% 這樣的方式來進(jìn)行查詢(當(dāng)然這樣效率很低,不推薦),但是在mybatis里面我們直接寫 where name like %#{name}% 是不行的,
會(huì)生成 where name like %'金'% 這樣的sql, 很明顯是不行的。有兩種方式可以處理。

1)、傳入的屬性上加上%號(hào),例如傳入的name就為  %金% ,這樣可以解決,但是不方便。

2)、使用bind標(biāo)簽,我們可以在sql中加入一行賦值操作

<bind name='newName' value="'%' + name + '%'" />

示例:參照上一個(gè)示例。

6.<choose><when test='條件1'></when><when test='條件2'></when><otherwise></otherwise></choose>

這個(gè)java中的switch比較像,如果條件1成立,就執(zhí)行條件1中的語句,剩下的不執(zhí)行。條件1不成立就判斷條件2,如果條件2還不成立就執(zhí)行otherwise中的sql。

示例

    /**
     * 如果age有值,通過age查詢
     * 如果age沒有值,則通過sex查詢
     * 如果age和sex都沒值,則查詢所有status為UNLOCK的用戶
     * @param age
     * @param sex
     * @return
     */
    @Select("<script>"
            + "SELECT * FROM `user`"
            + "<where>"
            + "<choose>"
            + "<when test='age != null'>AND age = #{age}</when>"
            + "<when test='sex != null'>AND sex = #{sex}</when>"
            + "<otherwise>AND status = 'UNLOCK'</otherwise>"
            + "</choose>"
            + "</where>"
            + "</script>")
    List<User> getByOrderCondition(@Param("age") Integer age, @Param("sex") Sex sex);

六、完整示例

其中的用戶實(shí)體等沒有貼出來,太亂了,完整示例代碼可以參考文章開頭的github項(xiàng)目。

UserController

package com.kingboy.controller.user;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.kingboy.common.utils.page.PageParam;
import com.kingboy.common.utils.page.PageResult;
import com.kingboy.common.utils.page.PageResultFactory;
import com.kingboy.common.utils.result.ApiResult;
import com.kingboy.domain.user.Sex;
import com.kingboy.domain.user.Status;
import com.kingboy.domain.user.User;
import com.kingboy.dto.user.UserQueryDTO;
import com.kingboy.repository.user.UserRepository;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * @author kingboy--KingBoyWorld@163.com
 * @date 2017/12/30 下午11:59
 * @desc 用戶接口.
 */
@RestController
@RequestMapping(value = "/user")
public class UserController {
    @Resource
    UserRepository userRepository;
    @Resource
    PageResultFactory pageResultFactory;
    /**
     * 保存單個(gè)用戶
     * http://localhost:8080/user
     * {"nickName":"kingboy","age":"26","sex":"BOY","phoneNumber":"13132296607","birthday":"2011-12-12 12:12","status":"UNLOCK"}
     * @param user
     * @return
     */
    @PostMapping
    public ApiResult save(@RequestBody User user) {
        userRepository.saveUser(user);
        return ApiResult.success(user);
    }
    /**
     * 批量保存
     * http://localhost:8080/user/list
     * [
     * {"nickName":"kingboy","age":"26","sex":"BOY","phoneNumber":"13132296607","birthday":"2011-12-12 12:12","status":"UNLOCK"},
     * {"nickName":"kingboy","age":"26","sex":"BOY","phoneNumber":"13132296607","birthday":"2011-12-12 12:12","status":"UNLOCK"},
     * {"nickName":"kingboy","age":"26","sex":"BOY","phoneNumber":"13132296607","birthday":"2011-12-12 12:12","status":"UNLOCK"}
     * ]
     * @param users
     * @return
     */
    @PostMapping(value = "/list")
    public ApiResult save(@RequestBody List<User> users) {
        userRepository.saveUserList(users);
        return ApiResult.success(users);
    }
    /**
     * 更新單個(gè)用戶
     * http://localhost:8080/user
     * {"id":"1","nickName":"kingboy","age":"26","sex":"BOY","phoneNumber":"13132296607","birthday":"2011-12-12 12:12","status":"UNLOCK"}
     * @return
     */
    @PutMapping
    public ApiResult update(@RequestBody User user) {
        userRepository.updateUser(user);
        return ApiResult.success("success");
    }
    /**
     * 刪除用戶
     * http://localhost:8080/user/1
     * @return
     */
    @DeleteMapping("/{id}")
    public ApiResult remove(@PathVariable Long id) {
        //軟刪除
        userRepository.remove(id, Status.DELETE);
        //硬刪除
        //userRepository.delete(id);
        return ApiResult.success("success");
    }
    /**
     * 通過ID獲取用戶
     * http://localhost:8080/user/1
     * @return
     */
    @GetMapping("/{id}")
    public ApiResult get(@PathVariable Long id) {
        User user = userRepository.get(id);
        return ApiResult.success(user);
    }
    /**
     * 分頁查詢用戶集合
     * http://localhost:8080/user
     * 需要注意的是PageHelper是從1開始分頁,而Hibernate/Jpa是從0開始分頁的
     * @return
     */
    @GetMapping
    @Transactional(readOnly = true)
    public ApiResult get(@ModelAttribute PageParam pageParam) {
        //分頁并查詢
        Page<User> pageInfo = PageHelper.startPage(pageParam.getPage(), pageParam.getSize());
        List<User> users = userRepository.listUser();
        //實(shí)際使用時(shí),最后一個(gè)參數(shù)傳入要轉(zhuǎn)換的類型DTO
        PageResult<User> result = pageResultFactory.createAndConvert(pageParam.getMybatisPage(), pageInfo.getTotal(), users, User.class);
        return ApiResult.success(result);
    }
    /**
     * 通過id集合查詢用戶,這里就不做分頁了。
     * http://localhost:8080/user/ids
     * [1,3]
     * @return
     */
    @PostMapping("/ids")
    public ApiResult getUserByIds(@RequestBody List<Long> ids) {
        List<User> users = userRepository.listUserByIds(ids);
        return ApiResult.success(users);
    }
    /**
     * 通過查詢條件賴查詢用戶,這里也不做分頁了
     * http://localhost:8080/user/query
     * {
     *   "nickName":"i",
     *   "fromBirthday":"1999-12-31 12:12",
     * }
     * @param userQueryDTO
     * @return
     */
    @PostMapping("/query")
    public ApiResult queryUser(@RequestBody UserQueryDTO userQueryDTO) {
        List<User> users = userRepository.queryByCondition(userQueryDTO);
        return ApiResult.success(users);
    }
    /**
     * 根據(jù)條件的順序來查詢用戶
     * http://localhost:8080/user/query?age=24
     * 演示choose標(biāo)簽的用法:如果傳入age就按年齡查詢用戶,age沒有傳入就按照sex賴查詢用戶。如果兩者都沒有傳入,那就查詢所有status沒有凍結(jié)的用戶
     * 類似如下:
     * switch(value) {
     *     case age:
     *        //查詢age
     *        break;
      *     case sex:
     *        //查詢sex
     *        break;
     *     default:
     *        //查詢status
     *        break;
     * }
     */
    @GetMapping("/query")
    public ApiResult findUserByOrderCondition(@RequestParam(required = false) Integer age, @RequestParam(required = false) Sex sex) {
        List<User> users = userRepository.getByOrderCondition(age, sex);
        return ApiResult.success(users);
    }
}

UserRepository

package com.kingboy.repository.user;
import com.kingboy.domain.user.Sex;
import com.kingboy.domain.user.Status;
import com.kingboy.domain.user.User;
import com.kingboy.dto.user.UserQueryDTO;
import org.apache.ibatis.annotations.*;
import java.util.List;
/**
 * @author kingboy--KingBoyWorld@163.com
 * @date 2017/12/31 上午12:01
 * @desc 用戶倉儲(chǔ).
 */
public interface UserRepository {
    /**
     * 添加用戶
     * @Options返回在數(shù)據(jù)庫中主鍵,自動(dòng)賦值到user的id字段中
     * keyProperty = "id"的默認(rèn)值為id,可以省略
     */
    @Insert("INSERT INTO `user` VALUES (#{id}, #{nickName}, #{phoneNumber}, #{sex}, #{age}, #{birthday}, #{status})")
    @Options(useGeneratedKeys = true, keyColumn = "id", keyProperty = "id")
    void saveUser(User user);
    /**
     * 批量保存用戶
     * @param users
     */
    @Insert("<script>" +
            "INSERT INTO `user` VALUES " +
            "<foreach item = 'item' index = 'index' collection='list' separator=','>" +
            "(#{item.id}, #{item.nickName}, #{item.phoneNumber}, #{item.sex}, #{item.age}, #{item.birthday}, #{item.status})" +
            "</foreach>" +
            "</script>")
    @Options(useGeneratedKeys = true)
    void saveUserList(List<User> users);
    //使用set標(biāo)簽進(jìn)行動(dòng)態(tài)set,要注意條件判斷:沒被刪除的用戶才可以更新數(shù)據(jù)
    @Update("<script>"
            + "UPDATE `user` "
            + "<set>"
            + "<if test='nickName != null'>nick_name = #{nickName}, </if>"
            + "<if test='age != null'>age = #{age}, </if>"
            + "<if test='phoneNumber != null'>phone_number = #{phoneNumber}, </if>"
            + "<if test='birthday != null'>birthday = #{birthday}, </if>"
            + "<if test='status != null'>status = #{status}, </if>"
            + "<if test='sex != null'>sex = #{sex}, </if>"
            + "</set>"
            + "WHERE id = #{id} AND status != 'DELETE';"
            + "</script>")
    void updateUser(User user);
    //刪除用戶,軟刪除
    @Update("UPDATE `user` SET status = #{status} WHERE id = #{id}")
    void remove(@Param(value = "id") Long id, @Param(value = "status") Status status);
    //刪除用戶,硬刪除
    @Delete("DELETE FROM `user` WHERE id = #{id}")
    void delete(@Param(value = "id") Long id);
    /**
     * 查詢用戶
     * 單個(gè)參數(shù)時(shí),@Param注解可以省略
     * 在配置中指定了駝峰映射,所以@Results的結(jié)果映射可以省略,不是駝峰類型的仍然需要寫結(jié)果映射。
     */
    @Select("SELECT * FROM `user` WHERE id = #{id}")
    @Results({
            @Result(column = "nick_name", property = "nickName"),
            @Result(column = "phone_number", property = "phoneNumber")
    })
    User get(Long id);
    //分頁查詢用戶
    @Select("SELECT * FROM `user`")
    List<User> listUser();
    /**
     * 通過id集合查詢用戶
     * @param ids
     * @return
     */
    @Select("<script>"
            + "SELECT * FROM `user` WHERE id in "
            + "<foreach item='item' collection='list' open='(' close=')' separator=','>"
            + "#{item}"
            + "</foreach>"
            + "</script>")
    List<User> listUserByIds(List<Long> ids);
    /**
     * 根據(jù)條件查詢用戶
     * 注意其中nickName模糊查詢的處理方法
     * 注意其中關(guān)于生日的區(qū)間判斷
     * @param userQueryDTO
     * @return
     */
    @Select("<script>"
            + "SELECT * FROM `user`"
            + "<where>"
            + "<bind name='nickName' value=\"'%' + nickName + '%'\" />"
            + "<if test='nickName != null'>AND nick_name like #{nickName}</if>"
            + "<if test='phoneNumber !=null'>AND phone_number = #{phoneNumber}</if>"
            + "<if test='sex !=null'>AND sex = #{sex}</if>"
            + "<if test='age !=null'>AND age = #{age}</if>"
            + "<if test='fromBirthday !=null'>AND birthday &gt; #{fromBirthday}</if>"
            + "<if test='toBirthday !=null'>AND birthday &lt; #{toBirthday}</if>"
            + "<if test='status !=null'>AND status = #{status}</if>"
            + "</where>"
            + "</script>")
    List<User> queryByCondition(UserQueryDTO userQueryDTO);
    /**
     * 如果age有值,通過age查詢
     * 如果age沒有值,則通過sex查詢
     * 如果age和sex都沒值,則查詢所有status為UNLOCK的用戶
     * @param age
     * @param sex
     * @return
     */
    @Select("<script>"
            + "SELECT * FROM `user`"
            + "<where>"
            + "<choose>"
            + "<when test='age != null'>AND age = #{age}</when>"
            + "<when test='sex != null'>AND sex = #{sex}</when>"
            + "<otherwise>AND status = 'UNLOCK'</otherwise>"
            + "</choose>"
            + "</where>"
            + "</script>")
    List<User> getByOrderCondition(@Param("age") Integer age, @Param("sex") Sex sex);
}

以上就是SpringBoot使用Mybatis注解實(shí)現(xiàn)分頁動(dòng)態(tài)sql開發(fā)教程的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Mybatis注解分頁動(dòng)態(tài)sql教程的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringAOP四種通知類型+環(huán)繞通知說明

    SpringAOP四種通知類型+環(huán)繞通知說明

    這篇文章主要介紹了SpringAOP四種通知類型+環(huán)繞通知說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring純Java配置集成kafka代碼實(shí)例

    Spring純Java配置集成kafka代碼實(shí)例

    這篇文章主要介紹了Spring純Java配置集成kafka代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • IO流概述分類字節(jié)流寫數(shù)據(jù)三種方式及問題分析

    IO流概述分類字節(jié)流寫數(shù)據(jù)三種方式及問題分析

    這篇文章主要為大家介紹了IO流概述分類字節(jié)流寫數(shù)據(jù)三種方式及寫數(shù)據(jù)問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • java實(shí)現(xiàn)文件拷貝的七種方式

    java實(shí)現(xiàn)文件拷貝的七種方式

    這篇文章主要介紹了java實(shí)現(xiàn)文件拷貝的七種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 利用Lambda表達(dá)式創(chuàng)建新線程案例

    利用Lambda表達(dá)式創(chuàng)建新線程案例

    這篇文章主要介紹了利用Lambda表達(dá)式創(chuàng)建新線程案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 智能 AI 代碼生成工具 Cursor 安裝和使用超詳細(xì)教程

    智能 AI 代碼生成工具 Cursor 安裝和使用超詳細(xì)教程

    Cursor.so 是一個(gè)集成了 GPT-4 的國內(nèi)直接可以訪問的,優(yōu)秀而強(qiáng)大的免費(fèi)代碼生成器,可以幫助你快速編寫、編輯和討論代碼,這篇文章主要介紹了智能 AI 代碼生成工具 Cursor 安裝和使用介紹,需要的朋友可以參考下
    2023-05-05
  • PowerJob的Evaluator方法工作流程源碼解讀

    PowerJob的Evaluator方法工作流程源碼解讀

    這篇文章主要介紹了PowerJob的Evaluator方法工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • SpringBoot配置Redis實(shí)現(xiàn)保存獲取和刪除數(shù)據(jù)

    SpringBoot配置Redis實(shí)現(xiàn)保存獲取和刪除數(shù)據(jù)

    本文主要介紹了SpringBoot配置Redis實(shí)現(xiàn)保存獲取和刪除數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • java實(shí)現(xiàn)仿射密碼加密解密

    java實(shí)現(xiàn)仿射密碼加密解密

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)仿射密碼加密解密的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 一篇文章帶你入門java集合

    一篇文章帶你入門java集合

    Java的集合類型都是對java.util包中Collection接口的繼承,這里我們主要介紹依賴于collection的一些主分支,一起來看一下Java中的collection集合類型總結(jié)
    2021-08-08

最新評(píng)論

额济纳旗| 灵石县| 绵竹市| 宁晋县| 正定县| 衡阳市| 横峰县| 瑞昌市| 伊金霍洛旗| 四平市| 宽城| 翁源县| 佛坪县| 永定县| 津市市| 德令哈市| 沈丘县| 彩票| 革吉县| 连云港市| 桐柏县| 五台县| 白水县| 沁源县| 长汀县| 开封县| 六安市| 香格里拉县| 兰州市| 慈溪市| 大田县| 无极县| 外汇| 陇南市| 达州市| 太白县| 湄潭县| 东丰县| 涿州市| 个旧市| 华容县|