MyBatis实现级联查询及逆向生成

一,级联查询

1、级联查询 N-1

​ 以多的一方为主表

接口

//级联查询 N-1List<Emp> selectEmp(Map map);

映射文件

<!--级联查询 N-1  --><resultMap id="emp_Dept" type="emp"><id column="id" property="id"/><result column="name" property="name"/><result column="age" property="age"/><result column="sex" property="sex"/><result column="salary" property="salary"/><result column="bonus" property="bonus"/><result column="birth" property="birth"/><result column="hiredate" property="hiredate"/><result column="leader" property="leader"/><result column="deptid" property="deptid"/><association property="dept" javaType="dept"><id column="id" property="id"/><result column="dname" property="dname"/></association></resultMap><select id="selectEmp" resultMap="emp_Dept" parameterType="map">select * from emp e left join dept d on e.deptid=d.id<where><if test="name!=null">name like "%"#{name}"%"</if></where>limit #{start},#{size}</select>

一的一方的数据封装使用association标签
​ 使用JavaType固定搭配

​ 对应javabean中的属性

测试类

SqlSession session=null;@Beforepublic void init() throws IOException {InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(is);session=factory.openSession();}//级联查询N-1@Testpublic void selectEmp() {HashMap map = new HashMap();map.put("name","关");map.put("start",0);map.put("size",3);List<Emp> emps = session.getMapper(EmpMapper.class).selectEmp(map);System.out.println(emps);}
@Afterpublic void destory(){if (session!=null){try {session.commit();}catch (Exception e){session.rollback();}finally {session.close();}}}
2、级联查询 1-N

​ 以一的一方为主表

映射文件

<!--级联查询 1-N  --><resultMap id="dept_Emp" type="dept"><id column="did" property="id"/><result column="dname" property="dname"/><collection property="emps" ofType="emp"><id column="id" property="id"/><result column="name" property="name"/><result column="age" property="age"/><result column="sex" property="sex"/><result column="salary" property="salary"/><result column="bonus" property="bonus"/><result column="birth" property="birth"/><result column="hiredate" property="hiredate"/><result column="leader" property="leader"/><result column="deptid" property="deptid"/></collection></resultMap><select id="selectDept" resultMap="dept_Emp" parameterType="map">select e.*,d.id did,d.dname from emp e left join dept d on e.deptid=d.id<where><if test="dname!=null">dname like "%"#{dname}"%"</if></where>limit #{start},#{size}</select>

多的一方的数据使用collection标签封装
​ 固定搭配 ofType
​ 对应javabean中的属性

测试类

SqlSession session=null;@Beforepublic void init() throws IOException {InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(is);session=factory.openSession();}
//级联查询1-N@Testpublic void selectDept() {HashMap map = new HashMap();map.put("dname","蜀");map.put("start",0);map.put("size",3);List<Dept> depts = session.getMapper(EmpMapper.class).selectDept(map);System.out.println(depts);}@Afterpublic void destory(){if (session!=null){try {session.commit();}catch (Exception e){session.rollback();}finally {session.close();}}}

总结
一对多 以一的一方为主表; 多对一 以多的一方为主表
Association 封装一的一方的数据,固定类型搭配 javaType。
collection封装多的一方的数据,固定类型搭配 ofType。

二、逆向生成

1、.Pom.xml中的依赖
<!--逆向生成配置--><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.5</version></dependency><!--逆向生成带分页的插件--><dependency><groupId>com.itfsw</groupId><artifactId>mybatis-generator-plugin</artifactId><version>1.0.5</version></dependency><!--日志输出--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-nop</artifactId><version>1.7.25</version><scope>test</scope></dependency>
2、逆向生成配置文件 MyBatisGenerator.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- 生成配置文件 -->
<generatorConfiguration><context id="DB2Tables" targetRuntime="MyBatis3"><!--分页插件--><plugin type="com.itfsw.mybatis.generator.plugins.LimitPlugin"/><commentGenerator><!-- 是否去除注释,true表示是,false否 --><property name="suppressAllComments" value="true"/></commentGenerator><!-- 1.连接数据库信息 --><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/k9503?characterEncoding=UTF-8"userId="root"password="171009"></jdbcConnection><!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --><javaTypeResolver><property name="forceBigDecimals" value="false"/></javaTypeResolver><!-- 2.pojo类的生成配置  targetPackage表示目标文件夹targetProject表示当前目标文件夹所放置的目标地址--><javaModelGenerator targetPackage="com.pojo" targetProject=".\src\main\java"><property name="enableSubPackages" value="true"/><property name="trimStrings" value="true"/></javaModelGenerator><!-- 3.sql映射文件生成配置 --><sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\resources"><property name="enableSubPackages" value="true"/></sqlMapGenerator><!-- 4.mapper接口配置 --><javaClientGenerator type="XMLMAPPER" targetPackage="com.mapper" targetProject=".\src\main\java"><property name="enableSubPackages" value="true"/></javaClientGenerator><!-- 5.数据库表和实体类映射 --><table tableName="emp" domainObjectName="Emp"></table><table tableName="dept" domainObjectName="Dept"></table></context>
</generatorConfiguration>

此配置文件必须放在整个工程的目录下

可能需要修改的部分:

  1. 数据库连接信息
  2. 实体类的生成路径
  3. Sql映射文件的生成路径
  4. Mapper接口的生成路径
  5. 数据库表 表名 和 关联的 实体类的类名
3、自动生成的测试方法
@Testpublic void create() throws Exception{List<String> warnings = new ArrayList<String>();boolean overwrite = true;File configFile = new File("MybatisGenerator.xml");ConfigurationParser cp = new ConfigurationParser(warnings);Configuration config = cp.parseConfiguration(configFile);DefaultShellCallback callback = new DefaultShellCallback(overwrite);MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,callback,warnings);myBatisGenerator.generate(null);}

注意

  1. 核心配置文件 sqlMapConfig.xml的导入 db.properties 数据库四大参数配置文件的导入
  2. 核心配置文件中 对映射文件的关联

在准备工作都完成之后,执行测试方法,即可自动生成成javabean 和 接口 以及 映射文件

在生成的pojo中还有一个Example类 该类封装了所有属性的各种条件查询
通过example对象创建criteria对象,该对象通过sql拼接的方式 实现条件的封装,所以开发人员只需要调用相应
方法即可完成带条件的增删改查。
逆向工程没有提供 分页查询 和两个表的 级联查询 这一块需要我们自己去补充添加。

4、测试类
@Test//修改public void update() {Emp emp = new Emp();emp.setName("虚竹");EmpExample example = new EmpExample();EmpExample.Criteria criteria = example.createCriteria();criteria.andNameLike("%小%");int i = session.getMapper(EmpMapper.class).updateByExampleSelective(emp, example);System.out.println(i);}@Test//条件查询public void select(){EmpExample example = new EmpExample();EmpExample.Criteria criteria = example.createCriteria();criteria.andNameLike("%%");example.limit(5,5);List<Emp> emps = session.getMapper(EmpMapper.class).selectByExample(example);System.out.println(emps);}@Test//动态新增public void insert(){Emp emp = new Emp();emp.setName("萧寒");emp.setSex("男");emp.setAge(22);emp.setBonus(1500.00);int i = session.getMapper(EmpMapper.class).insertSelective(emp);System.out.println(i);}@Test//删除public void delete(){EmpExample example = new EmpExample();EmpExample.Criteria criteria = example.createCriteria();criteria.andNameLike("%彭%");int i = session.getMapper(EmpMapper.class).deleteByExample(example);System.out.println(i);}

MyBatis实现级联查询及逆向生成相关推荐

  1. MyBatis 的级联查询

    最近面试遇上一个问题就是问我MyBatis怎么级联查询 例如查询老师的时候把他的学生也查询出来 没回答上,回来自己看了看资料 找到方法了 记录下 我这里实现的是查询用户的时候把他的详情(一对一)和他的 ...

  2. mybatis 一对一 一对多 级联查询

    大家好,我是烤鸭: 今天分享一下关于mybatis的级联查询. 环境: mybatis   3.2.8 spring      4.1.9 1.   业务场景 在一个人申请某些账号或者权限的时候,比如 ...

  3. 项目一 8 购销合同管理,mybatis的逆向生成工具

    回顾 dubbo中的组件(服务的提供者,服务的消费者,注册中心,监控中心 ) 服务的提供者 : @Serivce 服务的消费者 : @Refrenece spring和dubbo整合 : 应用名称,注 ...

  4. 级联查询Mybatis

    本篇主要内容如下: 简单一对一级联查询 嵌套结果与嵌套查询 一对多单向 缓存(了解) 延迟加载(了解) 鉴别器(自学) 调用存储过程 分页拦截 多形参问题 简单一对一级联查询 在实际项目中,经常是关联 ...

  5. mybatis脱离项目逆向生成映射文件

    之前通过MyBatis Generator逆向生成映射文件都是在项目里,这次由于工作需要,尝试了下脱离项目生成 下载MyBatis Generator工具类 解压后进入lib目录,创建src文件夹以及 ...

  6. mybatis一对多关联 创建_MyBatis多对多关联查询(级联查询)

    其实,MyBatis 没有实现多对多级联,这是因为多对多级联可以通过两个一对多级联进行替换. 例如,一个订单可以有多种商品,一种商品可以对应多个订单,订单与商品就是多对多的级联关系,使用一个中间表(订 ...

  7. 【SSM 4】Mybatis逆向生成工具

    在上一篇博客中说到,Mybatis是灵活的SQL语句应用,不想Hibernate一样有其封装好的方法,那么,当我们用Mybatis的时候(Hibernate),我们都需要编写其实体类,和配置文件.本篇 ...

  8. 图解 IDEA 中 springboot 项目 MyBatis Generator 逆向生成实体类及 mapper 配置文件

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.准备工作: 1. 新建一个 配置文件:generatorConfig.xml . <?xm ...

  9. java逆向生成代码有哪些_利用mybatis逆向工程生成代码

    在做项目过程中,当面对很多表时,手动编写Mapper.xml.Mapper.java和pojo无疑是要人命,还容易出错,导致对数据库操作时各种异常.这就陷入了写bug,改bug的旋涡. 针对这一痛点, ...

最新文章

  1. 十八、启动jmeter时提示findstr不是内部命令的解决方案
  2. [詹兴致矩阵论习题参考解答]习题3.6
  3. 小师妹学JVM之:cache line对代码性能的影响
  4. python类库32[多线程同步Lock+RLock+Semaphore+Event]
  5. Java 9迁移指南:七个最常见的挑战
  6. laravel ajax ip,怎么在Laravel中利用AJAX动态刷新部分页面
  7. [AX]AX2012 SSRS报表使用Report Data Method
  8. npm换成国内源 npm换源 npm换淘宝源镜像
  9. MIND新闻推荐冠军分享细节揭秘
  10. 再见,Python!你好,Go语言\n\n
  11. FileZilla Server与FileZilla Client
  12. 问卷小程序php,问卷调查小程序(tp后台)
  13. Android自带浏览器打开网页
  14. ODL开发【SDN控制器-下】【C4-04】
  15. 苹果手机有护眼模式吗_调节手机明暗度能起到护眼模式一样的效果?
  16. 【CSS 遮挡和剪切属性 Masking】
  17. python有趣小程序代码-一个可以套路别人的python小程序实例代码
  18. python中用于绘制各种图形、标注文本_在python中的图形上绘制常量文本-问答-阿里云开发者社区-阿里云...
  19. 四极管:IIC之AVR 24c64读写
  20. Dubbo/Dubbox的服务暴露(一)

热门文章

  1. MOS管的行业应用领域-KIA MOS管
  2. HTML+CSS模仿百度首页(gird+flex布局)
  3. 使用python爬取电子书_怎样用python3爬取电子书网站所有下载链接
  4. c语言做相册影集,制作DIY相册影集教程-如何制作影集
  5. 安卓机如果相册不选图片就退出_2020最新制作动态相册技巧
  6. 林群、张景中院士近年来致力于微积分局部公理化,此路不通
  7. 9、Python xlsxwriter模块
  8. 『TensorFlow』pad图片
  9. class balanced loss pytorch 实现
  10. Bootstrap-02 (前台开发框架)