首页 技术 正文
技术 2022年11月18日
0 收藏 438 点赞 4,075 浏览 66747 个字

在前面的博文中,小编介绍了springmvc的相关知识点,在今天这篇博文中,小编将介绍一下mybatis的框架原理,以及mybatis的入门程序,实现用户的增删改查,她有什么优缺点以及mybatis和hibernate之间存在着怎么样的关系,接下来小编一一进行讲解,希望对小伙伴们有帮助,不足之处,还请多多指教。
什么是mybatis?
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。MyBatis 使用简单的 XML 或注解来配置和映射基本体,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。简单来说,mybatis就是一个持久层的框架,mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足需要的sql语句,mybatis可以将向preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。

接着,我们通过一张图,来了解一下mybatis的框架原理:

框架架构讲解:

a、加载配置文件:配置来源于两个地方,一个是配置文件,一个是java代码的注解,将sql的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

b、SQL解析:当api接口层接收到调用请求时,会接收到传入slq的id和传入对象(可以是map或者基本数据类型),mybatis会根据sql的id找到对应的MappedStatement,然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的sql语句和参数。

c、 SQL执行:将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果。

d、结果映射:将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、JavaBean或者基本数据类型,并将最终结果返回。

mybatis入门程序解析

接着,小编结合demo来具体介绍一下,需求如下:
根据用户id查询用户信息;
根据用户名称模糊查询用户信息;
添加、删除、更新用户。
第一步、建立各种包和类,工程目录如下所示:

<img src="data:image/png;base64,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" alt="">

第二步、编写SqlMapConfig.xml中的内容,配置mybatis的运行环境,数据源,事务等。代码如下所示:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 将spring整合后environments配置将废除 --><environments default="developent"><!-- 使用jdbc事务管理,事务控制由mybatis --><transactionManager type="JDBC"/><!-- 数据库连接池,由mybatis管理 --><dataSource type="POLLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environments><!-- 加载 映射文件 --><mappers><mapper resource="sqlmap/User.xml"/></mappers></configuration>

第三步、编写User.java中的内容,如下所示:

package cn.itcast.mybatis.po;import java.util.Date;/** * * <p>Title: User</p> * <p>Description:用户po </p> * @author丁国华 * @date2016年7月31日 15:39:04 * @version 1.0 */public class User {//属性名和数据库表的字段对应private int id;private String username;// 用户姓名private String sex;// 性别private Date birthday;// 生日private String address;// 地址public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", sex=" + sex+ ", birthday=" + birthday + ", address=" + address + "]";}}

第四步、实现增删改查的功能,首先编写User.xml中的内容,如下所示:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离注意:使用mapper代理方法开发,namespace有特殊重要的作用--><mapper namespace="test"><!-- 在 映射文件中配置很多sql语句 --><!-- 需求:通过id查询用户表的记录 --><!-- 通过 select执行数据库查询id:标识 映射文件中的 sql将sql语句封装到mappedStatement对象中,所以将id称为statement的idparameterType:指定输入 参数的类型,这里指定int型#{}表示一个占位符号#{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 --> <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">SELECT * FROM USER WHERE id=#{value}</select><!-- 根据用户名称模糊查询用户信息,可能返回多条resultType:指定就是单挑记录所映射的java对象类型${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接到sql中。使用${}拼接sql,引起sql注入${value}:接收输入参数的内容,如果传入类型是简单类型,${}中只能使用value --><select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">SELECT * FROM USER WHERE username LIKE '%${value}%'</select><!-- 添加用户parameterType:指定输入参数类型是pojo(包括用户信息)#{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值 --><insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"><!-- 将插入数据的主键返回,返回到user对象中SELECT LAST_INSERT_ID():得到刚刚insert进去记录的主键值,只适用于自增主键keyProperty:将查询得到主键值设置到parameterType指定的对象的那个属性order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说她的执行顺序resultType:指定SELECT LAST_INSERT_ID()的结果类型 --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSER_ID() </selectKey>insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})<!-- 使用mysql的uuid()函数生成主键执行过程,首先通过uuid得到主键,将主键设置到user对象的id属性中其次,在insert执行的时候,从user对象中,取出id属性值 --><selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">SELECT uuid()</selectKey>insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address});</insert><!-- 删除用户根据id删除用户,需要输入id值 --><delete id="deleteUser" parameterType="java.lang.Integer">delete from user where id=#{id}</delete><!-- 根据id更新用户分析:需要传入用户的id需要传入用户的更新信息parameterType指定user对象,包括 id和更新信息,注意:id必须存在#{id}:从输入 user对象中获取id属性值 --><update id="updateUser" parameterType="cn.itcast.mybatis.po.User">update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}</update></mapper>

第五步、编写具体的方法,如下所示:

package cn.itcast.mybatis.first;import java.io.IOException;import java.io.InputStream;import java.util.Date;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;import cn.itcast.mybatis.po.User;public class MybatisFirst {// 根据id查询用户信息,得到一条记录结果@Testpublic void findUserByIdTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 通过SqlSession操作数据库// 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id// 第二个参数:指定和映射文件中所匹配的parameterType类型的参数// sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象// selectOne查询出一条记录User user = sqlSession.selectOne("test.findUserById", 1);System.out.println(user);// 释放资源sqlSession.close();}//根据用户名称模糊查询用户列表@Testpublic void findUserByNameTest() throws IOException{//mybatis配置文件String resource ="SqlMapConfig.xml";//得到配置文件InputStream inputStream = Resources.getResourceAsStream(resource);//创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//List中的user和映射文件中德resultType所指定的类型一致List<User> list = sqlSession.selectList("test.findUserByName","小明");System.out.println(list);sqlSession.close();}public void insertUserTest() throws IOException{//mybatis配置文件String resource ="SqlMapConfig";//得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);//创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//通过工厂得到sqlsessionSqlSession sqlSession = sqlSessionFactory.openSession();//插入用户对象User user = new User();user.setUsername("丁国华");user.setBirthday(new Date());user.setSex("1");user.setAddress("安徽合肥");//list中的user和映射文件中的resultType所指定的类型一直sqlSession.insert("test.insertUser",user);//提交事物sqlSession.commit();//关闭会话sqlSession.close();}//根据id删除用户信息@Testpublic void deleteUserTest() throws IOException{//mybatis配置文件String resource = "SqlMapConfig.xml";//得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);//创建工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//传入id删除用户sqlSession.delete("test.deleteUser",39);//提交事物sqlSession.commit();//关闭会话sqlSession.close();}// 更新用户信息@Testpublic void updateUserTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 更新用户信息User user = new User();//必须设置iduser.setId(41);user.setUsername("丁国华");user.setBirthday(new Date());user.setSex("2");user.setAddress("安徽合肥");sqlSession.update("test.updateUser", user);// 提交事务sqlSession.commit();// 关闭会话sqlSession.close();}}

mybatis的优缺点
优点:
a、易于上手和掌握。
b、sql写在xml里,便于统一管理和优化。
c、 解除sql与程序代码的耦合。
d、提供映射标签,支持对象与数据库的orm字段关系映射
e、提供对象关系映射标签,支持对象关系组建维护
f、提供xml标签,支持编写动态sql。
缺点:
a、 sql工作量很大,尤其是字段多、关联表多时,更是如此。
b、sql依赖于数据库,导致数据库移植性差。
c、 由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。
d、DAO层过于简单,对象组装的工作量较大。
e、 缓存使用不当,容易产生脏数据。

mybatis和hibernate的对比
相同点:Hibernate和mybatis都可以是通过SessionFactoryBuilder由xml配置文件生成SessionFactory,然后由

SessionFactroy生成Session,最后由Session来开启执行事物和SQL语句,其中SessionFactoryBuider、

SessionFactory、Session的生命周期都是差不多的。

不同点:

mybatis:小巧、方便、高效、简单、直接、半自动;

hibernate:强大、方便、高效、复杂、绕弯子、全自动;

mybatis:

a、入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很多的SQL使用经验,对于没有

那么高的对象模型要求的项目来说,堪称perfect。

b、 可以进行更为细致的SQL优化,可以减少查询字段。

c、 缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是

要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
d、 二级缓存机制不佳。
       hibernate:
       a、功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的

封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。
       b、有更好的二级缓存机制,可以使用第三方缓存。
       c、缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡

,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。

举个形象的比喻:
        mybatis:机械工具,使用方便,拿来就用,但工作还是要自己来作,不过工具是活的,怎么使由我决定。
        hibernate:智能机器人,但研发它(学习、熟练度)的成本很高,工作都可以摆脱他了,但仅限于它能做的事。

小编寄语:该博文,小编主要简单的介绍了mybatis的基本知识,包括一个简单的增删改查的demo,mybatis的

优缺点,以及hibernate和mybatis的对比,她们之间的相同点和不同点,mybatis简单来说,就是一个持久层的框架,

mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足需要的sql语句,mybatis可以

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,083
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,558
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,407
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,180
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,816
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,899