参考这个方法配置,主要是我的springboot和swagger的版本号的问题
SpringBoot2.7.14集成Swagger3.0 (liqinglin0314.com)
常用的一些注解
放在controller里面
com.baomidou
mybatis-plus-boot-starter
3.4.2
mysql
mysql-connector-java
5.1.47
com.alibaba
druid-spring-boot-starter
1.1.20
配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/hy-park?useSSL=false
username: root
password: 123123
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
假设要对用户列表进行操作,先定义一个用户操作数据的接口,叫UserMaper
@Mapper
public interface UserMapper {
@Select("select * from user") //数据库查询语句,mybatis用注解查询的
public List find(); //定义查找方法,返回为User的一个列表
//这里这俩是一体的,上面是sql语句,下面给这个语句一个方法,方便调用
}
接下来去主文件那边加一个mapperscan的注解,表示要扫描这边
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class Demo2Application {
public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
}
}
最后写个用户的controller
@RestController
public class UserController {
@Autowired //注解必须加上
private UserMapper userMapper; //这边定义一下接口就行不用实例化
@GetMapping("/user")
public List query(){ //这里返回后会自动转成json格式
List list = userMapper.find(); //调用接口的find方法
System.out.println(list);
return list; //返回数据给前端
}
}
搞定了
insert操作:
@Insert("insert into user values (#{id}, #{name}, #{password}, #{birthday})")
public int insert(User user);//上面#{}里面的形参就是下面前端传进来的user里面的属性会传进去
@PostMapping("/user")
public String save(User user){
int i = userMapper.insert(user);
if(i > 0){
return "插入回成功" + i;
}else{
return "插入失败";
}
}
以上都是mybatis的内容,mybatis plus的内容往下看
1. 改mapper,继承下来一堆Basemapper的方法,不用自己写了
public interface UserMapper extends BaseMapper {
//继承basemapper,传的参数告诉他我要操作哪个类,前提是类名和表名一致
2. 改controller那边的代码,直接用继承的方法就可以
@GetMapping("/user")
public List query(){ //这里返回后会自动转成json格式
List list = userMapper.selectList(null); //直接继承方法
System.out.println(list);
return list; //返回数据给前端
}
@PostMapping("/user")
public String save(User user){
int i = userMapper.insert(user);
if(i > 0){
return "插入回成功" + i;
}else{
return "插入失败";
}
}
其他内容可以直接上官网学习,感觉写的也蛮好的,多看看注解那边
两个表:
user表格
t_order表
目标一:一次性查询所有用户,并且能看到每个用户的n个订单
1. 先在用户类里面,加上一个orders属性,表示当前用户的订单(注意,set,get,tostring都需要加上,不然显示不出来orders)
@TableField(exist = false)
//这句话意思是告诉mybatis-plus这个order字段在数据库的user表里面不存在
private List orders;
2. 定义order类
3. 去usermapper里面加上方法,用到映射
@Select("select * from user")
// MyBatis中使用@Results注解来映射查询结果集到实体类属性。
@Results({
@Result(column = "id", property = "id"),
//表示一种映射,前面是查询到的user表里的内容,后面是user类里面的属性
@Result(column = "birthday", property = "birthday"),
@Result(column = "name", property = "name"),
@Result(column = "password", property = "password"),
@Result(column = "id", property = "orders",javaType = List.class,
many = @Many(select = "com.example.demo.mapper.OrderMapper.selectByUid"))
//注意 这边就会把查询到的id传给后面selectByUid的参数,也就是order表格按照用户id查询订单,返回多个orders
})
List selectAllUsersAndOrders();
4. 去ordermapper里面加上根据uid返回数据的方法
@Select("select * from t_order where uid = #{uid}")
List selectByUid(int uid);
5. 去usercontroller里面调用这个方法
@GetMapping("/user/findAll")
public List find(){
return userMapper.selectAllUsersAndOrders();
}
目标二:一次性显示所有订单,并且显示与之相关联的用户信息
1. 在order类里面加上user属性,因为一个订单只能有一个用户,所以,不是list了
@TableField(exist = false)
private User user;
2. ordermapper里面加上查询语句
@Select("select * from t_order")
@Results({
@Result(column = "id",property = "id"),
@Result(column = "total",property = "total"),
@Result(column = "order_time",property = "order_time"),
@Result(column = "uid", property = "user", javaType = User.class,
one = @One(select = "com.example.demo.mapper.UserMapper.findById"))
})
List selectAllOrdersAndUsers();
3. usermapper里面加上根据id查询的语句
@Select("select * from user where id = #{id}")
User findById();
4. ordercontroller调用,注意一定要加上那个@Autowired!!!!!!!!!!
@Autowired
private OrderMapper orderMapper;
@GetMapping("/findeorder")
List find(){
return orderMapper.selectAllOrdersAndUsers();
}
接下来是mybatis-plus的分页和单表查询,我觉得用到再说吧,不是很重要的感觉