mybatis学习总结
来源:互联网 发布:win10网络连接红叉 编辑:程序博客网 时间:2024/06/15 15:55
mybatis是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架
为什么要使用mybatis框架?
直接以JDBC编程,将sql语句硬编码到了java代码中,如果sql语句修改,需要重新编译java代码,不利于系统的维护,mybatis将sql语句配置在xml文件中,更易于修改。这边顺便提下mybatis与hibernate的区别,hibernate是一个标准的ORM框架,sql语句自动生成,对sql语句优化、修改比较困难,适用于需求变化不多的中小型项目。mybatis专注于sql语句,对sql语句的优化、修改比较方便,是个不完全的ORM框架,适用于需求变化较多的项目。
mybatis-config.xml配置
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <environments default=""> <environment id=""> <transactionManager type=""></transactionManager> <dataSource type=""></dataSource> </environment> </environments> <!--配置全局属性--> <settings></settings> <!-- 配置别名 --> <typeAliases> <!-- 批量配置别名 --> <package name=""/> </typeAliases></configuration>
在mybatis与spring整合之后,与数据库的连接,事务管理等功能都交给了spring来管理,因此再上面就不再写具体的代码,全局属性的配置根据自己的需要来进行,ssm的整合写在另一篇文章 spring mvc学习的一点总结中,这边就不再赘述。
映射文件*.xml配置
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.sqy.ssm.dao.UserDao"> <select id="" parameterType="" resultType="" > SELECT * FROM USER WHERE id=#{id} </select> <insert id="" parameterType=""></insert> <delete id="" parameterType=""></delete> <update id="" parameterType=""></update></mapper>
namespace是命名空间,作用是对sql进行分类化管理。
-#{id}:id表示输入的参数,参数名称为id
parameterType:指定输入参数的类型
resultType:输出结果所映射的java对象类型。使用resultType进行输出映射,只有查询出来的列名与pojo中的属性名一致,该列才可以映射成功。
resultMap:如果查询出来的列名与pojo中的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系
1.定义resultMap
<!--type表示resultMap最终映射的java对象类型,可使用别名,id表示resultMap的唯一标识 --><resultMap type="" id=""> <!-- id表示查询结果集的唯一标识,column标识列名,type指定的pojo中的属性名--> <id column="" property=""/> <!-- result表示普通列的标识 --> <result column="" property=""/></resultMap>
2.使用resultMap作为输出映射类型
mybatis开发dao方法
原始dao开发:自写dao接口和dao实现类
mapper代理方法:只需要写mapper接口,mybatis可以自动生成mapper接口实现类代理对象
动态sql
动态sql是mybatis的核心,可以对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接和组装。
<!-- 定义sql片段,其他statement中可以引用sql片段 id:sql片段的唯一标识 --> <sql id="...">balabala代码</sql> <select id="findUserList" parameterType="com.sqy.po.UserQueryVo" resultType="com.sqy.po.UserCustom"> select * from user <!-- where可以自动去掉第一个and --> <where> <!-- 引用sql片段的id,如果refid指定的id不在本xml文件中,需加上namespace --> <include refid="..."></include> <if test="userCustom!=null"> <if test="userCustom.id!=null and userCustom.id!=''"> and user.id=#{userCustom.id} </if> <if test="userCustom.username!=null and userCustom.username!=''"> and user.username like '%${userCustom.username}%' </if> </if> <if test="ids!=null "> <!--使用foreach遍历传入ids collection指定输入对象中的集合属性 item_id指定每次遍历生成的对象名 open:开始遍历时拼接的串 close:结束遍历时拼接的串 separator遍历的两个对象中间拼接的串 --> <foreach collection="ids" item="item_id" open="and (" close=")" separator="or"> <!-- 每次遍历需要拼接的串 --> id=#{item_id} </foreach> </if> </where> </select>
延迟加载:先从单表查询,需要时再从关联表进行关联查询,大大提高数据库性能。association、collection具备延迟加载功能。在mybatis-config.xml中的全局配置参数中配置。
查询缓存:分为一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,在SqlSession对象中有一个HashMap的数据结构用于存储缓存数据。不同的SqlSession之间的缓存数据区域(HashMap)互不影响。二级缓存是mapper级别的缓存,多个SqlSession去操作同一个mapper的sql语句,多个SqlSession可以共用二级缓存 ,二级缓存是跨SqlSession的。
- Mybatis学习总结
- mybatis学习总结
- Mybatis学习总结
- mybatis学习总结
- Mybatis学习总结
- MyBatis学习总结一
- MyBatis学习总结(二)
- MyBatis的学习总结
- MyBatis学习总结
- MyBatis学习总结
- Mybatis学习与总结
- Mybatis学习总结
- Mybatis学习总结一
- Mybatis学习总结二
- Mybatis学习总结
- MyBatis学习总结
- Mybatis学习总结
- Mybatis学习总结二
- 例4.9 含有多个对象成员的派生类构造函数的执行顺序
- 数据库的集合操作
- spring
- OpenCMS学习笔记
- The SDK platform-tools version 23 is too old to check APIs compiled with API 24... ...
- mybatis学习总结
- 比特币改进协议BIP13(翻译)
- git 子模块以及 在 Jenkins中如何使用
- 进程虚拟地址空间
- linux中socket编程出现 connect: No route to host
- 我的第一篇博客的尝试
- 缘分,来过便已成诗
- sublime-text3打造markdown编辑器
- Android MVP模式实战练习之一步一步打造一款简易便笺app(一)