Mybatis自关联映射

合集下载

mybatis选择题题库

mybatis选择题题库

mybatis选择题题库含解答共20道1. 问题:MyBatis是一种什么类型的持久层框架?- a. ORM框架- b. MVC框架- c. AOP框架- d. IoC容器答案:a. ORM框架2. 问题:在MyBatis中,#{param}和${param}的区别是什么?- a. #{param}用于设置预编译参数,${param}用于字符串替换- b. #{param}用于字符串替换,${param}用于设置预编译参数- c. 两者没有区别- d. #{param}和${param}不能同时使用答案:a. #{param}用于设置预编译参数,${param}用于字符串替换3. 问题:MyBatis中的动态SQL是通过哪个标签实现的?- a. \<if>- b. \<choose>- c. \<foreach>- d. \<sql>答案:b. \<choose>4. 问题:MyBatis中,一对一关联关系的映射是通过哪个元素实现的?- a. \<one-to-one>- b. \<resultMap>- c. \<association>- d. \<many-to-one>答案:c. \<association>5. 问题:MyBatis的缓存机制默认是开启的吗?- a. 是- b. 否答案:a. 是6. 问题:MyBatis中的批量插入操作通常使用哪个元素?- a. \<batch>- b. \<foreach>- c. \<insert>- d. \<update>答案:b. \<foreach>7. 问题:在MyBatis中,如果想要返回自增主键,可以使用哪个属性?- a. keyProperty- b. useGeneratedKeys- c. generatedKey- d. returnGeneratedKeys答案:b. useGeneratedKeys8. 问题:MyBatis中的逆向工程是通过哪个工具生成的?- a. MyBatis Generator- b. Hibernate Tools- c. Spring Roo- d. Apache Maven答案:a. MyBatis Generator9. 问题:MyBatis中的拦截器是通过哪个接口实现的?- a. Interceptor- b. MapperInterceptor- c. MyBatisInterceptor- d. Plugin答案:a. Interceptor10. 问题:MyBatis中的动态数据源切换是通过哪个技术实现的?- a. AOP- b. 注解- c. ThreadLocal- d. 注入答案:c. ThreadLocal11. 问题:在MyBatis中,如果需要返回多个查询结果集,可以使用哪个元素?- a. \<select>- b. \<resultMap>- c. \<association>- d. \<resultSets>答案:d. \<resultSets>12. 问题:MyBatis中的懒加载是通过什么机制实现的?- a. AOP- b. 代理模式- c. 工厂模式- d. 观察者模式答案:b. 代理模式13. 问题:在MyBatis中,#{}, ${}, <![CDATA[]]> 的作用分别是什么?- a. #{}, ${}都是用于设置预编译参数,<![CDATA[]]>用于包裹动态SQL- b. #{}, ${}都是用于字符串替换,<![CDATA[]]>用于设置预编译参数- c. #{}, ${}都是用于字符串替换,<![CDATA[]]>用于包裹动态SQL- d. #{}, ${}都是用于设置预编译参数,<![CDATA[]]>用于字符串替换答案:a. #{}, ${}都是用于设置预编译参数,<![CDATA[]]>用于包裹动态SQL14. 问题:在MyBatis中,如果使用注解方式配置SQL语句,可以使用哪个注解?- a. @Query- b. @Sql- c. @Statement- d. @Select答案:d. @Select15. 问题:MyBatis的架构中,SqlSession的作用是什么?- a. 用于执行SQL语句- b. 用于映射Java对象和数据库记录- c. 用于管理数据库连接- d. 用于配置数据源答案:a. 用于执行SQL语句16. 问题:在MyBatis中,#{}和${}的主要区别是什么?- a. #{}用于预处理参数,${}用于直接替换字符串- b. #{}用于直接替换字符串,${}用于预处理参数- c. #{}用于动态SQL,${}用于设置预处理参数- d. #{}和${}在MyBatis中没有区别答案:a. #{}用于预处理参数,${}用于直接替换字符串17. 问题:MyBatis的二级缓存是默认开启的吗?- a. 是- b. 否答案:b. 否18. 问题:在MyBatis中,如何配置全局的参数映射器(TypeHandler)?- a. 在全局配置文件中配置- b. 在Mapper接口中配置- c. 在Mapper XML 文件中配置- d. 在数据库连接配置中配置答案:a. 在全局配置文件中配置19. 问题:在MyBatis中,#{param}和${param}的作用范围是什么?- a. #{param}只能用于设置预编译参数,${param}只能用于字符串替换- b. #{param}和${param}在MyBatis中没有区别- c. #{param}和${param}都可以用于设置预编译参数和字符串替换- d. #{param}只能用于字符串替换,${param}只能用于设置预编译参数答案:c. #{param}和${param}都可以用于设置预编译参数和字符串替换20. 问题:在MyBatis中,如何配置Mapper接口的方法参数映射?- a. 在Mapper接口方法上使用@Param注解- b. 在Mapper XML 文件中使用\<parameter>元素- c. 在全局配置文件中使用\<parameterMap>元素- d. 在Mapper接口方法上直接使用参数名答案:a. 在Mapper接口方法上使用@Param注解。

mybaits工作原理

mybaits工作原理

mybaits工作原理
MyBatis是一种Java持久层框架,其工作原理是通过XML或注解方式将SQL语句映射到Java对象中,从而实现数据库的访问和操作。

MyBatis的工作原理可以分为三个步骤:配置、映射和执行。

1. 配置:MyBatis的配置文件包括数据源、事务管理器、映射器等信息。

其中,数据源配置是必须的,它定义了数据库的连接信息,使得MyBatis能够连接到数据库。

事务管理器配置则是为了确保数据操作的一致性和完整性。

映射器配置则是为了将Java对象与SQL 语句进行映射。

2. 映射:映射是将Java对象与SQL语句进行绑定。

通过XML或注解方式,MyBatis可以将Java对象的属性与SQL语句的参数进行绑定,从而实现数据库的访问和操作。

同时,MyBatis还支持动态SQL,可以根据不同的条件生成不同的SQL语句。

3. 执行:执行是将映射好的SQL语句进行执行。

MyBatis将SQL 语句发送到数据库中执行,并将返回结果转换为Java对象。

在执行过程中,MyBatis还支持缓存机制,可以将执行结果进行缓存,提高查询效率。

除此之外,MyBatis还支持插件机制,可以通过插件来扩展
MyBatis的功能。

插件可以在执行SQL语句前或后进行拦截,从而实现自定义的功能。

总的来说,MyBatis的工作原理是通过配置、映射和执行三个步骤实现数据库的访问和操作。

通过XML或注解方式将SQL语句映射到Java对象中,从而实现数据库的操作。

同时,MyBatis还支持动态SQL、缓存机制和插件机制等功能,可以满足不同场景的需求。

软件开发mybatis技术(习题卷1)

软件开发mybatis技术(习题卷1)

软件开发mybatis技术(习题卷1)第1部分:单项选择题,共76题,每题只有一个正确答案,多选或少选均不得分。

1.[单选题]ResultMap中映射到列结果的字段或者属性的是A)columnB)propertyC)javaTypeD)jdbcType答案:B解析:2.[单选题]在使用Spr ingMVC的项目中,进行服务器端验证,用什么注解可以实现正则匹配A)@SizeB)@PatternC)@MaxD)@Past答案:B解析:3.[单选题]mybatis配置文件的根标签是:A)mapperB)configurationC)htmlD)xml答案:B解析:4.[单选题]使用一对多的标签是()A)associationB)collectionC)OneToManyD)ManyToOne答案:B解析:5.[单选题]在Mybatis 注册Mappers信息时添加配置为:A)<mapper resource="dao.EmpDaoMapper.xml"></mapper>B)<mapper resource="dao\EmpDaoMapper.xml"></mapper>C)<mapper resource="dao/EmpDao"></mapper>D)<mapper resource="dao/EmpDaoMapper.xml"></mapper>答案:D解析:6.[单选题]映射文件的<mapper namespace=””>配置可以是任意字符串吗?A)可以,但只能通过完全限定名调用D)不可以,这样映射文件就找不到对应的接口类答案:A解析:7.[单选题]Mybatis中< select >标签的作用A)添加B)修改C)删除D)查询答案:D解析:8.[单选题]Mybatis是如何将sql执行结果封装为目标对象并返回的A)idB)使用sql列的别名C)resultTypeD)resultMap答案:B解析:9.[单选题]下面对Spring中Bean的注入说法正确的是A)Bean根据注入方式不同可以分为构造方法注入和自动装载B)使用构造方法注入构造对象的同时,完成依赖关系的建立C)在关系的对象很多时,使用构造方法注入更适合D)构造方法通过constructor-index属性来指定,在该标签下要指定索引的位置答案:B解析:10.[单选题]每个基于 MyBatis 的应用都是以一个() 的实例为中心的A)SqlSessionFactoryB)SqlSessionC)SessionD)SqlSessionFactoryBuilder答案:A解析:11.[单选题]在MyBatis中,使用jdbc方式返回主键自增的值需要设置<insert>标签的什么属性( )A)idB)parameterTypeC)keyPropertyD)useGeneratedKeys答案:D解析:12.[单选题]下列不属于Spring MVC控制器的是?A)前端控制器(dispatcherServlet)B)请求到处理器映射(handlerMapping)C)视图解析器(ViewResolver)D)处理器适配器(ConntrllerAdapter)13.[单选题]MyBatis中用于表示返回结果类型的属性名称是A)resultTypeB)parameterTypeC)collectionD)returnType答案:A解析:14.[单选题]关于AspectJ注解的介绍,说法错误的是A)@Aspect用于定义一个切面B)@Pointcut用于定义切入点表达式C)@Before用于定义前置通知,相当于BeforeAdviceD)@After用于定义后置通知,相当于AfterReturningAdvice答案:D解析:15.[单选题]在下划线处填写正确代码实现重定向@RequestMapping("/toJump") public String skipTest(){ return "_______:/jump.do"; }A)skipB)forwardC)redirectD)to答案:C解析:16.[单选题]Spring的核心机制是( )A)依赖注入B)数据访问C)AOPD)声明式事务答案:A解析:17.[单选题]使用()标签注入Properties集合元素A)B)C)<list>D)<map>答案:A解析:18.[单选题]<result column="loc" property="loc"/>标签中” property”的作用A)配置对应表中的列名B)配置对应的实体类C)配置对应的测试类D)配置对应的实体类中的成员变量答案:D解析:19.[单选题]以下代码是哪种( )注入方式<bean id="student" class="com.mhys.bean.Student"> <!-- name:属性B)构造方法注入C)set注入D)表达式spel方式注入答案:C解析:20.[单选题]使用()标签注入数组元素A)<import>B)<list>C)<autowire>D)<factory-bean>答案:B解析:21.[单选题]关于@RestController控制器说明正确的是?A)是Spring的内容注解B)是Spring的路径注解C)是Spring的控制器注解D)@Controller 注解更强大答案:C解析:22.[单选题]Mybatis的表关联的映射描述错误的是()A)一对一关联B)一对多关联C)多对多关联D)以上都不对答案:D解析:23.[单选题]在Spring中, 以下代码属于( )注入方式<bean id="student" class="com.mhys.bean.Student"> <!--name:属性名 value:属性值 --> </property></bean>A)p命名空间注入B)构造方法注入C)set注入D)表达式spel方式注入答案:C解析:24.[单选题]下列注解限制必须为一个不大于指定值得数字是?A)@Max(value)B)@Min(value)C)@DecimalMax(value)D)@DecimalMin(value)答案:C解析:25.[单选题]MVC中M是A)ModelD)ModelAndView答案:A解析:26.[单选题]以下哪个属性是<bean>标签的名称标识?A)idB)nameC)classD)factory-bean答案:B解析:27.[单选题]mybatis指定配置文件的根元素使用的是什么A)<sqlMapConfig>B)<configration>C)<setting>D)<environments>答案:B解析:28.[单选题]SpringMVC处理响应时,默认采用的是下列( )方式进行A)重定向B)转发C)先重定向,然后转发D)先转发,然后重定向答案:B解析:29.[单选题]Mybatis 会不会为程序员在运行期自动生成SQL执行?A)不会B)会C)可能会D)不确定答案:A解析:30.[单选题]下列限制只能为false的标签是?A)@AssertFalseB)@NullC)@DecimalMin(value)D)@IsFalse答案:A解析:31.[单选题]Maven项目的主配置文件是()A)pom.xmlB)web.xmlC)mysql-config.xmlD)application.xml32.[单选题]MVC中v是A)ModelB)ViewC)ControllerD)ModelAndView答案:B解析:33.[单选题]Spring的优势不包括以下哪个选项( )。

mybatis的三种数据库映射实体类的方法

mybatis的三种数据库映射实体类的方法

mybatis的三种数据库映射实体类的⽅法1.实体类中变量完全和数据库中的字段名对应例如:DB:user_id, 则实体类中成员变量也是user_id托管给mybatis,mybatis会把变量和字段名⼀⼀映射2.在mybatis-congfig.xml⾥配置settings<settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings>加上这个配置后,mybatis帮我们把数据库字段按驼峰命名传给对应实体类字段db:user_id => 实体类userId这个配置要加在的最前⾯3.在Mapper的配置⽂件⾥配置映射关系(字段多后,不建议⽤)例如:我的Mapper配置⽂件是,TbUserMapper.xml,在select前加上resultMap<resultMap id="tb_user" type="com.besttest.mybatis.entity.TbUser"><id column="id" property="id"/><result column="user_id" property="userID"/><result column="user_name" property="userName"/></resultMap>其中:resultMap中 id="tb_user" 表⽰对应的表type="com.besttest.mybatis.entity.TbUser"表⽰对应的实体类id column="id" property="id" 第⼀个id表⽰主键,column="id" 表⽰表中id字段,property="id表⽰对应实体类的id变量result column="user_id" property="userID" result表⽰映射,column表的,property实体类的注意:使⽤这种⽅式,Mapper配置⽂件中,select的配置,resultType要改成resultMapresultType=实体类的相对路径,resultMap=配置项resultMap⾥的id的值上⾯的例⼦就是resultMap="tb_user"。

Springboot中以配置类方式自定义Mybatis的配置规则(如开启驼峰映射等)

Springboot中以配置类方式自定义Mybatis的配置规则(如开启驼峰映射等)

Springboot中以配置类⽅式⾃定义Mybatis的配置规则(如开启驼峰映射等)什么是⾃定义Mybatis的配置规则?答:即原来在mybatis配置⽂件中中我们配置到<settings>标签中的内容,如下第6-10⾏内容:1<?xml version="1.0" encoding="UTF-8" ?>2<!DOCTYPE configuration3 PUBLIC "-////DTD Config 3.0//EN"4 "/dtd/mybatis-3-config.dtd">5<configuration>6<settings>7<setting name="lazyLoadingEnabled" value="true"/>8<setting name="aggressiveLazyLoading" value="false"/>9<setting name="logImpl" value="LOG4J"/>10</settings>11<environments default="development">12<environment id="development">13<transactionManager type="JDBC"/>14<dataSource type="POOLED">15<property name="driver" value="com.mysql.jdbc.Driver"/>16<property name="url"17 value="jdbc:mysql://localhost:3306/ssm?useSSL=true&amp;serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=utf8"/>18<property name="username" value="root"/>19<property name="password" value="123456"/>20</dataSource>21</environment>22</environments>23<mappers>24<!--<mapper resource="com/xj/mapper/UserMapper.xml"/>-->25<mapper class="erMapper"/>26<mapper class="com.xj.mapper.AccountMapper"/>2728</mappers>29</configuration>在springboot我们不⽤编写xml配置⽂件,那么我们该怎么来配置这些设置呢?答:编写⼀个配置类,然后通过@Bean注解给容器中添加⼀个ConfigurationCustomizer类型的组件即可。

Mybatis3详解(四)----SQL映射文件详解(XxxMapper.xml)

Mybatis3详解(四)----SQL映射文件详解(XxxMapper.xml)

Mybatis3详解(四)----SQL映射⽂件详解(XxxMapper.xml)1映射器是Mybatis中最复杂并且是最重要的组件。

它由⼀个接⼝和xml映射⽂件(或者注解)组成。

在映射器中我们可以配置各类SQL、动态SQL、缓存、存储过程、级联等复杂的内容。

并且通过简易的映射规则映射到指定的POJO或者其它对象上,映射器能有效的消除JDBC的底层代码。

在Mybatis的应⽤程序开发中,映射器的开发⼯作量占全部⼯作量的80%,可见其重要性。

映射⽂件的作⽤是⽤来配置SQL映射语句,根据不同的SQL语句性质,使⽤不同的标签,其中常⽤的标签有:<select>、<insert>、<update>、<delete>。

下⾯列出了SQL 映射⽂件的⼏个顶级元素(按照应被定义的顺序列出):元素描述cache该命名空间的缓存配置(会在缓存部分进⾏讲解)cache-ref引⽤其它命名空间的缓存配置resultMap描述如何从数据库结果集中加载对象,它是最复杂也是最强⼤的元素parameterMap定义参数映射。

此元素已被废弃,并可能在将来被移除!请使⽤⾏内参数映射parameType。

所以本⽂中不会介绍此元素sql可被其它语句引⽤的可重⽤语句块select映射查询语句insert映射插⼊语句update映射更新语句delete映射删除语句2select元素表⽰SQL 的select 语句,⽤于查询,⽽查询语句是我们⽇常中⽤的最多的,使⽤的多就意味它有着强⼤和复杂的功能,所以我们先来看看select元素的属性有哪些(加粗为最常⽤的)。

select元素中的属性属性描述id在命名空间中唯⼀的标识符,可以被⽤来引⽤这条语句parameterType将会传⼊这条语句的参数类的完全限定名或别名。

这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传⼊语句的参数,默认值为未设置(unset)parameterMap这是引⽤外部 parameterMap 的已经被废弃的⽅法。

《Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)》_课后习题

第一章【思考题】1、请简述Spring框架的优点。

2、请简述什么是Spring的IoC和DI。

【答案】1、Spring框架的优点如下:(1)非侵入式设计:Spring是一种非侵入式(non-invasive)框架,它可以使应用程序代码对框架的依赖最小化。

(2)方便解耦、简化开发:Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器管理,大大的降低了组件之间的耦合性。

(3)支持AOP:Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事务、日志等进行集中式处理,从而提高了程序的复用性。

(4)支持声明式事务处理:只需要通过配置就可以完成对事务的管理,而无需手动编程。

(5)方便程序的测试:Spring提供了对Junit4的支持,可以通过注解方便的测试Spring 程序。

(6)方便集成各种优秀框架:Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持。

(7)降低了Java EE API的使用难度:Spring对Java EE开发中非常难用的一些API (如:JDBC、JavaMail等),都提供了封装,使这些API应用难度大大降低。

2、IoC的全称是Inversion of Control,中文名称为控制反转。

控制反转就是指在使用Spring框架之后,对象的实例不再由调用者来创建,而是由Spring容器来创建,Spring 容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。

这样,控制权由应用代码转移到了Spring容器,控制权发生了反转。

DI的全称是Dependency Injection,中文称之为依赖注入。

它与控制反转(IoC)的含义相同,只不过这两个称呼是从两个角度描述的同一个概念。

从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是Spring的依赖注入。

mybatis的resultmap用法

mybatis的resultmap用法MyBatis是一款用于Java语言的持久层ORM框架,相较于其他ORM框架,MyBatis提供了更为灵活和精细化的数据库操作控制。

在MyBatis 中,resultMap是其中一个重要的功能,用于将查询结果集映射为Java 对象。

本文将详细介绍resultMap的用法,展开解释其一步一步的使用方法。

一、什么是resultMapresultMap是MyBatis中的一个重要概念,它用于将查询结果集映射为Java对象的工具。

在不适用resultMap时,MyBatis会根据列名自动将查询结果集映射到对应的Java对象属性,这种方式在简单的ORM场景下可以满足需求。

但是,在复杂的查询情况下,查询结果集的列名与Java 对象属性名可能不一致,这时候就需要使用resultMap进行手动映射。

二、resultMap的基本用法1. 创建resultMap在MyBatis的映射配置文件(通常是xxxMapper.xml)中,首先需要定义一个resultMap节点,用于描述映射关系。

这个节点可以嵌套在select 节点中,也可以作为单独的节点存在。

一个基本的resultMap定义如下:xml<! resultMap定义><resultMap id="userResultMap" type="er"><id property="id" column="user_id" /><result property="name" column="user_name" /><result property="age" column="user_age" /></resultMap>在上述代码中,我们定义了一个id为userResultMap的resultMap,它将查询结果映射为er类型的对象。

解决mybatis-plus自动配置的mapper.xml与java接口映射问题

解决mybatis-plus⾃动配置的mapper.xml与java接⼝映射问题⽬录mybatis-plus⾃动配置mapper.xml与java接⼝映射其中核⼼功能就是下⾯这个⽅法mybatis-plus3 配置mapper和xml映射关系原因就是mapper接⼝与xml映射⽂件没有配置成功mybatis-plus⾃动配置mapper.xml与java接⼝映射本来没有mybatis-plus的话,这个⼯作是通过mybatis-spring的MapperScan来完成的。

Mybatis-plus中的⾃动配置类MybatisPlusAutoConfiguration.class中有⼀个静态内部类MapperScannerRegistrarNotFoundConfiguration⽤于完成这个配置。

这个内部类导⼊了AutoConfiguredMapperScannerRegistrar.class配置类,其实这个配置类也是MybatisPlusAutoConfiguration的静态内部类。

其中核⼼功能就是下⾯这个⽅法通过ClassPathMapperScanner 来扫描包,⽤于完成映射,ClassPathMapperScanner 是mybatis-spring中的配置类ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);如果⽤Mybatis-plus的⾃动配置,那么所有的Dao接⼝必须要⽤Mapper.class注解,因为Mybatis-plus设置的就为Mapper.class最终会在scanner.registerFilters()这步操作中被添加到includeFilters中。

最终被扫描到的类与includeFilters匹配且不与excludeFilters匹配,最终才会筛选出保留的BeanDefinition. mybatis-plus3 配置mapper和xml映射关系遇见找不到⽅法原因就是mapper接⼝与xml映射⽂件没有配置成功mybatis-plus.mapper-locations=classpath:static/mybatis_mapper/*.xml以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

Mybatis中使用association及collection进行自关联示例(含XML版。。。

Mybatis中使⽤association及collection进⾏⾃关联⽰例(含XML版。

XML版本:实体类:@Data@ToString@NoArgsConstructorpublic class Dept {private Integer id;private String name;private List<Dept> children = new ArrayList<Dept>();private Dept parent;public Dept(Integer id) {this.id = id;}public Dept(String name) { = name;}public Dept(String name, Integer parentId) { = name;this.parent = new Dept(parentId);}public String toLazyString() {return "Dept:{id: " + this.id + " ; name: " + + "}";}}Mapper接⼝:public interface DeptMapper {public Dept selectById(Integer id);public int insertDept(Dept dept);public int updateDept(Dept dept);public int deleteDept(Dept dept);public List<Dept> selectByParentId(Integer parentId);}Mapper映射⽂件:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.sunwii.mybatis.mapper.DeptMapper"><resultMap type="Dept" id="DeptMap_basic"><id property="id" column="did"/><result property="name" column="name"/></resultMap><resultMap type="Dept" id="DeptMap" extends="DeptMap_basic"><!-- 多对⼀关联:使⽤select引⽤⽅式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Mybatis自关联映射
在实际项目开发中,遇到了要查询到整个权限的目录树需求。

刚开始,使用的是传统的sql方法,用left join的方式进行连接,得到整个三层目录,这样的方法十分繁琐,并且不好使用。

后来,通过网上查找资料,发现mybatis可以通过自身的关联映射,得到目录树。

以项目为例,为了方便,只设定id编号,父类编号,名称和子类列表。

Bean 文件如下:
Public class Priv{
private long id; //id编号
private long pid; //父类编号
private String name; //名称
private Priv parent;
private List<Priv> children;
public long getId(){
return id;
}
public void setId(long id){
this.id=id;
}
public long getPid(){
return pid;
}
public void setPid(long pid){
this.pid=pid;
}
public String getName(){
return name;
}
public void setName(String name){
=name;
}
public Priv getParent() {
return parent;
}
public void setParent(Priv parent) {
this.parent=parent;
}
public List<Priv> getChildren(){
return children;
}
public void setChildren(List<Priv> children){
this.children=children;
}
}
XML代码:
方式一:
<mapper namespace="mon.bean.priv.priv">
<resultMap type="Priv" id="privMap">
<id property="id" column="ID"/>
<result property="pid" column="PID"/>
<result property="name" column="NAME"/>
<!-- 查询父模块-->
<association property="parent" column="pid" select="getParentById" />
<!-- 查询子模块-->
<collection property="children" column="id" select="getChildren" /> </resultMap>
<select id="getParentById" parameterType="int" resultMap="privMap"> select * from 表
</select>
<select id="getChildren" parameterType="int" resultMap="privMap"> select * from表where pid = #{id}
</select>
</mapper>
方式二:
<mapper namespace="mon.bean.priv.priv">
<resultMap type="Priv" id="privMap">
<id property="id" column="ID"/>
<result property="pid" column="PID"/>
<result property="name" column="NAME"/>
</resultMap>
<resultMap id="privExMap" type="Priv" extends="privMap" >
<!-- 查询子模块-->
<collection property="children" column="{cid=id}" select="getChildren" /> </resultMap>
<select id="getParentById" parameterType="int" resultMap="privExMap"> select * from 表
</select>
<select id="getChildren" parameterType="int" resultMap="privMap"> select * from表where pid = #{cid}
</select>
</mapper>。

相关文档
最新文档