Mybatis系列(一):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 |