MyBatis面试系列-02

1. Mybatis 中如何解决实体类属性名和表字段名不一致问题?

方式一:通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。

<select id="selectOrder" parametertype="int" resultetype="com.jingxuan.Order">
	select order_id id, order_no orderno ,order_price price form orders where order_id=#{id};
</select>

方式二:通过来映射字段名和实体类属性名的一一对应的关系。

<select id="getOrder" parameterType="int" resultMap="orderresultmap">
	select * from orders where order_id=#{id}
</select>

<resultMap type="com.jingxuan.Order" id="orderresultmap">
	<!–用id属性来映射主键字段–>
	<id property="id" column="order_id">

	<!–用result属性来映射非主键字段,property为实体类属性名,column为数据表中的属性–>
	<result property = "orderno" column ="order_no"/>
	<result property="price" column="order_price" />
</reslutMap>

2. Mybatis 中如何获取自动生成的主键值?

方式一:对于支持自动生成主键的数据库,如Mysql、sqlServer,可以通过Mybatis元素useGeneratedKeys返回当前插入数据主键值到输入类中。

<insert id="insertJingXuan" useGeneratedKeys="true" keyProperty="id" 
 parameterType="com.jx.domain.IdentityUser">
        insert into identity_user(name)
        values(#{name,jdbcType=VARCHAR})
</insert>

方式二:对于不支持自动生成主键的数据库。Oracle、DB2等,可以用元素selectKey回当前插入数据主键值到输入类中。

<insert id="insertJingXuan" useGeneratedKeys="true" keyProperty="id" 
 parameterType="com.jx.domain.IdentityUser">
 <selectKey keyProperty="id" resultType="String" order="BEFORE">
        SELECT  REPLACE(UUID(),'-','')  
  </selectKey>
        insert into identity_user(name)
        values(#{name,jdbcType=VARCHAR})
</insert>

selectKey元素说明

keyProperty:selectKey语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。

keyColumn:匹配属性的返回结果集中的列名称。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。

resultType:结果的类型。MyBatis通常可以推算出来,但是为了更加确定写上也不会有什么问题。MyBatis允许任何简单类型用作主键的类型,包括字符串。如果希望作用于多个生成的列,则可以使用一个包含期望属性的Object或一个Map。

order:这可以被设置为BEFORE或AFTER。如果设置为BEFORE,那么它会首先选择主键,设置keyProperty然后执行插入语句。如果设置为AFTER,那么先执行插入语句,然后是selectKey元素-这和像Oracle的数据库相似,在插入语句内部可能有嵌入索引调用。

statementType:MyBatis支持STATEMENT,PREPARED和CALLABLE语句的映射类型,分别代表PreparedStatement和CallableStatement类型。

3. 什么是 MyBatis 接口绑定?有哪些实现方式?

接口绑定是指在MyBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置。

接口绑定有两种实现方式:

一种是通过注解绑定,就是在接口的方法上面加上@Select、@Update等注解,里面包含Sql语句来绑定;

另外一种就是通过xml里面写SQL来绑定,在这种情况下,要指定xml映射文件里面的namespace必须为接口的全路径名。当Sql语句比较简单时

相关推荐

  1. MyBatis面试系列-02

    2024-03-21 04:00:02       41 阅读
  2. MyBatis面试系列-01

    2024-03-21 04:00:02       40 阅读
  3. Mybatis面试系列

    2024-03-21 04:00:02       32 阅读
  4. Mybatis面试系列

    2024-03-21 04:00:02       35 阅读
  5. JVM面试系列-02

    2024-03-21 04:00:02       50 阅读
  6. MySQL面试系列-02

    2024-03-21 04:00:02       54 阅读
  7. Redis面试系列-02

    2024-03-21 04:00:02       51 阅读
  8. MongoDB面试系列-02

    2024-03-21 04:00:02       54 阅读
  9. Linux面试系列-02

    2024-03-21 04:00:02       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-21 04:00:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-21 04:00:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-21 04:00:02       87 阅读
  4. Python语言-面向对象

    2024-03-21 04:00:02       96 阅读

热门阅读

  1. 【无标题】

    2024-03-21 04:00:02       41 阅读
  2. QT 异常处理

    2024-03-21 04:00:02       39 阅读
  3. 【SpringBoot】优雅实现超大文件上传

    2024-03-21 04:00:02       36 阅读
  4. 【代码问题】mmcv+mmseg版本升级报错

    2024-03-21 04:00:02       44 阅读