浅谈Mybatis(一)

一、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文件里直接通过所起的名字来对应。这种方法更加灵活。   

        

时间: 2024-10-11 10:39:20

浅谈Mybatis(一)的相关文章

浅谈mybatis中的#和$的区别

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中.如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为ord

浅谈Mybatis(三)

一.动态SQL 1.sql片段 解决sql语句的冗余代码问题. <sql id="SELECT_T_USER"> select id,name,password,birthday </sql> <select id="queryUserById" resultType="User"> <include refid="SELECT_T_USER"/> from t_user whe

浅谈MyBatis缓存

在谈论MyBatis的缓存之前,我们先说说它的延迟加载,所谓延迟加载, resultMap中的association和collection标签具有延迟加载的功能.延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息. 设置延迟加载 需要在SqlMapConfig.xml文件中,在<settings>标签中设置下延迟加载. lazyLoadingEnabled.aggressiveLazyLoading 什么是查询缓存 Mybatis的一级缓存是指SqlS

浅谈MyBatis 标签

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. 以上是MyBatis的一个概括:一下列出MyBatis常用标签 <insert> 负责MyBatis添加操作,默认返回影响行数 <delete> 负责MyBatis删除操作,默认返回影响行数 <update> 负责MyBatis修改操作,默

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

一.举例说明 1 select * from user where name = "dato"; 2 3 select * from user where name = #{name}; 4 5 select * from user where name = ${name}; 一般情况下,我们都不会注意到这里面有什么不一样的地方.因为这些sql都可以达到我们的目的,去查询名字叫dato的用户. 二.区别 动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一

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

在JAVA发展过程中,涌现出一系列的ORM框架,JPA,Hibernate,Mybatis和Spring jdbc,本系列,将来研究Mybatis. 通过研究mybatis源码,可将mybatis的大致架构总结为下图: 1.根据Mybatis源码,将其抽象为三层:基础支持层,核心处理层和接口层 2.基础支持层包括:数据源.事务管理.日志.类型转换.缓存.Bind.解析器等 3.核心处理层包括:配置解析.配置映射.SQL解析.SQL执行.结果集映射.插件等 4.接口层主要提供JAVA API 在本

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

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 对单表进行增删改查是项目中不可避免的需求,Mybatis的通用Mapper插件使这些操作变得简单 添加maven依赖 在对应工程的pom.xml文件中添加 <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1

浅谈Mybatis(二)

一.resultMap 作用:发现数据库的查询结果与实体之间不匹配时,需要通过ResultMap来进行映射处理.常用于多表查询. 多表查询还是比较复杂的,因为可能的情况很多.这里只说两种情况: 1.1:1双项关系(关系属性为对象类型) 实体示例图: 配置文件做resultMap关系映射示例图: 解释: <resultMap>节点中的id属性------>用于下方的<select>节点的resultMap属性的设置. <result>节点的property属性---

浅谈游戏开发中碰撞检测

原创整理不易,转载请注明出处:使用Memcached.Spring AOP构建数据库前端缓存框架 代码下载地址:http://www.zuidaima.com/share/1781569917635584.htm 数 据库访问可能是很多网站的瓶颈.动不动就连接池耗尽.内存溢出等.前面已经讲到如果我们的网站是一个分布式的大型站点,那么使用memcached实现数 据库的前端缓存是个很不错的选择:但如果网站本身足够小只有一个服务器,甚至是vps的那种,不推荐使用memcached,使用Hiberna