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>
浙公网安备 33010602011771号