1. mybatis是什么?
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,是一个基于Java的持久层框架。
1️⃣mybatis托管到goolecode下,再后来托管到github下(https://github.com/mybatis/mybatis-3/releases)。
2️⃣mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。
3️⃣mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)
Mybatiis介绍思维导图:https://www.edrawsoft.cn/viewer/public/s/8be08327341014
2.mybatis运行流程
3.入门程序
3.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工程结构
3.3SqlMapConfig.xml
配置mybatis的运行环境,数据源、事务等。
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE configuration
3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
5 <configuration>
6 <!-- 选择数据库环境 -->
7 <environments default="development">
8 <environment id="development">
9 <!-- 选择事务管理类型 -->
10 <transactionManager type="JDBC" />
11 <!-- 配置数据源 -->
12 <dataSource type="POOLED">
13 <property name="driver" value="com.mysql.jdbc.Driver" />
14 <property name="url" value="jdbc:mysql://localhost:3306/jerry" />
15 <property name="username" value="root" />
16 <property name="password" value="1234" />
17 </dataSource>
18 </environment>
19 </environments>
20 </configuration>
3.4根据员工id(主键)查询员工信息
3.4.1创建po类(实体类)
1 package com.mybatis.model;
2 /**
3 * 员工信息表实体类
4 * @author Administrator
5 *
6 */
7 public class Emp {
8
9 private Integer emp_id;
10 private String emp_name;
11 private Integer emp_age;
12 private Integer emp_num;
13 private String emp_post;
14 public Integer getEmp_id() {
15 return emp_id;
16 }
17 public void setEmp_id(Integer emp_id) {
18 this.emp_id = emp_id;
19 }
20 public String getEmp_name() {
21 return emp_name;
22 }
23 public void setEmp_name(String emp_name) {
24 this.emp_name = emp_name;
25 }
26 public Integer getEmp_age() {
27 return emp_age;
28 }
29 public void setEmp_age(Integer emp_age) {
30 this.emp_age = emp_age;
31 }
32 public Integer getEmp_num() {
33 return emp_num;
34 }
35 public void setEmp_num(Integer emp_num) {
36 this.emp_num = emp_num;
37 }
38 public String getEmp_post() {
39 return emp_post;
40 }
41 public void setEmp_post(String emp_post) {
42 this.emp_post = emp_post;
43 }
44
45 }
3.4.2 映射文件
映射文件命名:
User.xml(原始ibatis命名),mapper代理开发映射文件名称叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml 在映射文件中配置sql语句。
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper
3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5 <!-- namespace 命名空间,作用就是对sql进行分类化管理,理解sql隔离。-->
6 <mapper namespace="test">
7 <!--在映射文件中可以配置很多sql语句
8 把所用到的sql提取到配置文件中
9 id:sql语句的唯一标识
10 parameterType:指定参数的类型
11 resultType:指定sql输出结果所映射的java对象类型,select指定resultType表示将单条记录映射成java对象
12 #{id}:其中id表示接收输入的参数,参数名就是id。如果是简单类型#{}中的参数名称可以任意写 -->
13 <select id="selectEmpById" parameterType="int" resultType="com.mybatis.model.Emp">
14 select * from emp_message where emp_id=#{id};
15 </select>
16 </mapper>
3.4.3 在SqlMapConfig.xml加载映射文件
1 <!-- 加载映射文件-->
2 <mappers>
3 <mapper resource="sqlMapper/empMapper.xml" />
4 </mappers>
3.5 test程序编写
1 package com.mybatis.test;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.util.List;
6
7 import org.apache.ibatis.io.Resources;
8 import org.apache.ibatis.session.SqlSession;
9 import org.apache.ibatis.session.SqlSessionFactory;
10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
11
12 import com.mybatis.model.Emp;
13
14 public class Test {
15 //根据员工id查询员工基本信息
16 public static void main(String[] args) {
17 InputStream inputStream = null;
18 try {
19 //mybatis配置文件
20 String reString="sqlMapConfig.xml";
21 //得到配置文件流
22 inputStream = Resources.getResourceAsStream(reString);
23 //创建会话工厂,传入mybatis配置文件信息
24 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
25 //通过sqlSessionFactory会话工厂 得到 session
26 SqlSession sqlsession = sqlSessionFactory.openSession();
27 /**
28 * 通过sqlsession操作数据库
29 * 第一个参数:映射文件中的statement的id,等于namespace+“.”+statement的ID
30 * 第二个参数:指定和映射文件中parameterType参数类型所匹配的参数
31 * sqlsession.selectOne结果是与映射文件中resultType返回类型所匹配的对象
32 */
33 Emp emp=sqlsession.selectOne("test.selectEmpById", 1);
34 System.out.println(emp);
35 //释放资源
36 sqlsession.close();
37 } catch (IOException e) {
38 // TODO Auto-generated catch block
39 e.printStackTrace();
40 }
41
42 }
43 }
3.6.测试结果