您的位置:首页 > 其它

mybatis基本原理

2017-06-19 21:42 106 查看

mybatis是什么??

mybatis是一个持久层的框架,是apache下的顶级项目。

mybatis托管到goolecode下,再后来托管到github下(https://github.com/mybatis/mybatis-3/releases)。

mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。

mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)

mybatis框架



入门程序

3 入门程序

3.1 需求

根据用户id(主键)查询用户信息

根据用户名称模糊查询用户信息

添加用户

删除 用户

更新用户

3.1 环境

java环境:jdk1.7.0_72

eclipse:indigo

mysql:5.1

mybatis运行环境(jar包):

https://github.com/mybatis/mybatis-3/releases下载,3.2.7版本

lib下:依赖包

mybatis-3.2.7.jar:核心 包

mybatis-3.2.7.pdf,操作指南

加入mysql的驱动包

3.2 log4j.properties

3.3 工程结构

3.4 SqlMapConfig.xml

配置mybatis的运行环境,数据源、事务等。

3.5 根据用户id(主键)查询用户信息

3.5.1 创建po类

3.5.2 映射文件

映射文件命名:

User.xml(原始ibatis命名),mapper代理开发映射文件名称叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml

在映射文件中配置sql语句。

3.5.3 在SqlMapConfig.xml加载映射文件

在sqlMapConfig.xml中加载User.xml:

3.5.4 程序编写

3.6 根据用户名称模糊查询用户信息

3.6.1 映射文件

使用User.xml,添加根据用户名称模糊查询用户信息的sql语句。

3.6.2 程序代码

3.7 添加用户

3.7.1 映射文件

在 User.xml中配置添加用户的Statement

3.7.2 程序代码

3.7.3 自增主键返回

mysql自增主键,执行insert提交之前自动生成一个自增主键。

通过mysql函数获取到刚插入记录的自增主键:

LAST_INSERT_ID()

是insert之后调用此函数。

修改insertUser定义:

3.7.4 非自增主键返回(使用uuid())

使用mysql的uuid()函数生成主键,需要修改表中id字段类型为string,长度设置成35位。

执行思路:

先通过uuid()查询到主键,将主键输入 到sql语句中。

执行uuid()语句顺序相对于insert语句之前执行。

通过oracle的序列生成主键:

SELECT 序列名.nextval()

insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})

3.8 删除用户

3.8.1 映射文件

3.8.2 代码:

3.9 更新用户

3.9.1 映射文件

3.9.2 代码

3.10 总结

3.10.1 parameterType

在映射文件中通过parameterType指定输入 参数的类型。

3.10.2 resultType

在映射文件中通过resultType指定输出结果的类型。

3.10.3 #{}和${}

#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。


如果接收简单类型,#{}中可以写成value或其它名称。

#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。


表示一个拼接符号,会引用sql注入,所以不建议使用{}。

接收输入参数,类型可以是简单类型,pojo、hashmap。如果接收简单类型,{}中只能写成value。

${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性…的方式获取对象属性值。

3.10.4 selectOne和selectList

selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。

selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。

如果使用selectOne报错:

org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4

3.11 mybatis和hibernate本质区别和应用场景

hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。

对sql语句进行优化、修改比较困难的。

应用场景:

适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。。

mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。

应用场景:

适用与需求变化较多的项目,比如:互联网项目。

企业进行技术选型,以低成本 高回报作为技术选型的原则,根据项目组的技术力量进行选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: