Springboot 开发常用技术整合--笔记2-3--myba
2019-06-26 本文已影响152人
牵手生活
image.png
MyBatis官方文档
SpringBoot深入解析——Mybatis-plus 的集成和使用(九)
image.png image.png image.png
官网&技术资料
MyBatis-plus官方文档&代码生成器文档--负责人baomidou
MyBatis官方文档
SpringBoot深入解析——Mybatis-plus 的集成和使用(九)
Mybatis&JPA简单比较
mybatis优势
- sql语句可以自由控制、更灵活、性能较高
- sql与代码分离,易于维护和阅读
- 提供xml标签,支持编写动态的sql语句(主要用于可选参数上)
mybatis劣势- 简单的CRUD操作还得写sql语句
- xml中有大量的sql要维护
- mybatis自身功能有限,但支持plugin
Jpa优势- Jpa移植性能更好(JPQL)
- 提供很多CRUD方法、开发效率高
- 对象化程度更高
mybatis-plus快速入门(更多参考官网文档)
image.pngSSM(Spring+SpringMVC+MyBatis)框架集
image.png排除实体中的部分字段不在数据库中
//transient表示字段不参与实例化过程
private transient String otherContent;
#或定义static
#或
//exist = false :表示数据库中没有这个字段
@TableField(exist = false)
private String otherContent;
单元测试
/**
* mybatis-plus的测试
*/
@RunWith(SpringRunner.class) //spring环境下运行Junit测试
@SpringBootTest //该类可以允许居于springboot测试
public class WechatMessageMapperTest {
@Autowired(required = false)
private WechatMessageMapper wechatMessageMapper;
/**
* 查找所有记录
* MyBatis学习笔记-03.MyBatis中五种成功映射数据库字段与实体类属性不一致的解决方案
* https://blog.csdn.net/qq_40279513/article/details/85163444
*/
@Test
public void testSelect() {
System.out.println(("----- selectAll method test ------"));
List<WechatMessage> wechatMessageList = wechatMessageMapper.selectList(null);
wechatMessageList.forEach(System.out::println);
}
/**
* 分页查询
*/
@Test
public void testSelectPages() {
//PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
QueryWrapper<WechatMessage> queryWrapper = new QueryWrapper<WechatMessage>();
queryWrapper.like("content","低调");
Page<WechatMessage> page = new Page<WechatMessage>(1,2);//当前页,每页的记录数
IPage<WechatMessage> iPage = wechatMessageMapper.selectPage(page,queryWrapper);
System.out.println("page页数:"+iPage.getPages());
}
/**
* 根据id列表查询记录
*/
@Test
public void testSelectIds() {
System.out.println(("----- selectIds method test ------"));
List<Long> idsList = Arrays.asList(38L,39L,40L);// new ArrayList<Long>();
List<WechatMessage> wechatMessageList = wechatMessageMapper.selectBatchIds(idsList);
wechatMessageList.forEach(System.out::println);
}
/**
* 通过selectByMap传递参数查询
*/
@Test
public void testSelectByMap() {
System.out.println(("----- selectMap method test ------"));
Map<String,Object> map = new HashMap<>();
map.put("original_wechat_id","wxid_on8oksh88zo22"); //注意key名时数据库中字段的名称
map.put("type",43);
List<WechatMessage> wechatMessageList = wechatMessageMapper.selectByMap(map);
wechatMessageList.forEach(System.out::println);
}
/**
* 条件构造器查询
* original_wechat_id中包含%xid%
* type<43
* 按original_wechat_id降序排列
* 按type升序排列
*/
@Test
public void testSelectByWrapper() {
System.out.println(("----- selectWrapper method test ------"));
QueryWrapper<WechatMessage> queryWrapper = new QueryWrapper<WechatMessage>();
//或
//QueryWrapper<WechatMessage> queryWrapper = Wrappers.<WechatMessage>query();
//QueryWrapper有更多的方法哦
queryWrapper.likeRight("original_wechat_id","wxid")
.lt("type",43)
.orderByDesc("original_wechat_id")
.orderByAsc("type");
List<WechatMessage> wechatMessageList = wechatMessageMapper.selectList(queryWrapper);
wechatMessageList.forEach(System.out::println);
}
/**
* 查找记录,并插入
*/
@Test
public void testSelectOneAndInsert() {
System.out.println(("----- selectOne method test ------"));
WechatMessage wechatMessage = wechatMessageMapper.selectById(13);
if (null != wechatMessage){
System.out.println(("found the message"));
System.out.println(wechatMessage);
wechatMessage.setID(0);//设置id防止报关键字重复,让它自己采用自增方式
wechatMessage.setStatus(1);
wechatMessage.setImgPath("fdfdsfdfdsfdfsdfdsd");
wechatMessage.setIsSend(1);
int ret = wechatMessageMapper.insert(wechatMessage);
System.out.println((ret +"====record is insert"));
//mybatisplus会自动把当前插入对象在数据库中的id写回到该实体中
System.out.println(wechatMessage.get_ID());
}
}
/**
* 查找记录,并插入
* MyBatis-Plus updateById方法更新不了空字符串/null解决方法
* https://blog.csdn.net/l848168/article/details/92829930
*/
@Test
public void testSelectOneAndUpdate() {
System.out.println(("----- selectOne method test ------"));
WechatMessage wechatMessage = wechatMessageMapper.selectById(13);
if (null != wechatMessage){
System.out.println(("found the message"));
System.out.println(wechatMessage);
//wechatMessage.setID(13); ////奇怪没有更新成功,主要查询出来的记录id是0 https://blog.csdn.net/qq_40279513/article/details/85163444
wechatMessage.setStatus(1);
wechatMessage.setImgPath("update====fdfdsfdfdsfdfsdfdsd");
wechatMessage.setIsSend(1);
//奇怪没有更新成功
int ret = wechatMessageMapper.updateById(wechatMessage);
System.out.println((ret +"====record is updated"));
}
}
/**
* 只查询几个字段,设置like条件,并且以Map的方式返回=======主要用途时不需要构造太多的实例类
*/
@Test
public void testSelectMaps() {
QueryWrapper<WechatMessage> queryWrapper = new QueryWrapper<WechatMessage>();
queryWrapper.select("original_wechat_id","type","content")
.like("content","低调");
List<Map<String,Object>> list = wechatMessageMapper.selectMaps(queryWrapper);
list.forEach(System.out::println);
}
/**
* Lambda,主要时防止误写代码,其实感觉好像没什么用
* where content like "%低调%' and type <43
*/
@Test
public void testSelectLambda() {
//LambdaQueryWrapper<WechatMessage> lambdaQueryWrapper = new QueryWrapper<WechatMessage>().lambda();
//或
//LambdaQueryWrapper<WechatMessage> lambdaQueryWrapper = new LambdaQueryWrapper<WechatMessage>();
//或
LambdaQueryWrapper<WechatMessage> lambdaQueryWrapper = Wrappers.<WechatMessage>lambdaQuery();
lambdaQueryWrapper.like(WechatMessage::getContent,"低调").lt(WechatMessage::getType,43);
List<WechatMessage> list = wechatMessageMapper.selectList(lambdaQueryWrapper);
list.forEach(System.out::println);
}
}
更多条件构造器
https://mp.baomidou.com/guide/wrapper.html#abstractwrapper
lambda表达式,function的应用
image.png image.png image.png