一、MyBatis引言

  1、基本概念

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。MyBatis是一个持久层框架,完成是对数据库的访问和操作。

  2、优点

    解决了JDBC访问数据库过程中存在的问题,他是对原有JDBC技术的封装。

    a、大量的代码冗余。

    b、手工处理ORM。

    c、没有对访问数据进行优化(没有cache)。

二、一个简单的Mybatis程序  

  1、环境搭建

    a、导入核心jar包,导入第三方依赖jar包,导入对应数据库的驱动jar包。

    b、引入配置文件

      (1)log4j.properties(日志配置文件)放置在src根下

      (2)mybatis-config.xml位置随意。

      (3)mapper文件(实现DAO接口)位置随意。

    c、初始化配置

      mybatis-config.xml的文件配置

    主要分为两大部分:1、数据库连接的相关参数。2、Mapper文件的注册。

    ps、别名typeAlias

    在配置文件中设置别名之后,在mapper文件中会舒服很多。

  2、MyBatis核心API

    a、Resource

      作用:读取MyBatis相关配置文件,打开IO。

      建议:因为频繁打开IO会很占用资源,所以建议一次性通过IO读取所有需要的数据。

    b、SqlSessionFactory

      作用:通过SqlSessionFactory这个工厂创建SqlSession。

      特点:该类是一个重量级资源,并且线程安全,应该保证每一个应用只创建一个。

    c、SqlSession

      作用:(1)根据程序员写的mapper文件,自动创建mapper文件所对应的java类(DAO接口的实现类)

         (2)SqlSession内部封装Connection对象(一一对应的关系)。

           (3)SqlSession控制事务。

  3、Mybatis开发步骤

    a、创建表table。

    b、创建对应的实体类entity。

    d、创建DAO接口。

    e、配置Mapper文件做DAO层的实现。

<mapper namespace="xxxx.mybatis.UserDao">
    <select id="queryUserById" parameterType="int" resultType="xxxx.mybatis.User">
        select id,name,password,birthday
        from t_user
        where id = #{id}
    </select>
</mapper>

    ps、namespace="xxxx.mybatis.UserDao"----->要实现的DAO接口的全限定名。

       id="queryUserById"----->DAO接口中要实现的方法名。

       parameterType="int"----->方法参数类型(可省略)。

       resultType="xxxx.mybatis.User"----->sql语句所查询结果所对应的entity类。

      #{id}----->方法传递的参数。

    f、mapper文件的注册(在mybatis-config.xml配置)

<mappers>
    <mapper resource="xxxx/mybatis/resources/UserDaoMapper.xml">
</mappers>

    ps、resource="xxxxxx"------->mapper文件的路径。

    g、通过API运行mybatis

//1、通过Resource读取MyBatis的配置文件(路径要写对)
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//2、创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//3、创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//4、通过sqlSession获取DAO的实现类
UserDao userDao = sqlSession.getMapper(UserDao.class);
//5、编码
User user = userDao.queryUserById(1);

三、单表操作的Mapper文件配置问题

  1、集合类型的返回值(如List<User>)

<select id="queryAllUsers" resultType="xxxx.mybaits.User">
    select * from t_user
</select>

//resultType属性设置为集合中的元素类型即可

  2、参数绑定 

    当DAO方法中只存在一个参数时,在mapper文件#{}中填写任意内容都可以识别。

    当DAO方法中存在多个参数时,有以下两种解决方案:

    a、以起始自0的下标#{0}#{1}#{2}来区分

      java类:

public interface UserDao{

    public User queryUser(String name,String password);

}

      mapper文件:

<mapper namespace="xxxxx.UserDao">

    <select id="queryUser" resultType="User">
        select * from t_user where name =#{0} and password = #{1}
    </select>

</mapper>

      这样书写,mybatis便会顺序识别,自动将name跟#{0}匹配,password跟#{1}匹配。

    b、通过注解来进行绑定(推荐)

      java类:

public interface UserDao{

    public User queryUser(@Param("name")String name,@Param("password")String password);

}

      mapper文件:

<mapper namespace="xxxxx.UserDao">

    <select id="queryUser" resultType="User">
        select * from t_user where name =#{name} and password = #{password}
    </select>

</mapper>

      这种写法类似于给参数起了一个名字,在mapper文件里直接通过所起的名字来对应。这种方法更加灵活。   

        

浅谈Mybatis(一)的更多相关文章

  1. 浅谈mybatis中的#和$的区别

    1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111&qu ...

  2. 浅谈Mybatis(三)

    一.动态SQL 1.sql片段 解决sql语句的冗余代码问题. <sql id="SELECT_T_USER"> select id,name,password,bir ...

  3. 浅谈 Mybatis中的 ${ } 和 #{ }的区别

    好了,真正做开发也差不多一年了.一直都是看别人的博客,自己懒得写,而且也不会写博客,今天就开始慢慢的练习一下写博客吧.前段时间刚好在公司遇到这样的问题. 一.举例说明 select * from us ...

  4. 浅谈mybatis如何半自动化解耦

    在JAVA发展过程中,涌现出一系列的ORM框架,JPA,Hibernate,Mybatis和Spring jdbc,本系列,将来研究Mybatis. 通过研究mybatis源码,可将mybatis的大 ...

  5. 浅谈Mybatis连接原理

    众所周知数据库连接的过程,但是最近面试的人(菜面菜),都说用的SSM框架,但是我问了一下,mybatis是怎么连接上mysql的,基本上都会说:配置好的,直接用了,今天我来抛砖引玉一下,欢迎拍砖! 什 ...

  6. 浅谈MyBatis缓存

    在谈论MyBatis的缓存之前,我们先说说它的延迟加载,所谓延迟加载, resultMap中的association和collection标签具有延迟加载的功能.延迟加载的意思是说,在关联查询时,利用 ...

  7. 浅谈Mybatis通用Mapper使用方法_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 对单表进行增删改查是项目中不可避免的需求,Mybatis的通用Mapper插件使这些操作变得简单 添加maven依赖 在 ...

  8. 浅谈mybatis如何半自动化解耦和ORM实现

    在JAVA发展过程中,涌现出一系列的ORM框架,JPA,Hibernate,Mybatis和Spring jdbc,本系列,将来研究Mybatis. 通过研究mybatis源码,可将mybatis的大 ...

  9. 浅谈Mybatis持久化框架在Spring、SSM、SpringBoot整合的演进及简化过程

    前言 最近开始了SpringBoot相关知识的学习,作为为目前比较流行.用的比较广的Spring框架,是每一个Java学习者及从业者都会接触到一个知识点.作为Spring框架项目,肯定少不了与数据库持 ...

随机推荐

  1. VS2010中经常使用的快捷键

    1. 格式化对齐:Ctrl+K+F 2. 智能感知:Ctrl+J: 3. 智能感知显示參数信息:Ctrl+Shift+空格: 4. 检查括号匹配(在左右括号间切换): Ctrl +] 5. 选中从光标 ...

  2. Math.round(11.5)等于()Math.round(-11.5)等于()

    几天前去面试,这道简单的题目居然做错了,看来基础就是慢慢积累的.并不断使用和复习才会成为高手,假设基础不是那么熟练.恐怕在成为高手的路上会困难重重.所以在做项目的间歇时间.偶尔回顾一下最基础的知识.是 ...

  3. iSCSI存储系统知识

    一.概述 SCSI 即小型计算机系统接口(Small Computer System Interface:简写:SCSI),一种用于计算机和外部设备之间(硬盘.光驱.软驱.打印机等)系统级接口的独立处 ...

  4. ContextMenuStrip 添加在窗体。点击右键不能显示问题解答

    ContextMenuStrip控件,系统默认为点击菜单,使用时.需要与你的窗体绑定.如图所示,,form窗体上包括一个contextMenustrip信息.默认状态是无.所以在使用contextMe ...

  5. 关于if (!cin)以及while (cin >> word)

    首先注意: 1.每一个输入(输出)对象就代表一个输入(输出)流: 2.输入(输出)对象中的流状态成员标记了输入(输出)流当前的状况,当eofbit.badbit.failbit三个标记位均为0时表示流 ...

  6. Java 中 静态方法与非静态方法的区别

    静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方 ...

  7. 【转载】VS2010+VMWare8+VisualDDK1.5.6 创建并调试驱动程序 - 完全教程

    原帖:http://techird.blog.163.com/blog/static/1215640362011112385241568/ 本文描述了如何使用Visual Studio+VMMare+ ...

  8. Python进阶之map()、reduce()、filter()

    map()函数 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB",&q ...

  9. Linux网络管理——DNS作用

    1. 网络基础 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB",&q ...

  10. Grunt之学习历程(转自网上资源-整理自用)

    认识Grunt Grunt中文文档 安装Node环境 CNode 配置Grunt Grunt中文文档-配置任务 什么是package.json package.json中文文档 关于Grunt资料 应 ...