重庆企业网站定制开发公司,重庆城乡建设子网站,仿站参考网站,asp商品网站源码文章目录 一、MybatisPlus1、ORM2、添加依赖3、全局配置4、Navicat5、UserController6、CRUD操作7、BaseMapper8、两个注解 二、多表查询1、模拟用户订单2、通过用户查相关订单3、UserMapperNew4、查询订单和所属用户5、OrderMapper6、OrderController 三、条件查询四、分页查询… 文章目录 一、MybatisPlus1、ORM2、添加依赖3、全局配置4、Navicat5、UserController6、CRUD操作7、BaseMapper8、两个注解 二、多表查询1、模拟用户订单2、通过用户查相关订单3、UserMapperNew4、查询订单和所属用户5、OrderMapper6、OrderController 三、条件查询四、分页查询 一、MybatisPlus
1、ORM Object Relational Mapping对象关系映射为了解决面向对象与关系数据库存在的互不匹配的一种技术 ORM框架本质是简化编程中操作数据库的编码
2、添加依赖
!-- MyBatisPlus依赖--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.4.2/version/dependency
!-- mysql驱动依赖--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.32/version/dependency
!-- 数据连接池druid--dependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.23/version/dependency3、全局配置 在application.properties中添加配置 server.port80
spring.datasource.typecom.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-namecom.mysql.jdbc.Driver
spring.datasource.urljdbc:mysql://localhost:3307/demo2?useSSLfalse
spring.datasource.usernameroot
spring.datasource.password123456
mybatis-plus.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl由于我PC有两个数据库版本的存在所以这里使用3307端口不产生冲突数据库的名称为demo2账号密码默认 在启动项也就是项目名Application中添加MapperScan注解这里是新建的mapper包如果不好找路径那么鼠标右键点击包选择Copy Path/Reference...复制路径 4、Navicat 在navicat里面把表建好然后选择id主键自增 5、UserController 这里模拟查询用户 之前的实体类User继续使用 编写UserMapper接口 编写UserController并且声明UserMapper对象写上AutoWired注解表示注入这样我们可以直接使用UserMapper中的方法 浏览器测试一下 如果查询不到报错检查数据库是否正常连接 也可以在控制台日志看到结果 6、CRUD操作 同理有查就少不了指定id查、增删改 查询指定用户 UserController UserMapper 增删改UserController 增删改UserMapper 打开ApiPost测试一下 这里id是8虽然是自增因为我之前测试过几条我们可以再加一条 可以看到表更新了
如果表中的username是说明是编码的问题在navicat中设置utf-8字符集还没用的话继续在application.properties中的url后多加点规则
spring.datasource.urljdbc:mysql://localhost:3307/demo2?useSSLfalseuseUnicodetruecharacterEncodingutf-8如果出现Data truncated for column id at row 1问题①检查实体类参数类型是否和数据库表中匹配 ②将数据库表的int范围调高 ③看看是不是id默认在表里面排最后了把id上移到第一条和mapper中语句参数对应
7、BaseMapper 白学时刻以上都是我们在mybatis中用到的而mybatisPlus提供了BaseMapper接口 新建UserMapperNew接口 修改UserController类可以发现userMapperNew里面就自带了很多方法可以ctrl左键点进去详情查看 ListUser list userMapperNew.selectList(null);重新测试一下 剩下方法类似
8、两个注解 TableName注解说明了对应哪一张表应对实体类和表不一致 TableId主键自增在控制台打印日志时看到对应的id之前会显示0 二、多表查询 实现复杂关系映射可以使用Results、Result、One、Many注解组合完成复杂关系的配置 1、模拟用户订单 navicat 新建订单order表uid表示所属哪个用户订单 2、通过用户查相关订单
在User类里添加代码其实orders这个东西是不在user表里的所以这样打上注解并且添加getter和setter方法只是为了实现多表查询 在UserMapperNew中定义查找用户和订单的接口 在UsrController中调用 浏览器访问发现orders为空因为本来user表中就没有orders 3、UserMapperNew 利用Results、Result和Many注解 //查询用户及其所有的订单Select(select * from user)Results({Result(column id,property id),Result(column username,property username),Result(column password,property password),Result(column birthday,property birthday),Result(column id,property orders,javaType List.class,manyMany(select com.example.demo.mapper.OrderMapper.selectByUid))})ListUser selectAllUserAndOrders();这里是将结果集对应起来然后利用user表中的id去映射orders说明orders的参数类型Listmany表示一对多的关系UserMapperNew去使用OrderMapper中的方法使得user表的id能够作为order表的uid去执行sql语句 刚开始我报错说是语法问题检查后无误又将包全部导入一遍还是爆500错误发现可能是关键字冲突将order表的名字改为t_order后成功运行 4、查询订单和所属用户 同理在Order实体类加上注解说明user参数并不存在 TableField(exist false)private User user;5、OrderMapper
// 查询所有的订单同时查询订单所属的用户Select(select * from t_order)Results({Result(column id,property id),Result(column orderTime,property orderTime),Result(column money,property money),Result(column uid,property uid),Result(column uid,property user,javaType User.class,oneOne(select com.example.demo.mapper.UserMapperNew.selectById))})ListOrder selectAllOrdersAndUser();这里是一个订单只对应一个用户所以是One注解利用订单的uid对应找出user表中的用户
6、OrderController 新建OrderController控制器运行 RestController
public class OrderController {AutowiredOrderMapper orderMapper;GetMapping(/order/findAll)public ListOrder find(){return orderMapper.selectAllOrdersAndUser();}
}可以看到三个订单以及所属的用户都被查询出来了
三、条件查询 前面说过MybatisPlus对单表查询增强了我们可以不用自己写sql语句这里采用QueryWrapper UserController表示我们只想找到关于火男的信息
// 条件查询GetMapping(/user/find)public ListUser findByCondition(){QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.eq(username,火男);return userMapperNew.selectList(queryWrapper);}四、分页查询
UserController
// 分页查询GetMapping(/user/findByPage)public IPage findByPage(){
// 设置起始值和每页条数PageUser page new Page(0, 2);IPage iPage userMapperNew.selectPage(page,null);return iPage;}可以在mybatis-plus官网查看page使用方法 edge运行结果默认返回JSON格式如果其他的浏览器可以用F12查看具体参数