Mybatis是什么以及Mybatis和JDBC的关系?

Mybatis是什么以及Mybatis和JDBC的关系?,第1张

Mybatis是什么

mybatis是一个持久层ORM框架。它内部封装了jdbc,使得开发更简洁,更高效。

MyBatis可以通过xml或注解完成ORM映射关系配置。

Mybatis和JDBC的关系

JDBC是Java提供的一个 *** 作数据库的API; MyBatis是一个持久层ORM框架,底层是对JDBC的封装。

MyBatis对JDBC *** 作数据库做了一系列的优化:

(1) mybatis使用已有的连接池管理,避免浪费资源,提高程序可靠性。

(2) mybatis提供插件自动生成DAO层代码,提高编码效率和准确性。

(3)mybatis 提供了一级和二级缓存,提高了程序性能。

(4) mybatis使用动态SQL语句,提高了SQL维护。(此优势是基于XML配置)

(5) mybatis对数据库 *** 作结果进行自动映射

MyBatis的优点和缺点

优点:

简单:易于学习,易于使用,通过文档和源代du码,可以比较完全zhi的掌握它的设计思路和实现。

实用:提供了数据映射功能,提供了对底层数据访问的封装(例如ado.net),提供了DAO框架,可以使我们更容易的开发和配置我们的DAL层。

灵活:通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。

功能完整:提供了连接管理,缓存支持,线程支持,(分布式)事物管理,通过配置作关系对象映射等数据访问层需要解决的问题。提供了DAO支持,并在DAO框架中封装了ADO.NET,NHibernate和DataMapper。

增强系统的可维护性:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

缺点:

sql工作量很大,尤其是字段多、关联表多时,更是如此。

sql依赖于数据库,导致数据库移植性差。

由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。

字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。(比如配置了一对多Collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即Collection的对象为null)。

DAO层过于简单,对象组装的工作量较大。

不支持级联更新、级联删除。

编写动态sql时,不方便调试,尤其逻辑复杂时。

提供的写动态sql的xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。使用不当,容易导致N+1的sql性能问题。

MyBatis中,可以使用Generator自动生成代码,包括DAO层、 MODEL层 、MAPPING SQL映射文件。

第一步:下载MyBatis的Generator工具

htt p:/ /mybati s.gith ub.i o/generator/

第二步:配置自动生成代码所需的XML配置文件,例如(generator.xml)

将这个文件保存至你下载的mybatis-generator-core-1.3.2文件夹下

第三步:进入XML配置文件(generator.xml)所在的的目录并执行命令:

Dos代码

java -jar E:\mybatis-generator-core-1.3.2\lib\mybatis-generator-core-1.3.2.j ar -configfile generator.xml -overwrite

mybatis generator eclipse插件的安装

打开eclipse,点击Help>Software Update

选择 "Available Software" 标签,点击 "Add Site" 按钮

输入以下信息:

Location:htt p:/ /mybatis.googleco de.c om/svn/sub-projects/gen erator/trunk/eclipse/UpdateSite/

点击ok,自动进入"mybatis generator Feature"

点击“install”按钮进行安装。。。。mybatis generator 插件安装完成

配置Mybatis Generator不要生成Example类

Mybatis Generator默认设置会生成一大堆罗哩罗嗦的Example类,主要是用各种不同的条件来 *** 作数据库,大部分是用不到的,用到的时候手工修改mapper和接口文件就行了。

<</code>table

schema="general"

tableName="tb_table_name"

domainObjectName="EntityName"

enableCountByExample="false"

enableUpdateByExample="false"

enableDeleteByExample="false"

enableSelectByExample="false"

selectByExampleQueryId="false"

>

name="useActualColumnNames"

value="true"/>

</</code>table>

这样生成的mapper和dao接口就清爽多了。

1,首先在包下创建Configuration.xml文件,该文件的格式如下:

<xml version="1.0" encoding="UTF-8" ><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" ""><configuration><environments default="dev"><environment id="dev"><transactionManager type="JDBC"$amp>amp$lt/transactionManager><dataSource type="POOLED"><property name="driver" value="oracle.jdbc.driver.OracleDriver" /><property name="url" value="jdbc:oracle:thin:@192.168.1.20:1521:oa" /><property name="username" value="zhangsan" /><property name="password" value="123" /></dataSource></environment></environments><mappers><mapper resource="com/cissst/oa/data/UserMapper.xml" /><mapper resource="com/cissst/oa/data/DepartmentMapper.xml" /></mappers></configuration>

2,使用myBatis提供的工具类中的方法,从类路径或Configuration.xml文档所在位置加载资源文件。

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder()

SqlSessionFactory factory = null

// 获取SqlSessionFactory对象

try {

Reader reader = Resources

.getResourceAsReader("com/cissst/oa/data/Configuration.xml")

factory = builder.build(reader)

} catch (Exception e) {

e.printStackTrace()

}

3,使用工厂对象获取SqlSession 对象

SqlSession session=factory .openSession(false)

参数如果为true,表示该会话具有自动提交事务的功能,否则需程序员手动提交事务。

4,使用进行数据库访问

SqlSession session = super.getSqlSession()

// 构造返回值集合

List<UserEntity>result = new ArrayList<UserEntity>()

try {

// 获取映射接口

UserMapper userMapper = session.getMapper(UserMapper.class)

// 调用接口中的方法

List<UserEntity>list = userMapper.getUserList(userEntity)

// 提交事务

session.commit()

} catch (Exception e) {

// 回滚事务

session.rollback()

} finally {

// 关闭会话

session.close()

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10028323.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存