[[toc]]

第一节 HelloWorld

1、物理建模

CREATE DATABASE mybatis-example;

USE mybatis-example;

CREATE TABLE t_emp(
emp_id INT AUTO_INCREMENT,
emp_name CHAR(100),
emp_salary DOUBLE(10,5),
PRIMARY KEY(emp_id)
);

INSERT INTO t_emp(emp_name,emp_salary) VALUES(“tom”,200.33);

2、逻辑建模

①创建Maven module

01.HelloWorld - 图1

②创建Java实体类

实体类是和现实世界中某一个具体或抽象的概念对应,是软件开发过程中,为了管理现实世界中的数据而设计的模型。
实体类的多个不同的叫法:
domain:领域模型
entity:实体
POJO:Plain Old Java Object
Java bean:一个Java类
/*
和数据库表t_emp对应的实体类
emp_id INT AUTO_INCREMENT
emp_name CHAR(100)
emp_salary DOUBLE(10,5)

Java的实体类中,属性的类型不要使用基本数据类型,要使用包装类型。因为包装类型可以赋值为null,表示空,而基本数据类型不可以。
/
public class Employee {

  1. private Integer empId;
  2. private String empName;
  3. private Double empSalary;
  4. public Employee() {
  5. }
  6. public Integer getEmpId() {<br /> return empId;<br /> }
  7. public void setEmpId(Integer empId) {<br /> this.empId = empId;<br /> }
  8. public String getEmpName() {<br /> return empName;<br /> }
  9. public void setEmpName(String empName) {<br /> this.empName = empName;<br /> }
  10. public Double getEmpSalary() {<br /> return empSalary;<br /> }
  11. public void setEmpSalary(Double empSalary) {<br /> this.empSalary = empSalary;<br /> }
  12. @Override<br /> public String toString() {<br /> return "Employee{" +<br /> "empId=" + empId +<br /> ", empName='" + empName + '\'' +<br /> ", empSalary=" + empSalary +<br /> '}';<br /> }
  13. public Employee(Integer empId, String empName, Double empSalary) {<br /> this.empId = empId;<br /> this.empName = empName;<br /> this.empSalary = empSalary;<br /> }<br />}

3、搭建框架开发环境

①导入依赖




org.mybatis
mybatis
3.5.7


junit
junit
4.12
test


mysql
mysql-connector-java
5.1.3

②准备配置文件

[1]Mybatis全局配置文件

习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合Spring之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。
<?xml version=”1.0” encoding=”UTF-8” ?>
<!DOCTYPE configuration
PUBLIC “-//mybatis.org//DTD Config 3.0//EN”
http://mybatis.org/dtd/mybatis-3-config.dtd">

  1. <!-- environments表示配置Mybatis的开发环境,可以配置多个环境,在众多具体环境中,使用default属性指定实际运行时使用的环境。default属性的取值是environment标签的id属性的值。 --><br /> <environments default="development"><br /> <!-- environment表示配置Mybatis的一个具体的环境 --><br /> <environment id="development">
  2. <!-- Mybatis的内置的事务管理器 --><br /> <transactionManager type="JDBC"/>
  3. <!-- 配置数据源 --><br /> <dataSource type="POOLED">
  4. <!-- 建立数据库连接的具体信息 --><br /> <property name="driver" value="com.mysql.jdbc.Driver"/><br /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis-example"/><br /> <property name="username" value="root"/><br /> <property name="password" value="atguigu"/><br /> </dataSource><br /> </environment><br /> </environments>
  5. <mappers><br /> <!-- Mapper注册:指定Mybatis映射文件的具体位置 --><br /> <!-- mapper标签:配置一个具体的Mapper映射文件 --><br /> <!-- resource属性:指定Mapper映射文件的实际存储位置,这里需要使用一个以类路径根目录为基准的相对路径 --><br /> <!-- 对Maven工程的目录结构来说,resources目录下的内容会直接放入类路径,所以这里我们可以以resources目录为基准 --><br /> <mapper resource="mappers/EmployeeMapper.xml"/><br /> </mappers><br /></configuration><br />注意:配置文件存放的位置是src/main/resources目录下。

[2]Mybatis映射文件

相关概念:ORM(Object Relationship Mapping)对象关系映射。

  • 对象:Java的实体类对象
  • 关系:关系型数据库
  • 映射:二者之间的对应关系 | Java概念 | 数据库概念 | | —- | —- | | 类 | 表 | | 属性 | 字段/列 | | 对象 | 记录/行 |

01.HelloWorld - 图2

<?xml version=”1.0” encoding=”UTF-8” ?>
<!DOCTYPE mapper
PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”
http://mybatis.org/dtd/mybatis-3-mapper.dtd">



<!-- 编写具体的SQL语句,使用id属性唯一的标记一条SQL语句 --><br />    <!-- resultType属性:指定封装查询结果的Java实体类的全类名 --><br />    <select id="selectEmployee" resultType="com.atguigu.mybatis.entity.Employee"><br />        <!-- Mybatis负责把SQL语句中的#{}部分替换成“?”占位符,在#{}内部还是要声明一个见名知意的名称 --><br />        select emp_id empId,emp_name empName,emp_salary empSalary from t_emp where emp_id=#{empId}<br />    </select><br /></mapper><br />注意:EmployeeMapper.xml所在的目录要和mybatis-config.xml中使用mapper标签配置的一致。

5、junit测试代码

@Test
public void testSelectEmployee() throws IOException {

// 1.创建SqlSessionFactory对象<br />    // ①声明Mybatis全局配置文件的路径<br />    String mybatisConfigFilePath = "mybatis-config.xml";

// ②以输入流的形式加载Mybatis配置文件<br />    InputStream inputStream = Resources.getResourceAsStream(mybatisConfigFilePath);

// ③基于读取Mybatis配置文件的输入流创建SqlSessionFactory对象<br />    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

// 2.使用SqlSessionFactory对象开启一个会话<br />    SqlSession session = sessionFactory.openSession();

// 3.根据Mapper配置文件的名称空间+SQL语句的id找到具体的SQL语句<br />    // 格式是:名称空间.SQL语句的id<br />    String statement = "com.atguigu.mybatis.dao.EmployeeMapper.selectEmployee";

// 要传入SQL语句的参数<br />    Integer empId = 1;

// 执行SQL语句<br />    Object result = session.selectOne(statement, empId);

System.out.println("o = " + result);

// 4.关闭SqlSession<br />    session.close();<br />}

说明:

  • SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的会话)
  • SqlSessionFactory:是“生产”SqlSession的“工厂”。
  • 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。

6、修正一个误区

①误区

刚开始接触框架,我们会认为Java程序会转入XML配置文件中执行,但其实框架会在初始化时将XML文件读取进来,封装到对象中,再然后就都是Java代码的执行了,XML中的配置是没法执行的。

②图解

01.HelloWorld - 图3

③源码

[1]封装Configuration对象

所在类:org.apache.ibatis.session.defaults.DefaultSqlSessionFactory
01.HelloWorld - 图4

[2]准备去获取已映射的指令

所在类:org.apache.ibatis.session.defaults.DefaultSqlSession
01.HelloWorld - 图5

[3]正式获取已映射的指令

所在类:org.apache.ibatis.session.Configuration
01.HelloWorld - 图6

[4]mappedStatements对象结构

mappedStatements对象的类型:Configuration类中的一个静态内部类:StrictMap
01.HelloWorld - 图7

回目录 下一节