1.导入MP包
说明:MP中引入jar包文件会与原来Mybatis的包产生冲突,所以需要将原来的包注释
<!--spring整合mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
2.POJO属性映射
//user表示实体对象 一般与数据库中的表进行关联.
@Data //证明lombok引入成功
@Accessors(chain=true) //链式加载
@NoArgsConstructor //定义无参构造方法 如果什么都不写,默认添加无参构造
@AllArgsConstructor //定义全参构造方法 如果添加了全参构造,必须先添加无参构造
//为什么呢? 解释:乌龟的屁股!!!! 龟腚(规定)
//MP的原则如果对象名称和属性名称与表和字段一一映射,则可以忽略不写.
@TableName //标识对象与user表一一映射.
public class User {
@TableId(type=IdType.AUTO) //定义主键自增
private Integer id; //整数 一般用Integer/Long 区间>Integer
//@TableField(value="name") //属性与字段进行标识
private String name; //String 一般写字符串
private Integer age;
private String sex;
}
3.继承Mapper接口
4.修改YML配置文件
配置说明:需要将mybatis改为mybatis-plus即可
#语法 1.key: (空格)value
# 2.缩进 代表层级关系
server:
port: 8080 #tomcat服务器默认端口号都是8080
#类比: java运行环境JDK
# 项目运行环境服务器(软件) tomcat
#YML配置文件在SpringBoot(Spring+SpringMVC等)程序中启动时 会被默认加载
#为属性赋值 如果操作时有红线则不管.
#如果将大量的业务代码保存到YML配置文件中时,会造成代码结构混乱
my:
food: 番茄炒蛋 #k-v
book: java编程思想
#SpringYML配置文件写法
spring:
datasource: #数据源
driver-class-name: com.mysql.jdbc.Driver
#链接数据库地址
url: jdbc:mysql://127.0.0.1:3306/db?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
username: root
password: root
#SpringBoot整合Mybatis
mybatis-plus:
#定义别名包
type-aliases-package: com.xx.pojo
#mapperxml映射文件路径
mapper-locations: classpath:/mybatis/mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
5.测试MP方式查询数据库
@Test
public void testSelectAll() {
List<User> userList = userMapper.selectList(null);
System.out.println(userList);
}
6.测试案例
//3.测试MP方式查询数据库
@Test
public void testSelectAll() {
//面向对象的方式操作数据库
List<User> userList = userMapper.selectList(null);
System.out.println(userList);
}
@Test
public void testInsert() {
User user = new User(null,"xxx",x, "xx");
userMapper.insert(user);
}
7.更多案例
7.1查询
/**
* MP案例1: 查询name="王昭君"的用户
* 注意事项: 1.查询的结果有几个???
* 2.查询的条件
* sql: select * from user where name = "王昭君"
* 语法: eq =, gt >, lt < , ge>= ,le <=
*/
@Test
public void testSelect01() {
//定义条件构造器 作用:拼接where条件
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.eq("name", "王昭君");
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
}
/**
* MP案例2: name属性中包含"精"的数据,并且为女性
* sql: select * from user where name like "%精%" and sex="女"
*/
@Test
public void testSelect02() {
//定义条件构造器 作用:拼接where条件
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.like("name", "精") //默认采用and的方式进行链接
.eq("sex", "女");
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
}
/**
* MP案例3: 查询年龄在18-35之间的女性用户.
* Sql语句: SELECT id,sex,name,age FROM user WHERE (age BETWEEN ? AND ? AND sex = ?)
*/
@Test
public void testSelect03() {
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.between("age", 18, 35)
.eq("sex","女");
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
}
/**
* MP案例4: 查询年龄大于100岁的,并且按照年龄降序排列,如果年龄相同按照Id降序排列
* Sql语句:
* SELECT id,sex,name,age FROM user WHERE (age > ?)
* ORDER BY age DESC , id DESC
*/
@Test
public void testSelect04() {
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.gt("age", 100)
.orderByDesc("age","id");
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
}
/**
* MP案例5:查询age < 100岁的用户,
* 并且性别与name="孙尚香"的性别相同的的用户数据.
* Sql语句:
* SELECT id,sex,name,age FROM user WHERE
* (age < ? AND sex IN (SELECT sex FROM USER WHERE NAME = '孙尚香'))
*/
@Test
public void testSelect05() {
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.lt("age", 100)
.inSql("sex", "SELECT sex FROM USER WHERE NAME = '孙尚香'");
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
}
//根据ID查询数据 id=11的用户 ID是主键 主键不能重复
@Test
public void testSelect06() {
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.eq("id", 11);
User user = userMapper.selectOne(queryWrapper);
System.out.println(user);
User user2 = userMapper.selectById(11); //根据主键进行查询
System.out.println(user2);
}
//批量查询 查询id=1,3,5,6等用户信息
//sql:SELECT id,sex,name,age FROM user WHERE id IN ( ? , ? , ? , ? )
@Test
public void testSelect07() {
Integer[] ids = {1,3,5,6};
List<Integer> idList = Arrays.asList(ids);
List<User> userList =
userMapper.selectBatchIds(idList);
System.out.println(userList);
}
···
7.2更新
···
@Test
public void testInsert2() {
User user = new User(null,"新冠病毒",7, "其他");
userMapper.insert(user);
}
/**
* 案例:删除name为null的数据
* sql:DELETE FROM user WHERE (name IS NULL)
*/
@Test
public void testDelete() {
//userMapper.deleteById(100); //删除id的值为100的用户数据
//userMapper.deleteBatchIds(idList);//可以进行批量的删除
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.isNull("name");
userMapper.delete(queryWrapper);
}
/**
* 需求:将id=228的数据,name改为实训课程,age=3 sex=其他
* 原则: 根据对象中不为null的属性当作更新要素.
* ById: 代表根据具体的主键的值更新数据. 就是where条件
* Sql: update xxxxxxx where id = 主键值
*/
@Test
public void testUpdate() {
User user = new User();
user.setName("实训课程")
.setAge(3)
.setSex("其他")
.setId(228);
userMapper.updateById(user);
}
/**
* 需求2: 更新name="新冠病毒"的数据改为
* name="疫苗正在路上" age=1 sex=其他
* Sql: update user set name="xxx",age=1,sex="其他"
* where name="新冠病毒"
*
* 参数说明:
* entity: 修改的值
* updateWrapper: 修改的条件构造器
*/
@Test
public void testUpdate2() {
User user = new User(null, "疫苗正在路上", 1, "其他");
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("name", "新冠病毒");
userMapper.update(user, updateWrapper);
}
···