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 协议 ,转载请注明出处!