初识mybatis

Posted 打杂工程师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识mybatis相关的知识,希望对你有一定的参考价值。

    初次学习myBatis,以前就知道它和Hibernate差不多都是数据持久层的框架。之所以称之为框架,就是因为其将java工程和数据库的连接部分做了充分的封装。以至于我们不需要再去配置jdbc哪些比较底层的复杂的东西了。相反我们需要做的就是在java项目中简单的引用几个jar包,然后在xml配置文件中简单的配置一下就可以轻松的实现和数据库的连接了。
    接下来就详细的记录一下myBatis的使用:
    1.首先就是为创建myBatis项目搭建环境。我本人用的是eclipse和tomcat,数据库是mysql。所以我们需要创建一个简单的web工程项目,和一个数据库,然后在数据库中建立一个用户表。这几个步骤很简单,在这里我就不一一详述了。

    2.其次就是myBatis的配置。

   1).引入jar包

技术分享

  2).在src中创建实体包和实体类。

技术分享

  3).创建Mapper文件,该文件和数据库中或者项目中的实体都是对应的,每一个实体或者数据表都需要创建一个Mapper文件。

技术分享

    在userMapper中配置如下:

<span style="font-size:24px;"><?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">
<!-- 注释: parameterType:为参数类型;id:方法名;resultType:返回值类型; -->
<mapper namespace="myBatis_Demo.mapping.userMapper">
    <select id="getUser" parameterType="int" 
        resultType="myBatis_Demo.entity.User">
        select * from user where id=#{id}
    </select>
</mapper></span>

   4).在src中创建配置文件confi:

技术分享


然后配置数据库连接并且注入mybatis的mapper文件:

<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
    <mappers>
         <!-- 注册userMapper.xml文件, 
         userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->
         <mapper resource="myBatis_Demo/mapping/userMapper.xml"/>
     </mappers>
</configuration>


    不难看出,每当我们新建一个Mapper文件的时候都需要在这里注册一下。
   
        4).最后就是执行增删改查的一些操作了,在此仅提供了查询的方法,其他的方法于此并无差异。

<span style="font-size:24px;">package myBatis_Demo.test;
import java.io.IOException;
import java.io.InputStream;
import myBatis_Demo.entity.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class test1 {
	public static void main(String[] args) throws IOException {
        //mybatis的配置文件
        String resource = "conf.xml";
        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
        InputStream is = test1.class.getClassLoader().getResourceAsStream(resource);
        //构建sqlSession的工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
        //Reader reader = Resources.getResourceAsReader(resource); 
        //构建sqlSession的工厂
        //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //创建能执行映射文件中sql的sqlSession
        SqlSession session = sessionFactory.openSession();
        /**
         * 映射sql的标识字符串,
         * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
         * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
         */
        String statement = "myBatis_Demo.mapping.userMapper.getUser";//映射sql的标识字符串
        //执行查询返回一个唯一user对象的sql
        User user = session.selectOne(statement, 1);
        System.out.println(user);
        System.out.print("mybatis执行成功!!");
    }
}</span>


以上是通过实践来认识mybatis,不难看出这个东东是非常容易学习的,当然也有它自己的优缺点:

优点:
1、简单易学
       mybatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  
2、灵活
       mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
  
3、解除sql与程序代码的耦合
       通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
 
4、提供映射标签,支持对象与数据库的orm字段关系映射
  
5、提供对象关系映射标签,支持对象关系组建维护
 
6、提供xml标签,支持编写动态sql。
 
缺点:
 1. sql工作量很大,尤其是字段多、关联表多时,更是如此。

在之前的项目中有遇到过关联查询的情况,当时就是将B表中需要的字段信息都需要在A表的Mapper中注入。如果字段很多或者关联表比较多的话,这是非常糟糕的。
2. sql依赖于数据库,导致数据库移植性差。

在mapper中的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以及默认采用012索引位的方式)
12. 缓存使用不当,容易产生脏数据。

总结:mybatis是一个比较常用的技术,当然使用的情况也是局限的,我们只有对其优缺点有了足够的认识,才能使用的得心应手。





































































以上是关于初识mybatis的主要内容,如果未能解决你的问题,请参考以下文章

初识MyBatis

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识MyBatis

初识MyBatis

初识MyBatis