官网
ORM:数据 student(no,name) <====> 对象 Student(SNo,SName)
MyBatis +MybatisPlus :只做增强,不做改变
创建工程及导入依赖
- 用阿里的springboot脚手架
- 导入依赖(按顺序位置放到阿里脚手架生成pom.xml中)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional> //依赖的另一个包没有lombok的兼容
<version>1.18.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
编写application.properties文件
- 我用的是远程连接我的阿里云服务器给我的公网ip,连接不上可能防火墙没开,端口没开,或者datasoruce.username和password不对,再或者二个root后有空格
spring.application.name=itcast-mybatis-plus
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/haoke?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false
spring.datasource.username=root|后面不要有空格
spring.datasource.password=root|后面不要有空格
#指定全局配置文件
mybatis-plus.config-location=classpath:mybatis-config.xml
#指定mapper.xml文件
mybatis-plus.mapper-locations=classpath*:mybatis/*.xml
创建User对象
package cn.itcast.mybatisplus.pojo;
public class User {
@TableId(value = "ID",type = IdType.AUTO) //id自增长
private Long id;
private String name;
private Integer age;
private String email;
public User() {
}
public User(Long id, String name, Integer age, String email) {
this.id = id;
this.name = name;
this.age = age;
this.email = email;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
'}';
}
}
编写UserMapper
package cn.itcast.mybatisplus.mapper;
import cn.itcast.mybatisplus.pojo.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> { }
编写SpringBoot启动类
package cn.itcast.mybatisplus;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("cn.itcast.mybatisplus.mapper") //设置mapper接口的扫描包
@SpringBootApplication
public class MyApplication {
/*
分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
编写测试单元
package cn.itcast.mybatisplus.mapper;
import cn.itcast.mybatisplus.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect(){
List<User> users = this.userMapper.selectList(null);
for (User user : users) {
System.out.println(user);
}
}
@Test
public void testSelectById(){
User user = this.userMapper.selectById(3L);
System.out.println(user);
}
@Test //姓名模糊中有o 字母的
public void testSelectByLike(){
QueryWrapper<User> tWrapper =new QueryWrapper<User>();
tWrapper.like("name","o");
List<User> users = this.userMapper.selectList(tWrapper);
for (User user : users) {
System.out.println(user);
}
}
@Test //年龄小于20
public void testSelectByLe(){
QueryWrapper<User> tWrapper =new QueryWrapper<User>();
tWrapper.le("age",20);
List<User> users = this.userMapper.selectList(tWrapper);
for (User user : users) {
System.out.println(user);
}
}
@Test //
public void testSave(){
User user = new User();
user.setAge(25);
user.setEmail("zhangsan@qq.com");
user.setName("张三");
int insert = this.userMapper.insert(user);
System.out.println("数据掺入成功! count=>"+insert);
}
@Test //
public void testDelete(){
this.userMapper.deleteById(6L);
System.out.println("数据删除成功!>");
}
@Test //根据id修改,修改不为null的字段
public void testUpdate(){
User user = new User();
user.setId(5L);
user.setName("l李四");
this.userMapper.updateById(user);
System.out.println("数据修改成功!>");
}
@Test
public void testSelectPage(){
Page<User> page = new Page<>(2, 3);
Page<User> userPage = this.userMapper.selectPage(page,null);
System.out.println("总条数 ----->"+userPage.getTotal());
System.out.println("当前页数----->"+userPage.getCurrent());
System.out.println("当前每页显示条数-->"+userPage.getSize());
List<User> records = userPage.getRecords();
for (User record : records) {
System.out.println(record);
}
}
}
Lombok,lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码,尤其是针对pojo,在MybatisPlus中使用lombok。pom.xml安装依赖和idea本身的lombok插件
- @Data:注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
- @Setter:注解在属性上;为属性提供 setting 方法
- @Getter:注解在属性上;为属性提供 getting 方法
- @Slf4j:注解在类上;为类提供一个 属性名为log 的 slf4j日志对象
- @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
- @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法
- @Builder:使用Builder模式构建对象