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