进阶项目 03 使用mybatis-plus(不需要写sql语句了)

01.导入依赖

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

02.修改yml文件

server:
	port: 8080
	servlet:
		context-path: /
spring:
	datasource:
		driver-class-name: com.mysql.jdbc.Driver
		url: jdbc:mysql:///jtdb?
		serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8
		username: root
		password: root
#mybatis-plus的配置
mybatis-plus:
	#resultType="User"可以映射结果对象时可以省略包路径
	type-aliases-package: com.jt.pojo
	#加载mapper的映射文件路径
	mapper-locations: classpath:/mybatis/mappers/*.xml
	#数据表中的user_id的值userId item_id--->itemId
	#开启驼峰规则
	configuration:
		map-underscore-to-camel-case: true
#动态的展示sql
logging:
	level:
		com.jt.mapper: debug

03.需要修饰的pojo实体类需要的几个注解
01.@TableName(value=“xxx”)

@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain=true)
@TableName(value="user")
public class user implements Serializable {
	@TableId(type = IdType.AUTO  )
 private Integer id;
 private String name;
 private Integer age;
 private String sex;
}

表示的是这个被注解@TableName(value=“xxx”)修饰的类,与数据库中的表(表名是xxx)一一对应,也就是说这个在项目中的user类的属性,与数据库中的表user的列名一一对应。

@TableId(type = IdType.AUTO )表示修饰的类的属性,是数据库中的相关表的主键(AUTO表示主键自增)

假如有属性与数据库中的表的列名不一致,但是又想要一一对应的话,可以使用@TableField(“数据库中的列名”)

03.dao接口的修改

mybatis-plus也是需要dao接口的

package com.jt.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.user;

@Mapper
public interface userMapper extends BaseMapper<user> {
    public List<user> findall();
}

extends BaseMapper 项目中的dao接口需要去扩张抽象类BaseMapper,其中的泛型T是项目中被修饰的实体类的类名,这里的实体类是user,所以T就改写成user。

依赖的版本过高,会导致空指针异常。

04.测试mp的方法。

package com.jt;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.userMapper;
import com.jt.pojo.user;

@SpringBootTest
public class testUserMapper {
	@Autowired
	userMapper usermapper;
	@Test
	public void testusermp() {
	List<user> list=usermapper.selectList(null);
	for (user user : list) {
		System.out.println(user);
	}
	}

	@Test
	public void testselectbyid()
	{
		/**
		* 需求:可以一次性根据多个id查询数据库
		* sql:select * from user where id in(xxx,xxx,xxx)
		*/
		List<Integer> list=new ArrayList<>();
		list.add(1);
		list.add(3);
		list.add(5);
	    List<user> userlist=usermapper.selectBatchIds(list);
		System.out.println(userlist);
	}
	
	@Test
	public void testselectbywheremap()
	{
		/**
		* 需求:根据指定的字段,然后实现查询
		* sql:select * from user where name=? and age=?;
		*/
		Map<String,Object> map=new HashMap<>();
		map.put("name", "金角大王");
		map.put("age", "3000");
	    List<user> userlist=usermapper.selectByMap(map);
		System.out.println(userlist);
	}
	
	/**
	* 需求:模糊查询
	* 1.name属性包含"精"的数据,并且为女性
	* sql:where name like %精% and sex=“女”;
	* > gt =eq <lt
	* >=ge <=le
	* SELECT id,sex,name,age FROM user WHERE (name LIKE ? AND sex = ?)
	*/
	
	@Test
	public void testselectbywherelike()
	{
		/**
		* 需求:模糊查询
		* 1.name属性包含"精"的数据,并且为女性
		* sql:where name like %精% and sex=“女”;
		* > gt =eq <lt
		* >=ge <=le
		* SELECT id,sex,name,age FROM user WHERE (name LIKE ? AND sex = ?)
		*/
		//条件构造器的作用:拼接where条件,多个条件时,使用and连接
		
		QueryWrapper<user> queryWrapper=new QueryWrapper<>();
		queryWrapper.like("name", "精").eq("sex", "女");
		List<user> list=usermapper.selectList(queryWrapper);
		System.out.println(list);
	}
	
	/**
	* 需求:查询年龄在18~35之间的女性用户
	* where age between 18 and 35 and sex=女
	*/
	
	@Test
	public void testselectbywhereagebetween()
	{
		/**
		* 需求:查询年龄在18~35之间的女性用户
		* where age between 18 and 35 and sex=女
		*/
		//条件构造器的作用:拼接where条件,多个条件时,使用and连接
		
		QueryWrapper<user> queryWrapper=new QueryWrapper<>();
		queryWrapper.ge("age", 18).le("age", 35);
		List<user> list=usermapper.selectList(queryWrapper);
		System.out.println(list);
	}
	
	/**
	* 需求:查询年龄大于100岁的,并且按照年龄降序排序,如果年龄相同的再按照id排序
	* order by 字段 asc/desc
	* SELECT id,sex,name,age FROM user WHERE (age > ?) ORDER BY age DESC , id
	DESC
	*/
	
	@Test
	public void testselectbywhereageorderby()
	{
		/**
		* 需求:查询年龄大于100岁的,并且按照年龄降序排序,如果年龄相同的再按照id排序
		* order by 字段 asc/desc
		* SELECT id,sex,name,age FROM user WHERE (age > ?) ORDER BY age DESC , id
		DESC
		*/
		//条件构造器的作用:拼接where条件,多个条件时,使用and连接
		
		QueryWrapper<user> queryWrapper=new QueryWrapper<>();
		queryWrapper.gt("age", 100).orderByDesc("age","id");
		List<user> list=usermapper.selectList(queryWrapper);
		System.out.println(list);
	}
		/**
	* 需求:查询以“乔”字(%乔)结尾的,并且性别为女,并且age小于30,按照年龄降序排序
	* SELECT id,sex,name,age FROM user WHERE (name LIKE ? AND sex = ? AND age <
	?) ORDER BY age DESC
	*/
	@Test
	public void testselectbywherenamesexageorderby()
	{
		/**
		* 需求:查询以“乔”字(%乔)结尾的,并且性别为女,并且age小于30,按照年龄降序排序
		* SELECT id,sex,name,age FROM user WHERE (name LIKE ? AND sex = ? AND age <
		?) ORDER BY age DESC
		*/
		//条件构造器的作用:拼接where条件,多个条件时,使用and连接
		
		QueryWrapper<user> queryWrapper=new QueryWrapper<>();
		queryWrapper.likeLeft("name", "乔").eq("sex", "女").lt("age",30).orderByDesc("age") ;
		List<user> list=usermapper.selectList(queryWrapper);
		System.out.println(list);
	}
	/**
	* 需求:嵌套查询
	* 条件:查询age<100岁的用户,并且性别与name=孙尚香的性别相同的用户数据
	*/
	@Test
	public void testSelect07() {
		/**
		* 需求:嵌套查询
		* 条件:查询age<100岁的用户,并且性别与name=孙尚香的性别相同的用户数据
		*/
	//条件构造器的作用:拼接where条件,多个条件时,使用and连接
	QueryWrapper<user> queryWrapper=new QueryWrapper<>();
	queryWrapper.lt("age", 100).inSql("sex", "select sex from user where name='孙尚香'");
	List<user> userList = usermapper.selectList(queryWrapper);
	System.out.println(userList);
	}
	/**
	* 需求:查询年龄=18岁的用户的记录数
	* sql:select count(*) from user where age=18
	*/
	@Test
	public void testSelectcount() {
		/**
		* 需求:查询年龄=18岁的用户的记录数
		* sql:select count(*) from user where age=18
		*/
	//条件构造器的作用:拼接where条件,多个条件时,使用and连接
	QueryWrapper<user> queryWrapper=new QueryWrapper<>();
	queryWrapper.eq("age", 18);
	int num = usermapper.selectCount(queryWrapper);
	System.out.println(num);
	}


	/**
	* 需求:查询name为金角大王的用户的信息
	* 注意:用selectone()必须保证查询的记录只有一条
	*/
	@Test
	public void testSelectbyname() {
	QueryWrapper<user> queryWrapper=new QueryWrapper<>();
	queryWrapper.eq("name", "金角大王");
	user user=usermapper.selectOne(queryWrapper);
	System.out.println(user);
	}
	/**
	* 新增用户信息
	* sql:insert into user(sex,name,age) values(?,?,?)
	*/
	@Test
	public void testisnert() {
	user user=new user();
	user.setAge(18).setName("小小").setSex("男");
	int num=usermapper.insert(user);
	System.out.println(num);
	}
	
		/**
	* 修改:基于id修改用户信息
	*/
	@Test
	public void testupdatebyid() {
	user user=new user();
	user.setAge(18).setName("小小").setSex("男").setId(20);
	int num=usermapper.updateById(user);
	System.out.println(num);
	}
	
		/**
		* 需求:将name=null的数据进行修改
		*/
	@Test
	public void testupdatewherenamenotnull() {
	
	user user=new user();
	user.setAge(18).setName("小小").setSex("男").setId(9);
	
	//UpdateWrapper是封装where条件,user是封装数据对象
	UpdateWrapper<user> updateWrapper=new UpdateWrapper<>();
	updateWrapper.isNull("name");
	int num=usermapper.update(user, updateWrapper);
	System.out.println(num);
	}
	/**
    * 删除id=49的用户
	*/
	@Test
	public void testdeletebyid() {
	int rows = userMapper.deleteById(49);
	System.out.println(rows);
	}
	/**
	* 基于多个id进行批量删除
	*/
	@Test
	public void testdeleteinids() {
	List<Integer> idList=new ArrayList<>();
	idList.add(46);
	idList.add(50);
	int rows=userMapper.deleteBatchIds(idList);
	System.out.println(rows);
	}

/**
	* 基于条件删除
	*/
	
	//UpdateWrapper是封装where条件
	//user是封装数据对象
	@Test
	public void testdeleteupdatewhere() {
    QueryWrapper<user> Wrapper=new QueryWrapper<>();
	Wrapper.isNull("name");
	int num=usermapper.delete(Wrapper);
	System.out.println(num);
	}
	/**
	* 基于所指定的字段然后进行删除
	*/
	@Test
	public void testdeletewheresomething() {
    Map<String,Object> map=new HashMap();
	map.put("name", "1");
	int num=usermapper.deleteByMap(map);
	System.out.println(num);
	}
	

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值