mybatis复习(二)

简介  

  mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql语句本身,

  而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。

MyBatis工作原理

1.读取配置文件,配置文件配置的是数据库连接的信息
2.加载映射文件(Mapper) 文件里面配置了sql语句
3.构建会话工厂
4.构造会话对象 由会话工厂创建SqlSession对象,该对象包含了执行SQL的所有方法
5.根据sqlSession创建dao(指的是查询的一个接口)接口的代理对像  通过代理对象执行(自己定义的)增删改查方法

xml方式 映射文件中的属性和sql注入问题

--resultType 属性:   用于指定结果集的类型。
--parameterType 属性  用于指定传入参数的类型。如果为我们要传入的是一个类的对象,所以类型就写类的全
名称。 
--如果插入数据时某个字段自增 可以使用keyProperty接收主键返回值,id指的是自增字段
keyProperty="id" useGeneratedKeys="true" 设置主键自僧
模糊查询时 不直接在sql语句中使用% 而是在方法中拼接%
--sql 语句中使用#{}字符:   它代表占位符,相当于原来
 jdbc 部分所学的,都是用于执行语句时替换实际的数
据。    具体的数据是由#{}里面的内容决定的。
#{}中内容的写法:   由于数据类型是基本类型,所以此处可以随意写。  
--sql语句拼接时不建议使用${} 会引起sql注入, 建议使用  #{} 表示一个占位符号 
例如 :模糊查询 select * from user where username like '%${value}%'
正确写法 select * from user where username like concat( '%' ,#{value} ,'%') 使用concat()函数拼接

开启注解 不再写xml

使用注解 不再使用resource而使用class
配置文件
<mappers>
    <mapper class="dao.IUserDao"/>
</mappers>

Mybatis 与 JDBC 编程的比较 

 1.数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。 解决: 在 SqlMapConfig.xml 中配置数据链接池,使用连接池管理数据库链接。 

2.Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。 解决: 将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。

3.向sql语句传参数麻烦,因为sql语句的where 条件不一定,可能多也可能少,占位符需要和参数对应。 解决: Mybatis自动将 java 对象映射至 sql 语句,通过 statement 中的 parameterType 定义输入参数的 类型。

4.对结果集解析麻烦,sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成 pojo 对 象解析比较方便。 解决: Mybatis自动将 sql执行结果映射至 java 对象,通过statement中的resultType 定义输出结果的 类型

猜你喜欢

转载自www.cnblogs.com/july7/p/13210909.html