-
指定數(shù)據(jù)庫(kù)表名注解:@TableName
MP默認(rèn)主鍵名是id
指定表的主鍵注解:@TableId
實(shí)體屬性名和表中字段名對(duì)應(yīng)注解:@TableField("")
查看全部 -
selct排除字段
查看全部 -
/**
?* @date 2020年2月23日??
?* @author 翁?hào)|州
?* @所有方法的代碼點(diǎn)擊查看全文,整理了一整天累死了
?*/
package first;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.additional.update.impl.LambdaUpdateChainWrapper;
import com.mp.dao.UserMapper;
import com.mp.entity.User;
import com.mp.service.UserService;
/**
?* @date 2020年2月23日??
?* @author 翁?hào)|州
?* @方法中文名稱:
?*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class SimpleTest {
@Autowired
private UserMapper userMapper;
//展示所有
@Test
public void select() {
List<User> list = userMapper.selectList(null);
Assert.assertEquals(5, list.size());
list.forEach(System.out::println);
System.out.println();
}
//傳統(tǒng)添加
public void insert() {
User user = new User();
user.setName("名字");
user.setAge(31);
user.setManagerId(123L);
user.setCreateTime(LocalDateTime.now());
int rows = userMapper.insert(user);
System.out.println("影響記錄數(shù)"+rows);
}
//單體展示
public void selectById() {
User user = userMapper.selectById(123L);
System.out.println(user);
}
//多條展示
public void selectByIds() {
List<Long> idList = Arrays.asList(123L,234L,345L);
List<User> users = userMapper.selectBatchIds(idList);
users.forEach(System.out::println);
}
//map形式查詢
public void selectByMap() {
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("name", "王天風(fēng)");
columnMap.put("age", 25);
List<User> users = userMapper.selectByMap(columnMap);
users.forEach(System.out::println);
}
//wrapper 名字包含雨且年齡小于40
public void selectByWrapper() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.eq("name", "雨").lt("age", 40);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//wrapper 名字包含雨,且年齡在20到40之間,email不為空
public void selectByWrapper2() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.eq("name", "雨").between("age", 20, 40).isNotNull("email");
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//wrapper 名字包含王,年齡大于等于25,按年齡降序排序,而后再按id升序排序
public void selectByWrapper3() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.likeRight("name", "王").or().ge("age", 25).orderByDesc("age").orderByAsc("id");
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//創(chuàng)建日期為2019年2月14日且直屬上級(jí)名字為王姓
public void selectByWrapper4() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.apply("date_format(create_time,'%Y-%m-%d')={0}", "2019-02-14 or true or true")
.inSql("manager_id", "select id from user where name like '王%'");
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//名字為王姓,并且(年齡小于40或郵箱不為空)
public void selectByWrapper5() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.likeRight("name", "王").and(wq -> wq.lt("age", 40).or().isNotNull("email"));
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//名字為王姓,或者(年齡小于40并且年齡大于20并且郵箱不為空)
public void selectByWrapper6() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.likeRight("name", "王").or(wq -> wq.between("age", 20, 40).isNotNull("email"));
//queryWrapper.likeRight("name", "王").or(wq -> wq.lt("age", 40).gt("age", 20).isNotNull("email"));
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//名字為王姓,并且(年齡小于40或郵箱不為空)
public void selectByWrapper7() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.nested(wq -> wq.lt("age", 40).or().isNotNull("email")).likeRight("name", "王");
//queryWrapper.likeRight("name", "王").and(wq -> wq.lt("age", 40).or().isNotNull("email"));
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//年齡為30,31,34,35
public void selectByWrapper8() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.in("age", Arrays.asList(30,31,34,35));
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//只返回滿足條件的其中一條語(yǔ)句即可
public void selectByWrapper9() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.in("age", Arrays.asList(30,31,34,35)).last("limit 1");
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//名字中包含雨并且年齡小于40,只展示id和名字
public void selectByWrapperSupper() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.select("id","name").like("name", "雨").lt("age", 40);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//名字中包含雨并且年齡小于40,展示不包括創(chuàng)建字段和上級(jí)id字段的其他字段
public void selectByWrapperSupper2() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.like("name", "雨").lt("age", 40)
.select(User.class, info -> !info.getColumn().equals("create_time")
&&!info.getColumn().equals("manager_id"));
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//測(cè)試condition
@Test
public void testCondition() {?
String name = "王";
String email = "";
condition1(name,email);
}
//名字中包含王,當(dāng)email為空時(shí)不查詢
public void condition1(String name,String email) {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
//傳統(tǒng)方法
//if (StringUtils.isNotColumnName(name)) {
// queryWrapper.like("name", name);
//}
//if (StringUtils.isNotColumnName(email)) {
// queryWrapper.like("email", email);
//}
queryWrapper.like(StringUtils.isNotEmpty(name), "name",name)
.like(StringUtils.isNotEmpty(email), "email",email);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//查找姓名為劉紅雨且年齡32歲的數(shù)據(jù)
public void selectByWrapperEntity() {?
User whereUser = new User();
whereUser.setName("劉紅雨");
whereUser.setAge(32);
QueryWrapper<User> queryWrapper = new QueryWrapper<User>(whereUser);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//allEq
public void selectByWrapperAllEq() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
Map<String, Object> params = new HashMap<String, Object>();
//姓名為王天風(fēng),年齡25
//params.put("name", "王天風(fēng)");
//params.put("age", 25);
//queryWrapper.allEq(params);
//姓名為王天風(fēng),年齡為空則忽略
params.put("name", "王天風(fēng)");
params.put("age", null);
//queryWrapper.allEq(params,false);
//剔除name查詢條件
queryWrapper.allEq((k,v)->!k.equals("name"), params);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
//Map格式,查詢姓名包含雨,年齡小于40的數(shù)據(jù)
public void selectByWrapperMaps() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.like("name", "雨").lt("age", 40);
List<Map<String, Object>> userList = userMapper.selectMaps(queryWrapper);
userList.forEach(System.out::println);
}
//Map格式,按照直屬上級(jí)id分組,查詢每組的平均年齡,最大年齡,最小年齡,只去年齡總和小于500的組
public void selectByWrapperMaps2() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.select("avg(age) avg_age","min(age) min_age","max(age) max_age")
.groupBy("manager_id").having("sum(age)<{0}",500);
List<Map<String, Object>> userList = userMapper.selectMaps(queryWrapper);
userList.forEach(System.out::println);
}
//obj格式,查詢姓名包含雨,年齡小于40的數(shù)據(jù)
public void selectByWrapperobjs() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.select("id","name").like("name", "雨").lt("age", 40);
List<Object> userList = userMapper.selectObjs(queryWrapper);
userList.forEach(System.out::println);
}
//查詢姓名包含雨,年齡小于40的數(shù)據(jù)條數(shù)的總條數(shù)
public void selectByWrapperCount() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.like("name", "雨").lt("age", 40);
Integer count = userMapper.selectCount(queryWrapper);
System.out.println("總記錄數(shù)"+ count);
}
//查詢姓名包含雨,年齡小于40的數(shù)據(jù)條數(shù)的一條數(shù)據(jù)
public void selectByWrapperOne() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.like("name", "雨").lt("age", 40);
User user = userMapper.selectOne(queryWrapper);
System.out.println(user);
}
//lambda,三種起手
public void selectLambda() {?
//LambdaQueryWrapper<User> lambda = new QueryWrapper<User>().lambda();
//LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<User>();
LambdaQueryWrapper<User> lambdaQuery = Wrappers.<User>lambdaQuery();
lambdaQuery.like(User::getName, "雨").lt(User::getAge, 40);
List<User> userList = userMapper.selectList(lambdaQuery);
userList.forEach(System.out::println);
}
//lambda,名字為王姓,并且(年齡小于40或郵箱不為空)
public void selectLambda2() {?
LambdaQueryWrapper<User> lambdaQuery = Wrappers.<User>lambdaQuery();
lambdaQuery.likeRight(User::getName, "王")
.and(lqw ->lqw.lt(User::getAge, 40).or().isNotNull(User::getEmail));
List<User> userList = userMapper.selectList(lambdaQuery);
userList.forEach(System.out::println);
}
//lambda,名字為王姓,并且(年齡小于40或郵箱不為空),LambdaQueryChainWrapper一氣呵成
public void selectLambda3() {?
List<User> userList = new LambdaQueryChainWrapper<User>(userMapper).like(User::getName, "雨").ge(User::getAge, 20).list();
userList.forEach(System.out::println);
}
//分頁(yè)
public void selectPage() {?
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.ge("age", 26);
Page<User> page = new Page<User>(1,10);//1為第一頁(yè),10為一頁(yè)10行
IPage<User> iPage = userMapper.selectPage(page, queryWrapper);
System.out.println("總頁(yè)數(shù)"+iPage.getPages());
System.out.println("總記錄數(shù)"+iPage.getTotal());
List<User> userList = iPage.getRecords();
userList.forEach(System.out::println);
}
//傳統(tǒng)根據(jù)id更新,根據(jù)id更新數(shù)據(jù)
public void updateById() {?
User user = new User();
user.setId(123L);
user.setAge(25);
user.setEmail("wtf2@baomidou.com");
int rows = userMapper.updateById(user);
System.out.println("影響記錄數(shù)"+ rows);
}
//傳統(tǒng)根據(jù)Wrapper更新,姓名為李藝偉且年齡為28的數(shù)據(jù),更改其id,年齡和郵箱
public void updateByWrapper2() {?
UpdateWrapper<User> updateWrapper = new UpdateWrapper<User>();
updateWrapper.eq("name", "李藝偉").eq("age", 28);
User user = new User();
user.setId(123L);
user.setAge(25);
user.setEmail("wtf2@baomidou.com");
int rows = userMapper.update(user,updateWrapper);
System.out.println("影響記錄數(shù)"+ rows);
}
//Wrapper更新,姓名為李藝偉且年齡為29的數(shù)據(jù),更改年齡為30
public void updateByWrapper3() {?
UpdateWrapper<User> updateWrapper = new UpdateWrapper<User>();
updateWrapper.eq("name", "李藝偉").eq("age", 29).set("age", 30);
int rows = userMapper.update(null,updateWrapper);
System.out.println("影響記錄數(shù)"+ rows);
}
//lambda的Wrapper更新,姓名為李藝偉且年齡為29的數(shù)據(jù),更改年齡為30
public void updateByWrapperLambda() {?
LambdaUpdateWrapper<User> lambdaUpdate = Wrappers.<User>lambdaUpdate();
lambdaUpdate.eq(User::getName, "李藝偉").eq(User::getAge, 30).set(User::getAge, 31);
int rows = userMapper.update(null,lambdaUpdate);
System.out.println("影響記錄數(shù)"+ rows);
}
//lambda的Wrapper更新,姓名為李藝偉且年齡為29的數(shù)據(jù),更改年齡為30,一氣呵成
public void updateByWrapperLambdaChain() {?
boolean update = new LambdaUpdateChainWrapper<User>(userMapper)
.eq(User::getName, "李藝偉").eq(User::getAge, 29).set(User::getAge, 31).update();
System.out.println(update);
}
//根據(jù)id刪除數(shù)據(jù)
public void deleteById() {
int rows = userMapper.deleteById(123L);
System.out.println("刪除條數(shù)"+rows);
}
//根據(jù)map中名稱為向后,年齡25刪除數(shù)據(jù)
public void deleteByMap() {
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("name", "向后");
columnMap.put("age",25);
int rows = userMapper.deleteByMap(columnMap);
System.out.println("刪除條數(shù)"+rows);
}
//根據(jù)id刪除多條數(shù)據(jù)
public void deleteByBatchIds() {
int rows = userMapper.deleteBatchIds(Arrays.asList(123L,234L,345L));
System.out.println("刪除條數(shù)"+rows);
}
//根據(jù)wrapper刪除數(shù)據(jù)
public void deleteByWrapper() {
LambdaQueryWrapper<User> lambdaQueryWrapper = Wrappers.<User>lambdaQuery();
lambdaQueryWrapper.eq(User::getAge, 27).or().gt(User::getAge, 41);
int rows = userMapper.delete(lambdaQueryWrapper);
System.out.println("刪除條數(shù)"+rows);
}
//AR模式添加
public void insert2() {
User user = new User();
user.setName("劉華");
user.setAge(29);
user.setEmail("lh@baomidou.com");
user.setManagerId(123L);
user.setCreateTime(LocalDateTime.now());
boolean insert = user.insert();//類繼承Model
System.out.println(insert);
}
//AR模式查找
public void selectById2() {
User user = new User();
user.setId(123L);
User selectById = user.selectById();
System.out.println(selectById);
}
//AR模式更新
public void updateById2() {
User user = new User();
user.setId(123L);
user.setName("劉華");
user.setAge(29);
user.setEmail("lh@baomidou.com");
user.setManagerId(123L);
user.setCreateTime(LocalDateTime.now());
boolean updateById = user.updateById();//類繼承Model
System.out.println(updateById);
}
//AR模式添加或更新
public void insertOrUpdate() {
User user = new User();
user.setName("劉華");
user.setAge(29);
user.setEmail("lh@baomidou.com");
user.setManagerId(123L);
user.setCreateTime(LocalDateTime.now());
boolean insertOrUpdate = user.insertOrUpdate();//類繼承Model
System.out.println(insertOrUpdate);
}
@Autowired
private UserService userService;
//使用service,獲取一條數(shù)據(jù)
public void getOne() {
User one = userService.getOne(Wrappers.<User>lambdaQuery().gt(User::getAge, 25));//多條報(bào)錯(cuò)
System.out.println(one);
}
//使用service,獲取一條數(shù)據(jù)
public void batch() {
User user1 = new User();
user1.setName("徐麗1");
user1.setAge(28);
User user2 = new User();
user2.setId(123L);
user2.setName("徐麗2");
user2.setAge(29);
List<User> users = Arrays.asList(user1,user2);
boolean saveBatch = userService.saveBatch(users);
//保存或更新
//userService.saveOrUpdateBatch(users);
System.out.println(saveBatch);
}
//使用service,lambda查詢年齡大于25且名字包含雨的數(shù)據(jù),一氣呵成
public void chain1() {
List<User> users = userService.lambdaQuery().gt(User::getAge, 25).like(User::getName, "雨").list();
users.forEach(System.out::println);
}
//使用service,lambda更新年齡為25的數(shù)據(jù)為26,一氣呵成
public void chain2() {
boolean update = userService.lambdaUpdate().eq(User::getAge, 25).set(User::getAge, 26).update();
System.out.println(update);
}
//使用service,lambda刪除年齡為25的數(shù)據(jù),一氣呵成
public void chain3() {
boolean remove = userService.lambdaUpdate().gt(User::getAge, 25).remove();
System.out.println(remove);
}
}
查看全部 -
如果實(shí)體屬性和數(shù)據(jù)庫(kù)字段對(duì)不上:MP提供有三種方式排除非表字段使用方法:
?1.在實(shí)體類使用transient標(biāo)注成員變量,數(shù)據(jù)映射時(shí)就不會(huì)參與序列化
2.要序列化: 設(shè)置該屬性位靜態(tài)變量static
3.在該屬性上面添加@TableFieId(exist=false):exist代表數(shù)據(jù)庫(kù)是否有該字段,false代表沒有
查看全部 -
insert():插入數(shù)據(jù)
查看全部 -
Spring mybatis配置查看全部
-
普通查詢方法:
1、List<T>?selectBatch(List<T> ids)
2、List<T> selectByMap(Map<key,value> map)
PS:map中的key為數(shù)據(jù)庫(kù)中的列名(如果輸入的是實(shí)體類中的屬性名會(huì)報(bào)錯(cuò))、value是列對(duì)應(yīng)的值
查看全部 -
MP 實(shí)體類數(shù)據(jù)庫(kù)字段對(duì)應(yīng)規(guī)則
1、@TableId作用
MP默認(rèn)找實(shí)體類屬性名為id的字段作為主鍵,如果沒找到會(huì)報(bào)錯(cuò),此時(shí)在實(shí)體類對(duì)應(yīng)主鍵字段上加@TableId注解就可以了
2、其他字段對(duì)應(yīng)規(guī)則
MP默認(rèn)實(shí)體類屬性名(除主鍵外)與數(shù)據(jù)庫(kù)字段名稱對(duì)應(yīng)規(guī)則為 :
realName -> real_name
3、@TableField("數(shù)據(jù)庫(kù)列名")
private String name;
實(shí)體類屬性名與數(shù)據(jù)庫(kù)列名不一致時(shí)使用此注解
4、@TableField(exist=false)
private String remark;
此注解表明實(shí)體類中的某個(gè)屬性不是數(shù)據(jù)庫(kù)表中字段
查看全部 -
MyBatis-Plus特性:
無(wú)侵入,損耗小、強(qiáng)大的CRUD操作
支持Lambda形式調(diào)用、支持多種數(shù)據(jù)庫(kù)
支持主鍵自動(dòng)生成、支持ActiveRecord模式
查看全部 -
如果判定isNotEmpty為true,則進(jìn)行該字段的對(duì)比查詢
如果返回false,說(shuō)明這個(gè)字段為空,不進(jìn)行按此字段查詢
查看全部 -
select(字段1,字段2) 選擇字段返回,select可以寫在queryWrapper后面:
查看全部 -
last(語(yǔ)句)?
last只能在mp中使用一次,多次調(diào)用將以最后一次為準(zhǔn)
查看全部 -
年齡在(30,31,34,35)的
使用in
查看全部 -
(年齡小于40或郵箱不為空)并且名字為王姓:
nested(wq->wq...)?
nested為嵌套的意思
說(shuō)明age合is not null字段為整體
查看全部 -
默認(rèn)實(shí)體中不為null的字段會(huì)出現(xiàn)在set中
這里是更新name equals "李藝偉" 并且 age equals 28 的user數(shù)據(jù)
更新的數(shù)據(jù)為set的 email 和 set的 age
通用mapper的操作中update(操作對(duì)象,wrapper條件)
查看全部
舉報(bào)