您的位置:首页 > 其它

mybatis

2016-03-14 15:44 204 查看
一。传统数据库编程的缺点:

1.数据库连接,使用时就创建不使用时释放,对数据库频繁的连接开启和关闭,造成数据库资源的浪费,影响数据库性能

解决方案:使用数据库连接池来管理

2.将sql语句硬编码到Java程序,如果修改语句那么程序就必须重新编译,不利于系统维护

解决方案:将sql语句放到配置文件中

3.向preparedStatement中设置参数,占位符和参数出现了硬编码

解决方案:将sql语句、占位符、参数放到配置文件中

4.从resultSet中遍历结果数据集的时候,获取表的字段存在硬编码

解决方案:将结果集自动映射为Java对象

二。mybatis框架原理

mybatis是持久层框架,是Apache的项目。mybatis让程序将主要精力放在sql语句上,通过mybatis提供的映射方式,自由灵活生成(半自动化)满足需要的sql

mybatis可以将向preparedStatement的输入参数自动映射输入,将查询结果集灵活的映射为Java对像输出映射

mybatis{

sqlMapConfig.xml(是mybatis的全局配置文件,名称不固定的)配置了数据源、事务等mybatis运行环境配置映射文件(配置sql语句)mapper.xml(映射文
件)、mapper.xml、mapper.xml.....

SqlSessionFactory(会话工厂),根据配置文件创建工厂作用:创建SqlSession

SqlSession(会话),是一个接口,面向用户(程序员)的接口作用:操作数据库(发出sql增、删、改、查)

Executor(执行器),是一个接口(基本执行器、缓存执行器)作用:SqlSession内部通过执行器操作数据库mapped statement(底层封装对象)作用:对操
作数据库存储封装,包括 sql语句,输入参数、输出结果类型

mysql

三。一对一查询

由订单查询用户信息:sql为SELECT orders.*,USER.username,USER.sex,USER.address
FROM
orders,USER WHERE orders.user_id = us
er.id

resultType:使用较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射

resultMap:需要单独定义resultmap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultmap可以完成将关联查询映射pojo属性中

resultMap是能实现延迟加载的,而resultType是无法实现的

四。一对多查询

比如查询订单和订单明细:SELECT orders.*,USER.username,USER.sex,USER.address,orderdetail.id orderdetail_id,orderdetail.ite
ms_id,orderdetail.items_num,orderdetail.orders_id
FROM
orders,USER,orderdetail
WHERE orders.user_id = user.id AN
D orderdetail.orders_id=orders.id

mybatis使用resultMap的collection对关联查询的多条数据映射到一个list集合属性中

五。多对多查询

比如查询用户和用户购买的商品信息:SELECT orders.*,USER.username,USER.sex,USER.address,orderdetail.id orderdetail_id,orderdet
ail.items_id,orderdetail.items_num,orderdetail.orders_id,items.name items_name,items.detail items_detail,items.pri
ce items_price FROM orders,USER,orderdetail,items WHERE orders.user_id = user.id AND orderdetail.orders_id=orde
rs.id AND orderdetail.items_id = items.id
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: