簡化開發, 活用插件. 擁抱變化,持續學習.
首先是配置1:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
配置2 :
server: port: 8008 servlet: context-path: /mp spring: datasource: username: root password: 123 url: jdbc:mysql://127.0.0.1:3306/mp?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8 driver-class-name: com.mysql.cj.jdbc.Driver logging: level: root: warn com.example.demo.dao: trace pattern: console: '%p%m%n' #xml自定義sql mybatis-plus: mapper-locations: - com/example/demo/mapper/*
常用注解 @TableName 類名<===>表名
@TableId 主鍵映射
@TableField 列名映射 ps (駝峰命名對應_, managerId <==> manager_id)
當 exist = false 數據不會插入數據庫
來自BaseMapper常規API:
/** * 插入一條記錄 * * @param entity 實體對象 */ int insert(T entity); /** * 根據 ID 刪除 * * @param id 主鍵ID */ int deleteById(Serializable id); /** * 根據 columnMap 條件,刪除記錄 * * @param columnMap 表字段 map 對象 (key數據庫的列名,value比較的值) */ int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); /** * 刪除(根據ID 批量刪除) * * @param idList 主鍵ID列表(不能為 null 以及 empty) */ int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
條件構造器AbstractWrapper :
以查詢方法舉例子(構造實例): QueryWrapper<User> query = Wrappers.query(); @Param(Constants.WRAPPER) Wrapper<T> queryWrapper new LambdaQueryChainWrapper<>(userMapper) LambdaQueryWrapper<User> query = Wrappers.lambdaQuery();
詳細案例:
1 // WHERE (username LIKE ? AND age BETWEEN ? AND ? OR age >= ?) ORDER BY id DESC 2 query.likeRight("username", "張").between("age", 20, 30).or().ge("age", 20).orderByDesc("id"); 3 // 子查詢,時間格式 4 // WHERE (date_format(create_time,'%Y-%m-%d') = ? AND manager_id IN (select id from mp_user where username like '大%')) 5 query.apply("date_format(create_time,'%Y-%m-%d') = {0}", "2019-09-28").inSql("manager_id","select id from mp_user where username like '大%'");
and or 的使用
// WHERE (username LIKE ? AND ( (email IS NOT NULL OR age <= ?) )) query.likeLeft("username", "翔").and(wp -> wp.isNotNull("email").or().le("age", 80)); // WHERE (username LIKE ? OR ( (email IS NOT NULL AND age >= ?) )) query.like("username", "雨").or(wp -> wp.isNotNull("email").ge("age", 89));
() 優先的設定 和 last取值
// WHERE (( (email IS NOT NULL OR age <= ?) ) AND username LIKE ?) ORDER BY age ASC limit 2 query.nested(wp -> wp.isNotNull("email").or().le("age", 31)).like("username", "張") .orderByAsc("age").last("limit 2");
// (age IN (?,?,?)) query.in("age", Arrays.asList(25,28,32));
// id, username 排除屬性: 用!和&&進行修飾 query.select(User.class , wp -> wp.getColumn().equals("id")||wp.getColumn().equals("username")).le("age", 100); // 當屬性和列名不一致的時候不要使用下面的方式 // query.select("id","username").le("age", 100);
//condition 判斷條件是否執行 public Children like(boolean condition, R column, Object val) query.like(StringUtils.isNotEmpty(name), "username",name) query.select("manager_id","avg(age) as avg", "min(age) as min", "max(age) as max") .groupBy("manager_id").having("sum(age) < {0}", 500);
List<Map<String, Object>> list = userMapper.selectMaps(query); selectObject 返回一列 selectOne 返回一行,多了報錯 selectCount int
selectMaps 適用於非全量數據的返回