/**
* Copyright (c) 2011-2014, hubin (jobob@qq.com).
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.baomidou.mybatisplus.test.mysql;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.baomidou.mybatisplus.MybatisSessionFactoryBuilder;
import com.baomidou.mybatisplus.entity.GlobalConfiguration;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.baomidou.mybatisplus.test.mysql.entity.Role;
import com.baomidou.mybatisplus.test.mysql.entity.User;
import com.baomidou.mybatisplus.test.mysql.mapper.UserMapper;
import com.baomidou.mybatisplus.toolkit.IdWorker;
/**
* <p>
* MybatisPlus 测试类
* </p>
* <p>
* 自动提交了事务问题:<br>
* http://www.mybatis.org/spring/transactions.html#programmatic<br>
* https://github.com/mybatis/spring/issues/39<br>
* </p>
*
* @author hubin sjy
* @Date 2016-01-23
*/
public class UserMapperTest {
/**
* RUN 测试
* <p>
* <p>
* MybatisPlus 加载 SQL 顺序:
* </p>
* 1、加载XML中的SQL<br>
* 2、加载sqlProvider中的SQL<br>
* 3、xmlSql 与 sqlProvider不能包含相同的SQL<br>
* <br>
* 调整后的SQL优先级:xmlSql > sqlProvider > crudSql <br>
*/
public static void main(String[] args) {
// 加载配置文件
InputStream in = UserMapperTest.class.getClassLoader().getResourceAsStream("mysql-config.xml");
/*
* 此处采用 MybatisSessionFactoryBuilder 构建
* SqlSessionFactory,目的是引入BaseMapper功能
*/
MybatisSessionFactoryBuilder mf = new MybatisSessionFactoryBuilder();
/*
* 1、数据库字段驼峰命名不需要任何设置 2、当前演示是驼峰下划线混合命名 3、如下开启,表示数据库字段使用下划线命名,该设置是全局的。
* 开启该设置实体可无 @TableId(value = "test_id") 字段映射
*/
// mf.setDbColumnUnderline(true);
/**
* 设置,自定义 SQL 注入器
*/
GlobalConfiguration gc = new GlobalConfiguration(new MySqlInjector());
/**
* 设置,自定义 元对象填充器,实现公共字段自动写入
*/
gc.setMetaObjectHandler(new MyMetaObjectHandler());
// gc.setCapitalMode(true);
gc.setDbColumnUnderline(true);
mf.setGlobalConfig(gc);
SqlSessionFactory sessionFactory = mf.build(in);
SqlSession session = sessionFactory.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
System.err.println(" debug run 查询执行 user 表数据变化! ");
userMapper.deleteAll();
/**
* sjy 测试@TableField的el属性
*/
Role role = new Role();
role.setId(IdWorker.getId());
role.setName("admin");
User userA = new User();
userA.setId(IdWorker.getId());
userA.setName("junyu_shi");
userA.setAge(1);
userA.setDesc("测试一把");
userA.setTestType(1);
userA.setRole(role);
int rlt = userMapper.insert(userA);
User whereUser = userMapper.selectOne(userA);
print(whereUser);
userA.setAge(18);
userMapper.updateById(userA);
userMapper.delete(new EntityWrapper<>(userA));
System.err.println("--------- @TableField el() --------- " + rlt);
/**
* 注解插件测试
*/
rlt = userMapper.insertInjector(new User(1L, "1", 1, 1));
System.err.println("--------- insertInjector --------- " + rlt);
/**
* ehcache 缓存测试
*/
User cacheUser = userMapper.selectOne(new User(1L, 1));
print(cacheUser);
cacheUser = userMapper.selectOne(new User(1L, 1));
print(cacheUser);
/**
* 插入
*/
long id = IdWorker.getId();
rlt = userMapper.insert(new User(id, "abc", 18, 1));
System.err.println("\n--------------insert-------" + rlt);
sleep();
rlt = userMapper.insert(new User(18));
System.err.println("\n----------测试 name 字段忽略验证----insert-------" + rlt);
sleep();
List<User> ul = new ArrayList<>();
/* 手动输入 ID */
ul.add(new User(11L, "1", 1, 0));
ul.add(new User(12L, "2", 2, 1));
ul.add(new User(13L, "3", 3, 1));
ul.add(new User(14L, "delname", 4, 0));
ul.add(new User(15L, "5", 5, 1));
ul.add(new User(16L, "6", 6, 0));
/* 测试 name test_type 填充 */
ul.add(new User(17L, 7));
ul.add(new User(18L, 8));
ul.add(new User(19L, 9));
ul.add(new User(7));
ul.add(new User(20L, "deleteByMap", 7, 0));
/* 使用 ID_WORKER 自动生成 ID */
ul.add(new User("8", 8, 1));
ul.add(new User("9", 9, 1));
for (User u : ul) {
rlt = userMapper.insert(u);
}
System.err.println("\n--------------insertBatch----------------" + rlt + "\n\n");
/**
* 提交,往下操作在一个事物中!!!
*/
session.commit();
/*
* 删除
*/
rlt = userMapper.deleteById(id);
System.err.println("---------deleteById------- delete id=" + id + " ,result=" + rlt + "\n\n");
sleep();
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("name", "deleteByMap");
columnMap.put("age", null);
rlt = userMapper.deleteByMap(columnMap);
System.err.println("---------deleteByMap------- result=" + rlt + "\n\n");
sleep();
List<Long> il = new ArrayList<>();
il.add(16L);
il.add(17L);
rlt = userMapper.deleteBatchIds(il);
System.err.println("---------deleteBatchIds------- delete id=" + id + " ,result=" + rlt + "\n\n");
sleep();
rlt = userMapper.delete(new EntityWrapper<>(new User(14L, "delname")));
System.err.println("--------------delete------------------ result=" + rlt + "\n\n");
sleep();
/*
* <p> 修改 </p>
*
* updateById 是从 BaseMapper 中继承而来的,UserMapper.xml中并没有申明改sql
*/
rlt = userMapper.updateById(new User(12L, "MybatisPlus"));
System.err.println("------------------updateById---------------------- result=" + rlt + "\n\n");
sleep();
rlt = userMapper.updateById(new User(12L, "update all column", 12, 12));
System.err.println("------------------updateById---------------------- result=" + rlt + "\n\n");
sleep();
rlt = userMapper.update(new User("55", 55, 5), new EntityWrapper<>(new User(15L, "5")));
System.err.println("------------------update---------------------- result=" + rlt + "\n\n");
sleep();
EntityWrapper<User> ew1 = new EntityWrapper<>();
ew1.addFilter("test_id={0} AND name={1}", 15L, "55");
rlt = userMapper.update(new User("00"), ew1);
System.err.println("------------------update---------------------- result=" + rlt + "\n\n");
sleep();
/* 无条件选择更新 */
// userMapper.update(new User("11"), null);
List<User> userList = new ArrayList<>();
userList.add(new User(11L, "updateBatchById-1", 1, 1));
userList.add(new User(12L, "updateBatchById-2", 2, 1));
userList.add(new User(13L, "updateBatchById-3", 3, 1));
for (User u : userList) {
rlt = userMapper.updateById(u);
}
System.err.println("------------------updateBatchById---------------------- result=" + rlt + "\n\n");
sleep();
/*
* <p> 查询 </p>
*/
System.err.println("\n------------------selectById----------------------");
User user = userMapper.selectById(12L);
print(user);
System.err.println("\n------------------selectBatchIds----------------------");
List<Long> idList = new ArrayList<>();
idList.add(11L);
idList.add(12L);
List<User> ul0 = userMapper.selectBatchIds(idList);
for (User anUl0 : ul0) {
print(anUl0);
}
System.err.println("\n------------------selectByMap-----满足 map 条件的数据----");
Map<String, Object> cm = new HashMap<>();
cm.put("test_type", 1);
cm.put("1", 1);
List<User> ul1 = userMapper.selectByMap(cm);
for (User anUl1 : ul1) {
print(anUl1);
}
System.err.println("\n------------------selectOne----------------------");
User userOne = userMapper.selectOne(new User("abc"));
print(userOne);
System.err.println("\n------------------selectCount----------------------");
System.err.println("查询 type=1 总记录数:" + userMapper.selectCount(new EntityWrapper<>(new User(1))));
System.err.println("总记录数:" + userMapper.selectCount(null));
System.err.println("\n------------------selectList-----所有数据----id--DESC--排序----");
List<User> ul2 = userMapper.selectList(new EntityWrapper<User>(null, "age,name"));
for (User anUl2 : ul2) {
print(anUl2);
}
System.err.println("\n------------------list 分页查询 ----查询 testType = 1 的所有数据--id--DESC--排序--------");
Page<User> page = new Page<>(1, 2);
EntityWrapper<User> ew = new EntityWrapper<>(new User(1));
/*
* 查询字段
*/
ew.setSqlSelect("age,name");
/*
* 查询条件,SQL 片段(根据常用的写SQL的方式按顺序添加相关条件即可)
*/
ew.where("name like {0}", "'%dateBatch%'").and("age={0}", 3).orderBy("age,name", true);
List<User> paginList = userMapper.selectPage(page, ew);
page.setRecords(paginList);
for (int i = 0; i < page.getRecords().size(); i++) {
print(page.getRecords().get(i));
}
System.err.println(" 翻页:" + page.toString());
System.err.println("\n---------------xml---selectListRow 分页查询,不查询总数(此时可自定义 count 查询)----无查询条件--------------");
// TODO 查询总数传 Page 对象即可
List<User> rowList = userMapper.selectListRow(new Pagination(0, 2, false));
for (User aRowList : rowList) {
print(aRowList);
}
/*
* 用户列表
*/
System.err.println(" selectList EntityWrapper == null \n");
paginList = userMapper.selectList(null);
for (User aPaginList : paginList) {
print(aPaginList);
}
/**
* 自定义方法,删除测试数据
*/
rlt = userMapper.deleteAll();
System.err.println("清空测试数据! rlt=" + rlt);
/**
* 提交
*/
session.commit();
}
/*
* 打印测试信息
*/
private static void print(User user) {
sleep();
if (user != null) {
System.out.println("\n user: id=" + user.getId() + ", name=" + user.getName() + ", age=" + user.getAge()
+ ", testType=" + user.getTestType());
} else {
System.out.println("\n user is null.");
}
}
/*
* 慢点打印
*/
private static void sleep() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}