六、Mybatis注解开发

1.MyBatis的常用注解

注解开发越来越流行, Mybatis也可以使用注解开发方式,这样就可以减少编写Mapper映射文件。
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result 一起使用,封装多个结果集
@One:实现一对一结果集封装
@Many:实现一对多结果集封装

2.MyBatis的注解增删改查

mapper:

package com.cookie.mapper;import com.cookie.pojo.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;import java.util.List;public interface UserMapper {List<User> findAll();List<User> findAllUserAndRole();//添加用户@Insert("insert into user values(#{id},#{username},#{password},#{birthday})")void addUser(User user);//更新用户@Update("update user set username = #{username} where id=#{id}")void updateUser(User user);//查询用户@Select("select * from user")List<User> selectUser();//删除用户@Delete("delete from user where id = #{id}")void deleteUser(Integer id);}
    <mappers><!--扫描使用注解的类--><mapper class="com.cookie.mapper.UserMapper"></mapper></mappers>

测试:

package com.cookie.test;import com.cookie.mapper.OrderMapper;
import com.cookie.mapper.UserMapper;
import com.cookie.pojo.Order;
import com.cookie.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;public class MybatisTest {private UserMapper userMapper;@Beforepublic void before() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession(true);userMapper = sqlSession.getMapper(UserMapper.class);}@Testpublic void addUser(){User user = new User();user.setId(3);user.setUsername("12");user.setPassword("34");user.setBirthday(new Date());userMapper.addUser(user);}@Testpublic void selectUser(){List<User> users = userMapper.selectUser();for (User user : users) {System.out.println(user);}}@Testpublic void deleteUser(){userMapper.deleteUser(3);}@Testpublic void updateUser(){User user = new User();user.setId(1);user.setUsername("hahaha");userMapper.updateUser(user);}
}

3.MyBatis的注解实现复杂映射开发

实现复杂关系映射之前可以在映射文件中通过配置来实现,使用注解开发后,可以使用@Results注解,@Result注解, @One注解, @Many注解组合完成复杂关系的配置
image.png
image.png

4.一对一查询

package com.cookie.mapper;import com.cookie.pojo.Order;
import com.cookie.pojo.User;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface OrderMapper {@Select("select * from orders")@Results({@Result(id = true,property = "id",column = "id"),@Result(property = "orderTime",column = "orderTime"),@Result(property = "total",column = "total"),@Result(property = "user",column = "uid",javaType = User.class,one = @One(select = "com.cookie.mapper.UserMapper.findUserById"))})List<Order> findAllOrders();}
package com.cookie.mapper;import com.cookie.pojo.Order;
import com.cookie.pojo.User;
import org.apache.ibatis.annotations.*;import java.util.List;public interface UserMapper {//根据id查询用户信息@Select("select * from user where id = #{id}")User findUserById(Integer id);}
    @Testpublic void findAllOrders(){List<Order> allOrders = orderMapper.findAllOrders();for (Order allOrder : allOrders) {System.out.println(allOrder);}}

5.一对多查询

sql:

select * from user;
select * from orders where uid=查询出用户的id;

mapper:

public interface UserMapper {@Select("select * from user")@Results({@Result(id = true,property = "id",column = "id"),@Result(property = "username",column = "username"),@Result(property = "password",column = "password"),@Result(property = "birthday",column = "birthday"),@Result(property = "orderList",column = "id",javaType = List.class,many = @Many(select = "com.cookie.mapper.OrderMapper.findOrderByUid"))})List<User> findAllUserAndOrder();
}
public interface OrderMapper {@Select("select * from orders where uid = #{uid}")List<Order> findOrderByUid(Integer uid);}
    @Testpublic void findAllUserAndOrder(){List<User> allUserAndOrder = userMapper.findAllUserAndOrder();for (User user : allUserAndOrder) {System.out.println(user);}}

6.多对多查询

sql:

select * from user;
select * from role r,user_role ur where r.id=ur.role_id and ur.user_id=用户的id

mapper:

public interface UserMapper {@Select("select * from user")@Results({@Result(id = true,property = "id",column = "id"),@Result(property = "username",column = "username"),@Result(property = "password",column = "password"),@Result(property = "birthday",column = "birthday"),@Result(property = "roleList",column = "id",javaType = List.class,many = @Many(select = "com.cookie.mapper.RoleMapper.findById"))})List<User> findAllUserAndRoles();}
package com.cookie.mapper;import com.cookie.pojo.Role;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface RoleMapper {@Select("select * from sys_role r,sys_user_role ur where r.id = ur.roleid and ur.userid=#{uid}")List<Role> findById(Integer uid);}
    @Testpublic void findAllUserAndRoles(){List<User> allUserAndRoles = userMapper.findAllUserAndRoles();for (User allUserAndRole : allUserAndRoles) {System.out.println(allUserAndRole);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/471199.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python---内置函数】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; Python---六大数据结构 前言内置函数1.all()2. any()3.bin()4.complex()5.divmod()6.enumerate()7.filt…

基于Spring Boot的新闻推荐系统,计算机毕业设计(带源码+论文)

源码 获取地址&#xff1a; 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1758332960448262145

JVM-JVM中对象的结构

对象内存布局 对象里的三个区&#xff1a; 对象头&#xff08;Header&#xff09;&#xff1a;Java对象头占8byte。如果是数组则占12byte。因为JVM里数组size需要使用4byte存储。 标记字段MarkWord&#xff1a; 用于存储对象自身的运行时数据&#xff0c;它是synchronized实现轻…

自动化机器学习(AutoML)入门简介

近期在学习研究一些关于自动化机器学习方面的论文&#xff0c;本文作为该系列的第一篇文章&#xff0c;就AutoML的一些基本概念和现状进行简单分享&#xff0c;权当抱砖引玉。 图片源自《Taking Human out of Learning Applications: A Survey on Automated Machine Learning》…

猫头虎分享已解决Bug ‍ || Go Error: redeclared as imported package name

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【阅读笔记】空域保边降噪《Side Window Filtering》

1、保边滤波背景 保边滤波器的代表包括双边滤波、引导滤波&#xff0c;但是这类滤波器有一个问题&#xff0c;它们均将待处理的像素点放在了方形滤波窗口的中心。但如果待处理的像素位于图像纹理或者边缘&#xff0c;方形滤波核卷积的处理结果会导致这个边缘变模糊。 基于这个…

在spring中操作Redis

目录 创建项目 ​编辑 配置Redis 创建类 StringRedisTemplate set / get list set Hash zset 新年快乐&#xff01;&#xff01;&#xff01;&#xff01; 创建项目 选中maven项目&#xff0c;然后选择java8&#xff0c;输入名称之后&#xff0c;点击next。 随后选择…

CTF攻防比赛真题详解

0x00 前言 某同学发在群里一道不知道什么ctf的web题 0x01 bypass open_basedir 开始没想那么多&#xff0c;看到了可以执行phpinfo&#xff0c;直接先eval一个一句话上去看看什么情况&#xff1a; 接着发现了没有权限去读取/var/www/html以外的目录&#xff0c;那么我开始想的…

ChatGPT绘图指南:DALL.E3玩法大全(二)

在前一篇文章中&#xff0c;我们介绍了什么是 DALL.E3 模型&#xff0c; DALL.E3 有什么优势&#xff0c;使用DALL.E3 的两种方法&#xff0c;以及DALL.E3 绘图的基本规则&#xff0c; 感兴趣的朋友请前往查看: ChatGPT绘图指南&#xff1a;DALL.E3玩法大全(一). 接下来&#…

Mysql运维篇(四) Xtarbackup--备份与恢复练习

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; 前言 xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具&#xff0c;具有…

CSP-201909-1-小明种苹果

CSP-201909-1-小明种苹果 #include <iostream> using namespace std; int main() {long long sumApple 0, maxNum 0, maxAppleNum 0, n, m;cin >> n >> m;for (long long i 0; i < n; i){long long appleNum, delta 0;cin >> appleNum;for (l…

Window+Linux双系统优雅的卸载Linux系统

WindowLinux双系统优雅的卸载Linux系统 那些最好的程序员不是为了得到更高的薪水或者得到公众的仰慕而编程&#xff0c;他们只是觉得这是一件有趣的事情&#xff01; WindowLinux双系统优雅的卸载Linux系统 WindowLinux双系统优雅的卸载Linux系统&#x1f33f;前言&#x1f340…