2.平凡之路-初识MyBatis

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。[来自官方文档]

1.MyBatis的优点和缺点

  • 优点
    1. 易于上手和掌握。
    2. sql写在xml里,便于统一管理和优化。
    3. 解除sql与程序代码的耦合。
    4. 提供映射标签,支持对象与数据库的ORM字段关系映射
    5. 提供对象关系映射标签,支持对象关系组建维护
    6. 提供xml标签,支持编写动态sql。
  • 缺点
    1. sql工作量很大,尤其是字段多、关联表多时,更是如此。
    2. sql依赖于数据库,导致数据库移植性差。
    3. 由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。[重点注意]
    4. 字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。(比如配置了一对多Collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即Collection的对象为null)
    5. DAO层过于简单,对象组装的工作量较大。
    6. 不支持级联更新、级联删除。
    7. 编写动态sql时,不方便调试,尤其逻辑复杂时。
    8. 提供的写动态sql的xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。
    9. 若不查询主键字段,容易造成查询出的对象有“覆盖”现象。
    10. 参数的数据类型支持不完善。(如参数为Date类型时,容易报没有get、set方法,需在参数上加@param)
    11. 多参数时,使用不方便,功能不够强大。(目前支持的方法有map、对象、注解@param)
    12. 缓存使用不当,容易产生脏数据。二级缓存机制不佳,需要使用第三方的缓存框架。

2.MyBatis安装

首先我们需要声明一下iBatis和MyBatis都是一个组织开发,只是版本不相同而已,就想我们学习的Java的版本命名规则类似,实际上MyBatis就是iBatis的一个大版本号的提升。
下载地址:https://github.com/mybatis/mybatis-3/releases
官方文档:http://www.mybatis.org/mybatis-3/

MyBatis解压目录说明

3.MyBatis的环境搭建

(1) 新建Java项目

新建Java项目
  • 新建lib文件夹,导入mybatis-3.4.2.jar的框架核心包和MySQL的数据库驱动包
  • 选中两个Jar包,右键选择Bulid Path

(2) 新建MyBatis核心配置文件

个人建议将核心配置文件建立在mybatis-config.xml文件

  • 新建核心xml文件
    需要设置文档类型
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

</configuration>
  • 配置数据源
    <!-- 配置数据库环境 -->
    <environments default="development">
        <environment id="development">
            <!-- 事务管理器:保证数据的完整性和一致性 -->
            <!-- 框架:默认情况下CUD操作需要手动提交事务 -->
            <transactionManager type="JDBC" />
            <!-- 使用的是连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/cy42_mss" />
                <property name="username" value="root" />
                <property name="password" value="shxt" />
            </dataSource>
        </environment>
    </environments>

百度Java如何实行连接池的原理?

  • 配置加载映射文件
    <mappers>
        <mapper resource="com/shxt/model/ShxtMapper.xml"/>
    </mappers>
  • 附录


    完整代码

(3) 新建MyBatis映射文件

  • 位置建立: com/shxt/model/ShxtMapper.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="命名空间,唯一的不能重复"> -->
<mapper namespace="shxt.cy42.mss">
  
</mapper>

目前我们使用的传统模式,那么namespace一般建议使用持久化类的全路径com.shxt.model.User这样的字符串保持一致,方便后面代码处理.
但是,我们现在没有持久化类,所以就是设置了一个简单的字符串

  • 定制SQL语句,简单测试
<!-- 定制SQL语句 -->
  <insert id="add01">
    INSERT INTO skill  (skill_name,num) VALUES ('JS',75)
  </insert>
  • 附录


    映射文件代码

(4) 测试代码

public class API的调用过程演示 {
    public static void main( String[] args ) {
        //读取核心配置文件的位置
        //InputStream is = Resources.getResourceAsStream("com/shxt/model/mybatis-config.xml");
        SqlSession sqlSession = null;
        try {
            //1.读取核心配置文件
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //2.创建SqlSession工厂
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            //3.获取SqlSession 
            //****** SqlSession完成所有的持久化操作CRUD
            sqlSession = sqlSessionFactory.openSession();
            //4.关键步骤: 定位执行SQL语句 重点重点重点
            //****如何定位  (namespace+"."+id)
            int row = sqlSession.insert("shxt.cy42.mss.add01");
            //5.针对于CUD操作需要手动提交事务
            sqlSession.commit();
            System.out.println("影响的行数:"+row);
        } catch (IOException ex) {
            ex.printStackTrace();
        }finally {
            //6.关闭资源
            if(sqlSession!=null){
                sqlSession.close();
            }
        }
    }

}
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容