当前位置: 移动技术网 > IT编程>开发语言>Java > 荐 Mybatis-Plus入门及API

荐 Mybatis-Plus入门及API

2020年07月16日  | 移动技术网IT编程  | 我要评论

MP介紹

MyBatis-Plus(简称 MP)是一个 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。与Mybatis相比,Mybatis在进行数据库操作时依然采用“面向过程”的操作方式,而MP采用了ORM的思想以面向对象的方式来操作数据库

Mybatis-plus入门案例

导入jar包

<!--spring整合mybatis-plus -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.3.2</version>
		</dependency>```

编辑POJO

@TableName(value=“xxx”)定义对象与表映射关系,xxx为数据库表名,如对象名与表名一致,则括号内可以省略不写
@TableId(Type=IdType.AUTO)标识主键,设置主键自增
@TableField(value=“xxx”)定义对象属性与表字段的映射关系,如果属性与字段名一致(包含驼峰映射规则)则可以省略

@Data	//生成get/set/toString/equals
@Accessors(chain=true)	//表示链式加载  重写set方法,将对象返回
@NoArgsConstructor		//添加无参构造   为以后框架的使用做准备
@AllArgsConstructor		//全部参数的构造方法.
@TableName		//(value="user")//定义对象与表映射关系 编辑表名
						//如果表名与对象的名称一致,则可以省略不写.
public class User {
	@TableId(type=IdType.AUTO)	//标识主键 主键自增.
	private Integer id;
	//@TableField(value="name")	//如果字段的名称与属性名称一致(包含驼峰规则),则可以省略
	private String name;		//字段与属性一一映射
	private Integer age;		//user_name  userName
	private String sex;
}

继承公共的接口

public interface UserMapper extends BaseMapper<User>{
}

编辑YML配置文件

erver:
  port: 8090    #表示端口号信息
  servlet:
    context-path: /   #项目发布路径
spring:
  datasource:
        #如果使用高版本驱动则配置如下
    #driver-class-name: com.cj.mysql.jdbc.Driver
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root


#mybatis-plush配置  mp比mybatis功能更加强大 引用一个即可
mybatis-plus:
    #定义别名包
  type-aliases-package: com.jt.pojo  
  mapper-locations: classpath:/mybatis/mappers/*.xml  #动态的导入xml映射文件
    #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true   #为了user_id与userId完美映射.无需手动转化
    #打印sql日志
logging:
  level:
    com.jt.mapper: debug

Mybatis-plus入门案例

/**
	 * 测试MybatisPlus新增操作
	 * 面向对象的方式操作数据库!!!!
	 */
	@Test
	public void testInsert() {
		User user = new User();
		user.setName("无名英雄永垂不朽");
		user.setAge(3);
		user.setSex("男女");
		int rows = userMapper.insert(user);
		System.out.println("入库成功影响:"+rows+"行");
	}

打印結果如下:

2020-07-15 21:32:52.910 DEBUG 21060 --- [           main] com.jt.mapper.UserMapper.insert          : ==>  Preparing: INSERT INTO user ( sex, name, age ) VALUES ( ?, ?, ? ) 
2020-07-15 21:32:52.924 DEBUG 21060 --- [           main] com.jt.mapper.UserMapper.insert          : ==> Parameters: 男女(String), 人民英雄永垂不朽(String), 3(Integer)
2020-07-15 21:32:53.042 DEBUG 21060 --- [           main] com.jt.mapper.UserMapper.insert          : <==    Updates: 1
入库成功影响:1

Mybatis-PlusAPI

@SpringBootTest	//SpringBoot的测试用例,动态的启动了spring容器
public class SpringbootDemoMybatisApplicationTests {
	
	//从容器中动态的注入接口对象
	@Autowired
	private UserMapper userMapper;
	/**
	 * 测试MybatisPlus新增操作
	 * 面向对象的方式操作数据库!!!!
	 */
	@Test
	public void testInsert() {
		User user = new User();
		user.setName("无名英雄永垂不朽");
		user.setAge(3);
		user.setSex("男女");
		int rows = userMapper.insert(user);
		System.out.println("入库成功影响:"+rows+"行");
	}
	
	//速度对比,1.手写sql  2.动态生成sql
	@Test
	public void testInsert2() {
		User user = new User();
		user.setName("无名英雄永垂不朽");
		user.setAge(3);
		user.setSex("男女");
		Long start = System.currentTimeMillis();
		//int rows = userMapper.insertUser(user);
		int rows = userMapper.insert(user);
		Long end = System.currentTimeMillis();
		System.out.println("执行时间:"+(end-start)+"毫秒");
		//System.out.println("入库成功影响:"+rows+"行");
	}
	
	
	/**
	 * 需求1:按照指定的id进行查询   id 1,3,5,9
	 *sql: select * from user where id=1 and id=3 and id=xxxxx... 
	 *使用in关键字
	 *	   select * from user where id in (1,3,5,9);
	 *实际业务
	 *		用户查询的参数1,3,5,9都是由前台web动态传参,所以在Controler中
	 *		一般采用数组的形式动态接收.
	 *		
	 */
	@SuppressWarnings("unchecked")
	@Test
	public void test01() {
		//一般都是用对象类型进行定义
		Integer[] ids = {1,3,5,9};
		//数组怎么转化为集合??
		List idList =  Arrays.asList(ids);
		//List idList =  org.assertj.core.util.Arrays.asList(ids);
		/*List<Integer> idList = new ArrayList<>();
		idList.add(1);
		idList.add(3);
		idList.add(5);
		idList.add(9);*/
		List<User> userList = userMapper.selectBatchIds(idList);
		System.out.println(userList);
	}
	
	/**
	 * 根据指定的条件查询
	 * 查询name="王昭君" sex=女的用户 默认使用and方式进行关联
	 * 需要将查询的字段与值封装到MAP中
	 * SELECT id,name,age,sex FROM user WHERE sex = ? AND name = ?
	 */
	@Test
	public void test02() {
		Map<String, Object> columnMap = new HashMap<>();
		columnMap.put("name", "王昭君");	//默认使用=号
		columnMap.put("sex", "女");
		List<User> userList = userMapper.selectByMap(columnMap);
		System.out.println(userList);
	}
	
	/**
	 * 查询age>18  and sex=男
	 *逻辑运算符   > gt,  < lt, = eq,  >= ge, <= le
	 */
	@Test
	public void test03() {
		//定义条件构造器  负责拼接where条件的
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		queryWrapper.gt("age", 18)
					.eq("sex", "男");
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}
	
	
	/**
	 * name like %精% and sex="女"
	 *   以精字结尾
	 * name like %精
	 * 			   精%
	 */
	@Test
	public void test04() {
		//定义条件构造器  负责拼接where条件的
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		queryWrapper.likeLeft("name", "精")
					.eq("sex", "女");
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}
	
	
	/**
	 * 条件:查询年龄在18-35之间的女性用户.
	 * sql: select * from user where age > 18 and age < 35
	 */
	@Test
	public void test05() {
		//定义条件构造器  负责拼接where条件的
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		queryWrapper.between("age", 18, 35)
					.eq("sex", "女");
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}
	
	
	/**
	 * 条件:查询年龄大于100岁的,并且按照年龄降序排列,如果年龄相同按照Id降序排列.
	 *sql中的排序默认根据id升序排列
	 *SELECT id,name,age,sex FROM user WHERE (age > ?) ORDER BY age DESC,id DESC 
	 */
	@Test
	public void test06() {
		//定义条件构造器  负责拼接where条件的
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		queryWrapper.gt("age",100)
					.orderByDesc("age","id");
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}
	
	
	/**
	 * 子查询: insql
	 * 条件: 查询age < 100岁的用户,并且性别与name="孙尚香"的性别相同的的用户数据.
	 *sql: SELECT * FROM USER WHERE age < 100 AND 
	 *	   sex IN(SELECT sex FROM USER WHERE NAME="孙尚香")
		
	 */
	@Test
	public void test07() {
		//定义条件构造器  负责拼接where条件的
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		String name = "'孙尚香'";
		queryWrapper.lt("age", 100)
				.inSql("sex", "select sex from user where name="+name);
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}
	
	
	/**
	 * 需求:有时查询可能不需要查询全部字段,会挑选其中几个进行查询.
	 *1.指定字段进行查询
	 * 查询age>100岁 只查询Id,name字段
	 *
	 *2.只返回查询的字段
	 */
	@Test
	public void test08() {
		//定义条件构造器  负责拼接where条件的
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		queryWrapper.select("id","name").gt("age", 100);
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
		
		//只想返回特定的字段
		List<Map<String,Object>> mapList = userMapper.selectMaps(queryWrapper);
		System.out.println(mapList);
		
		//只返回第一列字段的值  主键值
		List<Object> list = userMapper.selectObjs(queryWrapper);
		System.out.println(list);
	}
	
	/**
	 *   根据属性中不为null的元素查询数据
	 * condition:布尔类型的判断 只有当判断为true时,条件生效
	 */
	@Test
	public void test09() {
		String name = "黑熊精";
		String sex = "男";
		//定义条件构造器  负责拼接where条件的
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		//当name属性不为null的时候会动态的拼接name属性值
		queryWrapper.eq(!StringUtils.isEmpty(name), "name", name)
					.eq(!StringUtils.isEmpty(sex), "sex", sex);
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}
	
	/**
	 * 根据对象中不为null的属性进行查询
	 */
	@Test
	public void test10() {
		User user = new User();
		user.setName("黑熊精")
			.setSex("男");
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>(user);
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}
	
	//根据主键查询
	@Test
	public void test11() {
		
		User user = userMapper.selectById(1111);
		//根据条件返回一个对象信息
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		queryWrapper.eq("id", "3");
		User user2 = userMapper.selectOne(queryWrapper);
		System.out.println(user);
		System.out.println(user2);
	}
	
	
	/**
	 * MP的删除用法
	 *  案例:
	 *  	1.将name字段值为null的数据进行 
	 *  	2.将name字段信息 无名英雄永垂不朽删除
	 *  
	 */
	@Test
	public void test12() {
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		//queryWrapper.isNull("name");
		queryWrapper.eq("name", "无名英雄永垂不朽");
		userMapper.delete(queryWrapper);
		System.out.println("数据库删除成功!!!!");
	}
	
	
	/**
	 * 数据库更新操作
	 * 
	 * 1.将大日如来的年龄改为10001 性别 改为男
	 * entity: 数据修改后的值使用对象封装
	 * updateWrapper: 修改的条件构造器
	 * 
	 * 
	 */
	@Test
	public void test13() {
		User user = new User();
		user.setAge(10001).setSex("男");
		UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
		updateWrapper.eq("name","大日如来");
		userMapper.update(user, updateWrapper);
	}
	
	
	//2.根据主键1915 将name改为"人民英雄" age=100   性别=男/女
	//对象中只有主键充当where条件,其他的字段信息充当set条件
	@Test
	public void test14() {
		User user = new User();
		user.setId(1915)
			.setName("人民英雄")
			.setAge(100)
			.setSex("男/女");
		
		userMapper.updateById(user);
	}
}

本文地址:https://blog.csdn.net/weixin_42800427/article/details/107371457

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网