ORM概念
ORM:Objcet Relational Mapping, 对象关系映射,
ORM通过使用描述对象和数据库之间映射的元数据将程序中的对象自动持久化到关系数据库中。
ORM框架的本质是简化编程中操作数据库的编码
对象 Student {name:tom,sex:man,address:china}
↗
\nearrow
↗
中间件ORM
↘
\searrow
↘
关系型数据:数据库Student表
name | sex | address |
---|---|---|
tom | man | china |
MyBatis-Plus基本概念
是一款数据持久层ORM框架,可以实现动态SQL,使用xml或者注解来配置和映射原生信息,能够轻松地将java的POJO(Plain Ordinary Java Object普通java对象)与数据库中的表和字段进行映射关联。
MyBatis-Plus操作
添加 MyBatisPlus 、mysql驱动、数据连接池druid 依赖
pom.xml
<!-- MybatisPlus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
配置数据库
src\main\resources\application.properties
#集成mysql数据库的配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://www.tisuba.com:3306/wcy_java_test?useSSL=false&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=wcy_java_test
spring.datasource.password=wcy_java_test
mybatis-plus.cofiguration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
spring.datasource.druid.initial-size=50
spring.datasource.druid.min-idle=50
spring.datasource.druid.max-active=100
# 配置获取连接等待超时的时间
spring.datasource.druid.max-wait=60000
#扫描数据库的mapper.xml文件
mybatis.mapper-locations=classpath*:mapper/*.xml
为避免多表查询时,超出数据边界,安装lombok插件,增加无构造函数。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
// src\main\java\com\example\persistence\model\User.java
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("user")
public class User {
订单表,注意采用lombok插件,并增加了user字段
// src\main\java\com\example\persistence\model\Order.java
package com.example.persistence.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_order")
public class Order {
private int id;
private String order_time;
private String total;
private int uid;
@TableField(exist = false)
private User user;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getOrder_time() {
return order_time;
}
public void setOrder_time(String order_time) {
this.order_time = order_time;
}
public String getTotal() {
return total;
}
public void setTotal(String total) {
this.total = total;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
@Override
public String toString() {
return "Order [id=" + id + ", order_time=" + order_time + ", total=" + total + ", uid=" + uid + "]";
}
}
user映射表
// src\main\java\com\example\mapper\UserMapper.java
package com.example.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.mapping.FetchType;
import org.springframework.web.bind.annotation.GetMapping;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.persistence.model.User;
// mybatits 运用sql语句操作数据库
// @Mapper
// public interface UserMapper {
// // 查询所有用户
// @Select("select * from user")
// public List<User> findUsers();
// @Insert("insert into user (email,username,password,age) values
// (#{email},#{username},#{password},#{age})")
// public int add(User user);
// @Update("update user set
// username=#{username},password=#{password},age=#{age},email=#{email} where
// id=#{id}")
// int update(User user);
// @Delete("delete from user where id=#{id}")
// int delete(int id);
// @Select("select * from user where id =#{id}")
// User findById(int id);
// }
// mybatitsPlus 进一步进行了简化,自带了很多简化的函数
public interface UserMapper extends BaseMapper<User> {
@Select("select * from user where id =#{id}")
User selectById(int id);
// 一对多关联查询
@Select("select * from user")
@Results({
@Result(column = "id", property = "id"),
@Result(column = "username", property = "username"),
@Result(column = "password", property = "password"),
@Result(column = "age", property = "age"),
@Result(column = "email", property = "email"),
@Result(column = "id", property = "orders", javaType = List.class, many = @Many(select = "com.example.mapper.OderMapper.selectByUid"))
})
List<User> selectAllUserAndOrder();
}
order 映射表
package com.example.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.One;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.persistence.model.Order;
import com.example.persistence.model.User;
public interface OderMapper extends BaseMapper<Order> {
@Select("select * from t_order where uid = #{uid}")
public List<Order> selectByUid(int uid);
// 查询所有的订单,同时查询订单的用户
@Select("select * from t_order")
@Results({
@Result(column = "id", property = "id"),
@Result(column = "order_time", property = "order_time"),
@Result(column = "total", property = "total"),
@Result(column = "uid", property = "user", javaType = User.class, one = @One(select = "com.example.mapper.UserMapper.selectById"))
})
public List<Order> selectAllOrderAndUser();
}
// src\main\java\com\example\controller\UserController.java
package com.example.controller;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.mapper.OderMapper;
import com.example.mapper.UserMapper;
import com.example.persistence.model.Order;
import com.example.persistence.model.User;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiOperation;
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
private OderMapper orderMapper;
public String currentTime = System.currentTimeMillis() / 1000 + ""; // 时间戳
// @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
// private Date currentTime; // 时间戳转日期格式
@ApiOperation("获取用户列表")
@GetMapping("/users")
public Object getUsers() {
Map<String, Object> map = new HashMap<>();
// mybatis方式
// List<User> list = userMapper.findUsers();
// mybatisplus方式
List<User> list = userMapper.selectList(null);
System.out.println(list);
map.put("msg", "获取成功");
map.put("data", list);
map.put("currentTime", currentTime);
return map;
}
@ApiOperation("获取用户信息")
@GetMapping("/user/{id}")
public Object getUserById(@PathVariable int id) {
Map<String, Object> map = new HashMap<>();
User user = userMapper.selectById(id);
map.put("data", user);
map.put("msg", "获取成功");
return map;
}
@PostMapping("/user")
public Object saveUser(User user) {
Map<String, Object> map = new HashMap<>();
System.out.println(user);
// mybatis方式
// int i = userMapper.add(user);
// mybatisplus方式
int i = userMapper.insert(user);
map.put("data", i);
if (i == 0) {
map.put("msg", "创建失败");
return map;
}
map.put("msg", "创建成功");
return map;
}
@PutMapping("/user/{id}")
public Object updateUserById(@PathVariable int id, User user) {
Map<String, Object> map = new HashMap<>();
int i = userMapper.updateById(user);
map.put("data", i);
map.put("msg", "更新成功");
return map;
}
@DeleteMapping("/user/{id}")
public Object deleteUserById(@PathVariable int id) {
Map<String, Object> map = new HashMap<>();
int i = userMapper.deleteById(id);
map.put("data", i);
if (i == 0) {
map.put("msg", "该数据不存在");
return map;
}
map.put("msg", "删除成功");
return map;
}
@ApiOperation("获取用户和订单列表")
@GetMapping("/user_and_order")
public Object getUserAndOrders() {
Map<String, Object> map = new HashMap<>();
// mybatis方式
// List<User> list = userMapper.findUsers();
// mybatisplus方式
List<User> list = userMapper.selectAllUserAndOrder();
System.out.println(list);
map.put("msg", "获取成功");
map.put("data", list);
map.put("currentTime", currentTime);
return map;
}
@ApiOperation("获取订单和用户列表")
@GetMapping("/order_and_user2")
public Object getOrderAndUser() {
System.out.println("获取订单和用户列表开始");
Map<String, Object> map = new HashMap<>();
List<Order> list = orderMapper.selectAllOrderAndUser();
// System.out.println(list);
// map.put("msg", "获取成功");
map.put("data", list);
map.put("currentTime", currentTime);
return map;
}
// 分页查询
@GetMapping("/user/findByPage")
public IPage<User> findByPage() {
// 设置起始值及每页条数
Page<User> page = new Page<>(2, 2);
IPage<User> iPage = userMapper.selectPage(page, null);
return iPage;
}
}
package com.example.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.mapper.OderMapper;
import com.example.persistence.model.Order;
import io.swagger.annotations.ApiOperation;
@RestController
public class OrderController {
@Autowired
private OderMapper orderMapper;
public String currentTime = System.currentTimeMillis() / 1000 + ""; // 时间戳
@ApiOperation("获取订单和用户列表")
@GetMapping("/order_and_user")
public Object getOrderAndUser() {
System.out.println("获取订单和用户列表开始");
Map<String, Object> map = new HashMap<>();
// List<Order> list = orderMapper.selectByUid(1);
List<Order> list = orderMapper.selectAllOrderAndUser();
System.out.println(list);
// map.put("msg", "获取成功");
map.put("data", list);
map.put("currentTime", currentTime);
return map;
}
}