`

mybatis入门

 
阅读更多
一、 介绍

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java POJOsPlain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

二、 环境搭建

mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。

下载:http://mybatis.github.io/

1. 新建web工程

New  -  dynamic web project  - mybatis

2. 添加mybatis   jar

添加mybatis包和mysql数据jar

3. 配置mybatis配置文件

classpath下新建:Configuration.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">

 

节点介绍

properties —— 定义配置外在化

settings —— 一些全局性的配置

typeAliases ——定义类别名,简化xml文件的配置

typeHandlers —— 定义类型处理,也就是定义java类型与数据库中的数据类型之间的转换关系

objectFactory

plugins —— Mybatis的插件,插件可以修改Mybatis内部的运行规则

environments —— 配置Mybatis的环境 

environment 

transactionManager —— 事务管理器

事务:JDBC/MANAGER

 

 

dataSource —— 数据源

TYPE: POOLED|UNPOOLED|JNDI

POOL:

UNPOOLED:

JNDI:

 

databaseIdProvider

mappers —— 指定映射文件或映射类配置映射文件

  <mappers>

<mapper>映射文件的路径</mapper>

< /mappers>

 

4. 配置映射文件

在映射的类路径下:

New 类名-Mapper.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:类的全限定名

cache – 配置给定模式的缓存

cache-ref – 从别的模式中引用一个缓存

resultMap – 这是最复杂而却强大的一个元素了,它描述如何从结果集中加载对象

sql – 一个可以被其他语句复用的SQL 

insert – 映射INSERT 语句

update – 映射UPDATE 语句

delete – 映射DELEETE 语句

select  -  映射SELECT语句

三、 实现CUDR

简单的增删改查

 

<insert id=add parameterType=UserEntity>

INSET INTO 表名 (字段1,字段2)values(

#{1},#{2})

</insert>

 

<update id=update parameterType=UserEntity>

UPDATE 表名 SET 字段名1#{1},字段名2#{2}

WHERE id=#{}

</update>

<delete id=delete parameterType=int>

DELETE FROM 表名 WHERE id=#{id}

</delete>

<select  id=queryall resultType="UserEntity">

SELECT 要查询的字段名 FROM 表名

</selet>

四、 关联数据查询

 

五、 动态SQL语句

1. selectKey

2. if

3. if+where

4. if+set

5. if+trim

6. trim代替set

7. choose(when/otherwise)

8. foreach

 

 

六、 代码生成工具

七、 数据分页

<select id=page  resultType=UserEntity  paramterType=params>

SELECT 要查询的字段 FROM 表名 LIMIT #{pageNo},${pageSize}

</select>

Params:必须是maps

八、 cache缓存

MyBatis 包含一个强在的、可配置、可定制的缓存机制。MyBatis 3 的缓存实现有了许多改进,既强劲也更容易配置。默认的情况,缓存是没有开启,除了会话缓存以外,它可以提高性能,且能解决全局依赖。开启二级缓存,你只需要在SQL 映射文件中加入简单的一行:<cache/>

 

这句简单的语句的作用如下:

1. 所有在映射文件里的select 语句都将被缓存。

2. 所有在映射文件里insert,update delete 语句会清空缓存。

3. 缓存使用“最近很少使用”算法来回收

4. 缓存不会被设定的时间所清空。

5. 每个缓存可以存储1024 个列表或对象的引用(不管查询出来的结果是什么)。

6. 缓存将作为“读/写”缓存,意味着获取的对象不是共享的且对调用者是安全的。不会有其它的调用

7. 者或线程潜在修改。

九、 集成Spring

十、 MyBaties的优点与缺点

优点:

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. 使用不当,容易导致N+1的sql性能问题。

10. 使用不当,关联查询时容易产生分页bug。

11. 若不查询主键字段,容易造成查询出的对象有“覆盖”现象。

12. 参数的数据类型支持不完善。(如参数为Date类型时,容易报没有get、set方法,需在参数上加@param)

13. 多参数时,使用不方便,功能不够强大。(目前支持的方法有map、对象、注解@param以及默认采用012索引位的方式)

14. 缓存使用不当,容易产生脏数据。

 

总结:

mybatis 的优点其实也是mybatis的缺点,正因为mybatis使用简单,数据的可靠性、完整性的瓶颈便更多依赖于程序员对sql的使用水平上了。sql写在 xml里,虽然方便了修改、优化和统一浏览,但可读性很低,调试也非常困难,也非常受限,无法像jdbc那样在代码里根据逻辑实现复杂动态sql拼接。 mybatis简单看就是提供了字段映射和对象关系映射的jdbc,省去了数据赋值到对象的步骤而已,除此以外并无太多作为,不要把它想象成 hibernate那样强大,简单小巧易用上手,方便浏览修改sql就是它最大的优点了。

mybatis 适用于小型且程序员能力较低的项目和人群使用,对于中大型项目来说我并不推荐使用,如果觉得hibernate效率低的话(实际上也是使用不当所 致,hibernate是实际上是不适用于拥有高负载的工程项目),还不如直接用spring提供的jdbc简单框架(Template),同样支持对象 映射。

十一、 SqlSessionFactory

测试:Reader reader = Resources.getResourceAsReader("Configuration.xml");

SqlSessionFactory factory= new SqlSessionFactoryBuilder().build(reader);

示例:

返回一个集合:

Factory.openSesion.select(com.lsw.mybatis.entity.UserEntity.queryAll);

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics