
mybatis不是hibernate
实体类和持久层没有直接的关联
其实就是执行的sql语句而已,就算没有对象,直接用Map传值
也是可以执行的
应该是其它的问题吧
望采纳
本篇文章主要介绍了使用MyBatis框架完成数据库的增、删、改、查 *** 作。
准备工作
运行schemasql和datasql脚本文件中的 SQL 语句创建t_user表并添加部分测试数据。
schemasql:
datasql:
使用MyBatis框架 *** 作数据库步骤:
(1)定义Java实体
Userjava
(2)定义Mapper接口
UserDaojava
(3)编写XML映射文件
UserDaoxml
(4)编写MyBatis主配置文件
MyBatis使用 XML 文件格式描述配置信息,内容如下:
(5)编写测试类
Demojava
输出结果:
在DAO的实现类层你可以看到你implements的方法的名称,这个名称就是你配置数据源名称的地方,通过数据源名称查询你的WEB-INF/项目名称/config/Contextxml文件里配置的数据源信息。再通过WebLogic控制台找到你配置信息的具体数据源及各种信息。
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的掌握它的设计思路和实现。
实用:提供了数据映射功能,提供了对底层数据访问的封装(例如adonet),提供了DAO框架,可以使我们更容易的开发和配置我们的DAL层。
灵活:通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
功能完整:提供了连接管理,缓存支持,线程支持,(分布式)事物管理,通过配置作关系对象映射等数据访问层需要解决的问题。提供了DAO支持,并在DAO框架中封装了ADONET,NHibernate和DataMapper。
增强系统的可维护性:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
缺点:
sql工作量很大,尤其是字段多、关联表多时,更是如此。
sql依赖于数据库,导致数据库移植性差。
由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。
字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。(比如配置了一对多Collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即Collection的对象为null)。
DAO层过于简单,对象组装的工作量较大。
不支持级联更新、级联删除。
编写动态sql时,不方便调试,尤其逻辑复杂时。
提供的写动态sql的xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。使用不当,容易导致N+1的sql性能问题。
首先是大体一致的,只是分页查询时oracle用的伪列(rownum),mysql用的是limit,具体的可以百度一下分页;
另外oracle对sql语句要求更为严格,而且oracle里变量较mysql更多点,oracle中有number型,有大数据类型,mysql没得;
另外举个例子,oracle不能插入为空列,而mysql是可以的(个人觉得,不知道正确与否)。还有他们两者函数有不同之处,如转日期函数oracle是to_date('要转的字符串','格式') -- select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual,而mysql是str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09//都是针对字符串转日期来的。
还有一点,我们常常希望主键可以自动增长,避免我们插入数据时的重复问题,但是oracle不能设置列自动增长,而mysql是可以的,oracle可以用序列加触发器来解决自动增长问题达到与mysql一样的效果。
总体来说百分之九十的sql语句是没区别的。总体来说oracle的格式严格点,对有些字符型的还必须加单引号才能插入,mysql要求就没这么多了。还有当向数据库插入一个日期时,mysql可以直接插入成功,但是oracle需要先转化为sql里面的日期类型才行;oracle较mysql而言更安全,但是收费的,一般大公司用的多。oracle还有存储过程和函数,触发器这些这是mysql没有的。大体就是这样吧。
你的意思应该是用oracle数据库的序列自动生成的主键id,那么
第一种方法:你可以在插入主键的时候用序列生成,就是为主键id赋值xxx_seqnextval,这个序列是你创建的这个table的序列
第二种方法:你可以按照楼上说的,用主键映射,当然对于mysql这种有自增主键和oracle这种用序列的需要不同的设置,楼上代码
很清楚,不做赘述。
第三种方法:有人说不用添加主键,能够自动生成,这个方法我没有尝试过,只记得在navicat
for
mysql
不写主键可以自动计算生成的,楼主可以尝试下。
以上就是关于单独使用mybatis 当对象名与数据库表名不一样时 在不改名的情况下怎么解决全部的内容,包括:单独使用mybatis 当对象名与数据库表名不一样时 在不改名的情况下怎么解决、MyBatis源码解读 - 使用MyBatis *** 作数据库、mybatis连2个数据库 怎么判断使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)