您的位置:首页 > 其它

初识mybatis

2016-03-29 20:11 246 查看
    初次学习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是一个比较常用的技术,当然使用的情况也是局限的,我们只有对其优缺点有了足够的认识,才能使用的得心应手。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: