加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Mybatis系列(一):Mybatis入门

发布时间:2020-12-14 18:06:11 所属栏目:大数据 来源:网络整理
导读:一、Mybatis是什么 ? ? ? ? MyBatis?本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis, mybatis是支持普通sql查询,存储过程和高级映射的优秀的、轻量级的持久层框架 。 二、Mybatis的

一、Mybatis是什么

? ? ? ? MyBatis?本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,mybatis是支持普通sql查询,存储过程和高级映射的优秀的、轻量级的持久层框架。

二、Mybatis的作用

mybatis消除了几乎所有的jdbc代码和参数的手工设置以及结果集的检索。

? ? ? ? 3.?mybatis使用简单的xml或注解用于配置和原始映射,将简单javabean映射成数据库中的对象。

三、为什么要学习Mybatis

? ? ? ? 1. 我们先来看使用jdbc操作数据库的过程

Connection connection = PreparedStatement preparedStatement = ResultSet resultSet = Class.forName("com.mysql.jdbc.Driver" connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/study?characterEncoding=utf-8" "root","root" String sql = "select * from t_order where order_no = ?" preparedStatement = preparedStatement.setString(1,"123" resultSet = System.out.println(resultSet.getString("id") + " " + resultSet.getString("orderinfo" } } (resultSet != } (preparedStatement != } (connection != } }

使用jdbc操作数据库存在如下的问题:

? ? ? ?1.1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。

? ? ? ? ? ? ? ? 使用数据库连接池管理数据库连接。

? ? ? ?1.2、将sql语句硬编码到java代码中,如果sql?语句修改,需要重新编译java代码,不利于系统维护。

? ? ? ? ? ? ? ? 解决方案:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。

? ? ? ?1.3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。

? ? ? ? ? ? ? ? 解决方案:将sql语句及占位符号和参数全部配置在xml中。

? ? ? ?1.4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。

? ? ? ? ? ? ? ? ?Mybatis解决方案:将查询的结果集,自动映射成java对象。

四、Mybatis架构图

架构图的说明:

? ? ? ? ? ? 1.1 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

? ? ? ? ? ? 1.2 mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

? ? ? ?2、通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

? ? ? ?3、由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

? ? ? ?4、mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

? ? ? ?5、Mapped?Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped?Statement对象,sql的id即是Mapped?statement的id。

? ? ? ?6、Mapped?Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped?Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

? ? ? ?7、Mapped?Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped?Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

五、Mybatis入门程序

1. 需求:创建一个用户表,用户名有用户名称,生日,性别,地址字段,对用户表进行CRUD操作

2. 环境:JDK1.8,eclipse,Mysql5.6,maven

3. 创建一个名为MybatisTest的工程,目录结构如下:

?4. 在数据库里面创建用户表,并插入数据

SET FOREIGN_KEY_CHECKS=0 -- ---------------------------- -- Table structure -- ---------------------------- `id` (11 `username` varchar(30) NOT NULL COMMENT '用户名称' `birthday` date DEFAULT NULL COMMENT '生日' `sex` (2) DEFAULT NULL COMMENT '性别' `address` varchar(256) DEFAULT NULL COMMENT '地址' ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET= -- ---------------------------- -- -- ---------------------------- INSERT INTO `t_user` VALUES ('1','a','2017-10-12','2','深圳' INSERT INTO `t_user` VALUES ('2','b','深圳' INSERT INTO `t_user` VALUES ('3','c','1','深圳' INSERT INTO `t_user` VALUES ('4','d','深圳');

5. 在工程里面创建用户表的实体类UserModel.java

.id = .username = .sex = .address = .birthday = "User [id=" + id + ",username=" + username + ",sex=" + sex + ",address=" + address + ",birthday=" + birthday + "]" }

6. 定义实体类在mybatis里面的映射文件mapper-user.xml

7. 定义mybatis的主配置文件SqlMapConfig.xml,在里面引入数据库配置文件db.properties和实体映射文件mapper-user.xml

8.?db.properties

driver= url=jdbc:mysql: name= password=123456

9. 编写mybatis的测试类

String resource = "SqlMapConfig.xml" InputStream inputStream = SqlSession sqlSession = inputStream = SqlSessionFactory sqlSessionFactory = sqlSession = UserModel user = sqlSession.selectOne("test.findUserById",1 } } (sqlSession != (inputStream != } String resource = "SqlMapConfig.xml" InputStream inputStream = SqlSession sqlSession = inputStream = SqlSessionFactory sqlSessionFactory = sqlSession = List list = sqlSession.selectList("test.findUserByName","a" } } (sqlSession != (inputStream != } String resource = "SqlMapConfig.xml" InputStream inputStream = SqlSession sqlSession = inputStream = SqlSessionFactory sqlSessionFactory = sqlSession = UserModel user = user.setUsername("d" user.setBirthday( user.setSex("1" user.setAddress("上海" sqlSession.insert("test.insertUser" } } (sqlSession != (inputStream != } String resource = "SqlMapConfig.xml" InputStream inputStream = SqlSession sqlSession = inputStream = SqlSessionFactory sqlSessionFactory = sqlSession = sqlSession.delete("test.deleteUser",7 } } (sqlSession != (inputStream != } String resource = "SqlMapConfig.xml" InputStream inputStream = SqlSession sqlSession = inputStream = SqlSessionFactory sqlSessionFactory = sqlSession = UserModel user = user.setId(2 user.setUsername("e" user.setBirthday( user.setSex("2" user.setAddress("上海" sqlSession.update("test.updateUser" } } (sqlSession != (inputStream != } }

六、mybatis和Hibernate的本质区别与应用场景

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

应用场景

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

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

应用场景

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

七、小结

1. parameterType和resultType

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

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

?2.#{}和${}

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

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

? ? #{}接收pojo对象值,通过OGNL读取对象中的属性值,和struts的OGNL类似。

? ?${}

? ?${}接收输入参数,类型可以是简单类型,pojo、hashmap;

? ?如果接收简单类型,${}中只能写成value;

? ?${}接收pojo对象值,通过OGNL读取对象中的属性值,和struts的OGNL类似。

3.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

参考文章:http://www.cnblogs.com/selene/p/4604605.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读