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语句比较简单时

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦睡了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值