MyBatis小结
mybatis
1. 三层架构
- 界面层(视图层):完成和用户的交互,接受请求,显示请求的处理结果
- 业务逻辑层:计算数据,处理业务逻辑
- 数据访问层(持久层):数据库操作
2. 框架
- 界面层:SpringMVC
- 业务逻辑层:Spring
- 数据访问层:MyBatis
3. mybatis
作用:增强的jdbc,访问数据库,执行增删改查
基本步骤
加入maven的依赖
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency>
创建Dao接口:定义了操作数据的方法
创建mapper文件,也叫做sql映射文件:写sql语句的,和接口中方法对应的sql语句
创建mybatis的一个主配置文件:1)连接数据库;2)指定mapper文件的位置
使用mybatis的对象SqlSession,通过其方法执行sql语句
使用mybatis的动态代理
什么是动态代理:mybatis帮你创建dao接口的实现类,在实现类中调用SqlSession的方法执行 sql语句
使用动态代理方式
- 获取SqlSession对象,
SqlSessionFactory.openSession()
- 使用getMapper方法获取某个接口的对象,
sqlSession.getMapper(接口.class)
- 使用dao接口的方法,调用方法就执行了mapper文件中的sql语句
- 获取SqlSession对象,
使用动态代理方式的要求
- dao接口和mapper文件放在一起,同一个目录
- dao接口和mapper文件名称一致
- mapper文件中的
namespace
的值是dao接口的全限定名称 - mapper文件中的
<select>
,<insert>
,<update>
,<delete>
等的id是接口中方法名称 - dao接口中不要使用重载方法,不要使用同名的,不同参数的方法。
理解参数
从java代码中把实际的值传入到mapper文件中
- 一个简单类型的参数:
#{任意字符}
- 多个简单类型的参数:使用
@Param("自定义名称")
- 使用一个java对象,对象的属性值作为mapper文件中的参数,
#{java对象的属性名称}
- 使用参数的位置,语法
#{arg0}, #{arg1}
,mybatis3.4之前的版本,使用的是#{0}, #{1}
- 使用Map作为参数,
#{map的key}
- 一个简单类型的参数:
#
和$
的区别#
是占位符,表示列值的,放在等号右侧$
占位符,表示字符串的连接,把sql语句连接成一个字符串#
占位符使用的jdbc指定PreparedStatement
对象执行SQL语句,销路好,没有sql注入的风险$
使用的是Statement
对象执行sql,效率低,有sql注入的风险
mybatis返回结果
resultType
:表示sql语句的执行结果,转为的java对象的类型- 类型的全限定名称
- 别名:在mybatis主配置文件定义别名
- 使用
<typeAlias>
- 使用
<package name='包名' />
:类名就是别名
- 使用
resultMap
:自定义类名和java对象的属性名对应关系- 列名和属性名不一样的解决方式
- 使用列名
- 使用resultMap
like
:- 在java代码中指定
like
的内容 - 在mapper中拼接
like
- 在java代码中指定
动态sql:根据条件,能够得到不同的sql语句,使用mybatis的标签,例如if,where,foreach等
if
:判断条件的,条件为true,就会把if之间的sql加入到主sql之后where
:<where>
标签里面是多个if,如果有一个if判断为true,会在sql的后面加入where关键字,会去掉无用的and,or等字符foreach
:循环数组,list集合<foreach collection="" item="" open="" close="" separator=""> #{xxx} </foreach> collection:表示接口中的方法参数的类型,如果是数组使用array,如果是list集合使用list item:自定义的,表示数组和集合成员的变量 open:循环开始时的字符 close:循环结束时的字符 separator:集合成员之间的分隔符
sql代码片段:复用部分sql语句
- 先定义
<sql id="自定义名称唯一">sql语句,表名,字段等</sql>
- 再使用,
<include refid="id的值"/>
- 先定义
mybatis主配置文件
数据库属性配置文件的使用
- 在resources目录中定义一个属性配置文件,
xxx.properties
,例如,jdbc.properties
。在属性配置文件中,定义数据,格式是key=value
,key一般使用.
做多级目录的 - 在mybatis的主配置文件,使用
<property>
指定文件的位置,在需要使用值的地方,${key}
- 在resources目录中定义一个属性配置文件,
mapper文件的位置
<!--第二种方式:使用包名 name:xml文件(mapper文件)所在的包名,这个包中所有xml文件一次都能加载给mybatis 使用package的要求: 1. mapper文件名称需要和接口名称一样,区分大小写也一样 2. mapper文件和dao接口需要再同一目录 --> <package name="com.bjpowernode.dao"/>
PageHelper
:分页功能:实现多种数据库的分页,mysql就是代替limit语句的
使用步骤:
加入maven依赖
<!--PageHelper依赖--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.10</version> </dependency>
在mybatis主配置文件,加入plugin
<!--配置插件--> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor" /> </plugins>
在查询方式之前,加入PageHelper方法调。
// 加入PageHelper的方法,分页 // pageNum:第几页,从1开始 // pageSize:一页中有多少行数据 PageHelper.startPage(1, 3);
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!