范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Mybatis的基础和高级查询应用实践

  前言
  将分为3部分介绍:基本应用基于xml的复杂映射开发Mybatis注解开发
  [玫瑰][玫瑰]你的"关注 ""收藏 "是我最大的动力。非常感谢。[玫瑰][玫瑰]
  #java# #数据库# #开发# #后端# 基本应用
  1.快速入门
  快速入门查看官网 :http://www.mybatis.org/mybatis-3
  开发步骤
  1.添加Mybatis的坐标(添加pom.xml依赖)      org.mybatis     mybatis     3.4.5        mysql     mysql-connector-java     5.1.6     runtime 
  2.创建数据库表 + 编写实体
  表设计和实体根据自己业务实际编写即可
  3.编写映射文件Mapper.xml与标签说明
   <?xml version="1.0" encoding="UTF-8" ?>        
  4.编写核心文件SqlMapConfig.xml                                                                                                                                                                                                                                                
  5.使用public static void main(String[] args){     //获取配置信息     InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");      //获取工厂类     SqlSessionFactory sqlSessionFactory =          new SqlSessionFactoryBuilder().build(resourceAsStream);      //开启sql会话     SqlSession sqlSession = sqlSessionFactory.openSession();      //开始执行对应操作     User query = new User();     query.setUsername("Tom");      int insert = sqlSession.insert("userMapper.find", query);     //提交事务      //sqlSession.commit(); //CUD操作需要提交事务     //关闭会话     sqlSession.close(); }
  sqlConfig.xml核心配置文件标签说明
  : 数据库环境的配置,支持多种环境配置
  : 环境变量
  : 事务管理器,有两种类型:JDBC:使用了JDBC的提交和回滚设置,依赖于从数据源得到的链接来管理事务作用域MANAGED:这个配置几乎什么都没有做,它从不提交和回滚一个链接,而是让容器去管理事务的整个生命周期。默认情况下它会关闭连接,然后有些容器不希望关闭,所以需要将 closeConnection 属性设置为false来阻止它的默认行为
  : 数据源,有三种类型:UNPOOLED:非连接池类型。这个数据源实现的只是每次请求时打开和关闭连接POOLED:连接池类型。这种数据源实现利用"池"的概念将JDBC连接对象组织起来JNDI:这个数据源实现是为了能在如EJB或者应用服务器这类的容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文引用
  : 属性
  : 属性该标签可以加载额外配置的properties文件,如resource文件夹下的jdbc.properties。使用方式为:${jdbc.driver} 可以引用对应的值
  : 映射器,作用是加载sql的映射,有四种方式使用类路径:使用完全限定资源定位符(URL): 使用映射器接口实现类的完全限定类名: 使用包内的映射器接口实现全部注册为映射器: 基于xml复杂映射开发准备:演示说明具体的xml复杂映射开发前,需要准备一下模拟信息
  - 实体
  - Mapper接口实体(对应数据库表) public class User{     private Integer id;     private String userName;     //一个用户,有多个订单(一对多)     private List orderList;     //用户角色(多对多)     private List roleList; }public class Order{     private Integer id;     private Integer userId;     private String orderTime;     //一个订单,只有一个用户(一对一)     private User user; }public class Role{     private Integer id;     private String roleName; }public class UserRole{     private Integer userId     private Integer roleid; }Mapper接口 public class OrderMapper{     List findAll();     //查询一对一     List finUserAndOrder(); }public class UserMapper{     User findById(Integer userId);     //查询一对多     List findAll();     //查询多对对     List findAllUserAndRole(); }public class RoleMapper{     //查询多对对     List findByUserId(Integer userId); }
  一对一查询                                                                                                           
  一对多查询
  从用户角度出发,查询一对多结果;                                                                                                               
  多对多查询
  用户和角色的关系,就是多对多查询;                                                                                             
  测试复杂映射public static void main(String[] args){     //获取配置输入流     InputStream inputStream = Resources.getResourceAsSteam("splMapConfig.xml");     //获取sql会话     SqlSession sqlSession = SqlSessionFactoryBuilder.build(inputStream).openSession();     UserMapper userMapper = sqlSession.getMapper(UserMapper.class);     //执行查询      /*一对一*/     List orderList = orderMapper.finUserAndOrder();     for(Order order : orderList){         System.out.println(order)     }     /*一对多*/     List userList = userMapper.findAll();     for(User user : userList){         System.out.println(user)     }     /*多对多*/     List userList = userMapper.findAllUserAndRole();     for(User user : userList){         System.out.println(user)     }     sqlSession.close(); }Mybatis注解开发
  常用注解:使用注解开发前,先介绍以下常用的注解@Insert 新增 @Update 更新 @Delete 删除 @Select 查询 @Result 实现结果集封装。代替了xml中的和标签,有以下属性: column 数据库的字段名 property 对应对象的属性名one 需要使用的@One注解 :@Result( one=@One ) many 需要使用@Many注解:@Result( many=@Many ) @Results 可以与@Result一起使用,封装多个结果集 代替了xml中的标签,也可以使用@Result集合,使用格式: @Results({       @Result(),@Result()   })@One 一对一结果集封装
  代替了标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。有以下属性: select 指定用来多表查询的 sqlmapper @Result(column="",property="",one=@One(select=""))@Many 一对多结果集封装
  代替了标签,是多表查询的关键,再注解中用来指定子查询返回的对象集合。有以下属性: select 指定用来多表查询的 sqlmapper @Result(column="",property="",one=@Many(select=""))
  使用注解一对一查询public class OrderMapper{     //查询一对一     @Select("select * from order")     @Results({         @Result(id=true,property="id",column="id"),         @Result(property="userId",column="userId"),         @Result(property="orderTime",column="orderTime")         @Result(property="user",column="userId",                 javaType=User.class,                 one=@One(select="com.xxx.mapper.UserMapper.findById")                )     })     List finUserAndOrder(); }public class UserMapper{     @Select("select * from user where id=#{userId}")     User findById(Integer userId); }
  使用注解一对多查询public class OrderMapper{         @Select("select * from order where userId=#{userId}")     List findByUserId(Integer userId); }public class UserMapper{     //查询一对多     @Select("select * from user")     @Results({         @Result(id=true,property="id",column="id"),         @Result(id=true,property="username",column="username"),         @Result(property="orderList",column="id",                 javaType=List.class,                 many=@Many(select="com.xxx.mapper.OrderMapper.findByUserId")     })     List findAllUserAndOrder(); }
  使用注解多对多查询public class UserMapper{     //查询多对对     @Select("select * from user")     @Results({         @Result(id=true,property="id",column="id"),         @Result(property="username",column="username"),         @Result(property="roleList",column="id",                javaType=List.class,                many=@Many(select="com.xxx.mapper.RoleMapper.findByUserId"))     })     List findAllUserAndRole(); }public class RoleMapper{     //查询多对对     @Select("select * from role r,user_role ur where r.id=ur.roleId and ur.userId = #{userId}")     List findByUserId(Integer userId); }结语
  以上是对mybatis的基础使用和高级用法,实际项目中,可以结合情况,使用xml查询或者使用两者结合查询都是可行的。
  可以的话,麻烦"关注"一下哦。后续文章中,会继续介绍mybatis的缓存和插件机制。
  快捷访问:Mybatis一级缓存和二级缓存

小米社区高管竟称自己玩的久会玩其他人没有资格指手画脚起因是小米社区高管大李同学发了一篇博文,对于小米系统的问题截取了部分好的评论后被热心的网友揭破谎言,事实是小米现在的系统优化大不如前了,论坛天天骂。后该高管只是冷冷地回了句我用的比javalz4压缩工具类packagecom。beini。test。javase。compressimportnet。jpountz。lz4。importjava。io。importjava。nio。ByAndroid通知管理类通知管理类packagecom。track。beini。navtrack。utilsimportandroid。app。NotificationChannelimportandrochromevue5。1。0安装最新公司需要用到vue,顺便学习了会,今天先写vue调试工具的安装,前提是已经配置了vue的npm开发环境通过gitclonevuedevtools源码或者下载源码压缩包gitclword怎么删除空白行突然有朋友问我,word空白行怎么删除我们写文档的时候经常会遇到,这里针对表格位置导致的空白行该如何处理分析原因一般像这种情况都是表格位置边距造成的,首先我们找到表格定位,看一下表EXCEL数据分析,迷你图制作,另类的数据图表在数据分析中,迷你图可以简单直观的反应数据变化情况,其制作简单,可以对一行中一系列的数据进行数据比较和趋势分析。本文使用案例数据制作迷你图,所使用的方法有,REPT函数法,以及数据AndroidStudio自动加入SVN版本控制如下图,新建的时候勾选了Remember,dontaskagain,点击了Cancel按钮。这就导致了之后新建的文件都无法添加到svn进行版本控制了。为了解决这个问题,我找到了ASWin10关闭系统更新在运行输入gpedit。msc,打开本地组策略编辑器禁用配置自动更新在本地策略找到,计算机配置管理模板Windows组件Windows更新配置自动更新选择已禁用配置说明指定此计算机CtrlEnter,1秒批量合并数据并导入数据库的办法,你学会了吗?在日常数据分析的业务场景下,我们经常会遇到以下难题如何批量导入不同工作簿不同Sheet表下的数据?如何将这些不同Sheet表下的数据合并为一个数据?如何将合并的数据导入数据库?本文从零开始学SQL数据分析,SQL数据清洗获取数据后,对数据的清洗工作必不可少,常用的数据清洗方法主要有缺失值填充数值替换数据类型转换数据分列重复值处理等,清洗的数据结果直接影响最后数据分析的结果,一个成熟的数据分析师,在从零开始学SQL数据分析,SQL数据表的查看拿到一张数据表时,通常要预览数据表的整体情况,不能盲目地做分析,首先查看数据表的数据量大小,包含行数列数,空白数据有多少异常数据有多少,查看某列数据的唯一值等,下面一起来学习。本文
元宇宙千里马计划发布15家上市公司纳入成员名单焦点资讯1月19日,中国移动通信联合会元宇宙产业委员会在央链直播全网举行第二次新闻通报会,公布了第二批接纳的成员单位(含个人),并发布了元宇宙产业人才培养千里马计划。据委员会秘书长何超介绍三星宣布推出首款配备AMD光线追踪GPU的智能手机芯片三星宣布推出Exynos2200,这是其用于智能手机的新型内部移动处理器。它是第一款包含采用AMDRDNA2图形架构的GPU的移动片上系统,可实现硬件加速光线追踪等功能。与AMD的每部iPhone收费31。75元!苹果又被告了近日,苹果又被起诉了!与以往不同的是,这次起诉苹果的不是用户,而是电信巨头爱立信。爱立信指出,由于之前的协议已经到期,两家公司无法就新的许可条款和范围达成共识,苹果现在在没有许可的美国乱套了,两行业对掐,总统拜登拉架北京时间19日上午,在美国总统拜登协调下,两个美国移动通讯5G运营商同意在美国关键机场附近,延迟部署5G基站。拜登为此特别发布感谢信,感谢移动公司为保障百姓的航空出行及航空货运做出美又将黑手伸向中企?英媒美国借国安名义调查阿里云来源环球时报环球时报报道美国政府把黑手伸向阿里云?英国路透社18日报道称,美国政府正在审查中国电子商务巨头阿里巴巴的云存储业务,以确定它是否对美国国家安全构成风险。消息人士称,美国成都警方通报360员工被外来人员打伤嫌疑人与360借条平台存在借款纠纷成都高新公安分局通报,2022年1月25日10时45分,公安机关接报警360成都分公司办公区内有人伤人。接报警后,民警迅速赶到现场处置,将嫌疑人依法控制。经查,嫌疑人刘某某(男,3Windows11Build22449测试版更新带来新的加载动画等改进按照开发计划,在努力完善Windows11的首个正式发布版本的同时,微软也已经在为定于2022下半年到来的另一开发分支做准备。不过现在,Insider测试者们已经迎来了开发通道的W供货芯片已成事实,华为5G有望重回正轨,美国这次输了尽管很多人不愿承认,但是在芯片领域,美国一直都是名副其实的霸主。从早些年日本半导体行业没落以后,美国在芯片行业的霸主地位就逐渐牢固,从芯片的设计到工艺,再到后续的生产等方面,美国一14999起!三星GalaxyZFold3发布,捍卫折叠屏王者称号?三星于9月1日召开秋季新品发布会,正式带来三星GalaxyZFold3手机,不仅拥有强悍的综合硬件配置,实用性相比前两代产品大幅提升,因此被粉丝称之为地表最强折叠屏手机产品。作为一OPPOFindX4Pro堆料很猛,18G运存5100mAh4nm芯片,将于年底发布今年除了华为各大国产智能手机品牌的新机更新速度都十分给力,如小米OPPOvivo到目前为止已经更新了两三款旗舰新机,市场份额也纷纷上涨。上半年第二季度这三个国产手机品牌在亚太地区的不插卡也能打电话?iPhone13被曝将支持卫星通话郭明錤发布报告预测,iPhone13可能支持低轨道卫星通话,在4G5G网络无法覆盖的地区,直接使用卫星来进行通话。报告指出,iPhone13可能配备高通X60基带,并支持低轨道卫星