&小辰

导航

 

mybatis

 

首先,mybatis是一个半自动的ORM映射框架,最大的好处就是 sql语句是由自己来编写,mybatis内部封装了JDBC,让程序员只需要关注sql语句的编写,

但是如果sql语句过于复杂,沉重,对程序员来说是很头疼的,而且,sql语句依赖于数据库,导致数据库不能随便更换。

 

1.0  实体类中的字段与数据库中的字段不匹配时,需要在xml映射文件中 使用 <resultMap>  将实体类与数据库中字段匹配。这里我用之前自己的代码

 1 <resultMap id="baseResultMap" type="com.itheima.domain.company.Company">
 2         <id column="id" property="id"/>
 3         <result column="name" property="name"/>
 4         <result column="expiration_date" property="expirationDate"/>
 5         <result column="address" property="address"/>
 6         <result column="license_id" property="licenseId"/>
 7         <result column="representative" property="representative"/>
 8         <result column="phone" property="phone"/>
 9         <result column="company_size" property="companySize"/>
10         <result column="industry" property="industry"/>
11         <result column="remarks" property="remarks"/>
12         <result column="state" property="state"/>
13         <result column="balance" property="balance"/>
14         <result column="city" property="city"/>
15 
16     </resultMap>

 

2.0 mybatis怎么获取新增数据的主键值。

    如果mybatis使用的是自增策略,所以当使用insert方法新增数据时,主键值也生成了,并且添加到这个对象中了,所以只需要获取这个对象就可以通过 .get()方法得到主键值。

 

3.0  mybatis中 #{ }   与 ${ } 的区别。

     #{ }  这个可以防止sql注入。进行预编译处理, 这里作为通配符来使用,在处理#{ } mybatis会将sql语句中的#{ } 替换成?,然后通过PreparedStatement的 .set方法来赋值。

insert into ss_company(
id,name,expiration_date,address,license_id,representative,phone,company_size,industry,remarks,state,balance,city
)
values(
#{id},#{name},#{expirationDate},#{address},#{licenseId},#{representative},#{phone},#{companySize},#{industry},#{remarks},#{state},#{balance},#{city}

)

 

     ${ } 这个属于字符串替换,这个不可以防止sql注入。 在处理${ }  mybatis会替换为变量值。

一般情况下,使用 #{ }。

 

4.0 mybatis中模糊查询。

  1  使用 #{ },可以防sql注入

  2 使用${ } 不能防止sql注入

 

5.0 mybatis的流程

    1 sqlsessionfactorybuild 

     2 sqlsessionfactory

     3 sqlsession  

       通过sessionfactory创建sqlsession,然后通过sql语句执行数据库的操作, 提交对应的事务,最后.close 关闭sqlsession。

 

6.0 mybatis的分页

     

      Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

      分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,添加分页的参数数据。


7.0 mapper映射中传递多个参数

   1  使用@Param注解 

List<ContractProductVo> findByshiptime(@Param("inputDate") String inputDate,@Param("companyId") String companyId);

   2   在xml文件中使用 #{0}   #{1}  ,按顺序对应的参数

<select id="selectUser"resultMap="BaseResultMap">  
    select *  fromuser_user_t   whereuser_name = #{0} anduser_area=#{1}  
</select>  

 

posted on 2020-04-17 17:08  &小辰  阅读(17)  评论(0)    收藏  举报