H__D  

Mybatis简介

  MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

  中文官网地址:http://www.mybatis.org/mybatis-3/zh/index.html

  GitHub地址:https://github.com/mybatis/mybatis-3/tree/master/src/site

MyBatis入门

  1、准备一个数据库,本例使用的是mysql数据库,建一张员工表(Employee),并且插入一条数据,sql如下:

 1 -- ----------------------------
 2 -- Table structure for employee
 3 -- ----------------------------
 4 DROP TABLE IF EXISTS `employee`;
 5 CREATE TABLE `employee` (
 6   `id` int(11) NOT NULL AUTO_INCREMENT,
 7   `last_name` varchar(255) DEFAULT NULL,
 8   `gender` char(1) DEFAULT NULL,
 9   `email` varchar(255) DEFAULT NULL,
10   PRIMARY KEY (`id`)
11 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
12 
13 -- ----------------------------
14 -- Records of employee
15 -- ----------------------------
16 BEGIN;
17 INSERT INTO `employee` VALUES (1, 'test', '1', 'test@163.com');
18 COMMIT;

  2、新建一个Maven工程,引入mybatis依赖以及连接mysql数据库依赖

    

 1 <!-- Mybatis -->
 2 <dependency>
 3     <groupId>org.mybatis</groupId>
 4     <artifactId>mybatis</artifactId>
 5     <version>3.4.6</version>
 6 </dependency>
 7 
 8 <!-- mysql -->
 9 <dependency>
10     <groupId>mysql</groupId>
11     <artifactId>mysql-connector-java</artifactId>
12     <version>8.0.13</version>
13 </dependency>

  3、添加Mybatis全局配置文件mybatis-config.xml,放在src/main/resources目录下,内容如下:

 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     <environments default="development">
 7         <environment id="development">
 8             <transactionManager type="JDBC" />
 9             <!-- 配置数据库连接信息 -->
10             <dataSource type="POOLED">
11                 <property name="driver" value="com.mysql.jdbc.Driver" />
12                 <property name="url" value="jdbc:mysql://localhost:3306/test_mybatis?allowPublicKeyRetrieval=true" />
13                 <property name="username" value="admin" />
14                 <property name="password" value="123456" />
15             </dataSource>
16         </environment>
17     </environments>
18     <mappers>
19         <!-- 添加映射文件到Mybatis的全局配置文件中 -->
20         <mapper resource="mapper/EmployeeMapper.xml" />
21     </mappers>
22 </configuration>

  4、添加映射文件EmployeeMapper.xml到src/main/resources/mapping目录下,内容如下:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 <!-- 
 4 namespace:名称空间
 5 id:唯一标识
 6 resultType:返回值类型
 7 #{id}:从传过来的参数中取出id值
 8  -->
 9 <mapper namespace="com.hd.test.mapper.EmployeeMapper">
10     <select id="getEmployeeById"
11         resultType="com.hd.test.pojo.Employee">
12         select id, last_name lastName, gender, email from employee where id =
13         #{id}
14     </select>
15 </mapper>

   5、定义一个Java类Employee.java

 1 package com.hd.test.pojo;
 2 
 3 public class Employee {
 4 
 5     private Integer id;
 6     private String lastName;
 7     private String gender;
 8     private String email;
 9     public Integer getId() {
10         return id;
11     }
12     public void setId(Integer id) {
13         this.id = id;
14     }
15     public String getLastName() {
16         return lastName;
17     }
18     public void setLastName(String lastName) {
19         this.lastName = lastName;
20     }
21     public String getGender() {
22         return gender;
23     }
24     public void setGender(String gender) {
25         this.gender = gender;
26     }
27     public String getEmail() {
28         return email;
29     }
30     public void setEmail(String email) {
31         this.email = email;
32     }
33     @Override
34     public String toString() {
35         return "Employee [id=" + id + ", lastName=" + lastName + ", gender=" + gender + ", email=" + email + "]";
36     }
37     
38     
39 }

  8、一定一个测试Mybatis的Java类TestMybatis.java

 1 package com.hd.test.mybatis;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSession;
 8 import org.apache.ibatis.session.SqlSessionFactory;
 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
10 import org.junit.Test;
11 
12 import com.hd.test.pojo.Employee;
13 
14 
15 public class TestMybatis {
16     
17     @Test
18     public void test() throws IOException {
19         // 1、根据mybatis全局配置文件,获取SqlSessionFactory
20         String resource = "mybatis-config.xml";
21         // 使用MyBatis提供的Resources类加载mybatis的配置文件,获取输入流
22         InputStream inputStream = Resources.getResourceAsStream(resource);
23         // 构建sqlSession的工厂
24         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
25 
26         // 2、从SqlSession工厂中,获取sqlsession,用来执行sql
27         SqlSession session = sqlSessionFactory.openSession();
28         try {
29             // 查询selectOne
30             // @param statement Unique identifier matching the statement to use.      一个唯一标识
31             // @param parameter A parameter object to pass to the statement.        参数
32             Employee employee = (Employee) session.selectOne("com.hd.test.mapper.EmployeeMapper.getEmployeeById", 1);
33             // 输出信息
34             System.out.println(employee);
35         } finally {
36             // 关闭session
37             session.close();
38         }
39     }
40     
41 }

  8、junit测试方法,输出结果:

    

接口式编程 

  1、在上例的基础上编写一个Java接口EmployeeMapper

package com.hd.test.mapper;

import com.hd.test.pojo.Employee;

public interface EmployeeMapper {
    
    public Employee getEmployeeById(Integer id);

}

  注意,sql配置文件要与接口一一对应

  

  2、编辑测试方法内容如下:

 1     @Test
 2     public void test() throws IOException {
 3         // 1、根据mybatis全局配置文件,获取SqlSessionFactory
 4         String resource = "mybatis-config.xml";
 5         // 使用MyBatis提供的Resources类加载mybatis的配置文件,获取输入流
 6         InputStream inputStream = Resources.getResourceAsStream(resource);
 7         // 构建sqlSession的工厂
 8         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 9 
10         // 2、从SqlSession工厂中,获取sqlsession,用来执行sql
11         SqlSession session = sqlSessionFactory.openSession();
12         try {
13             // 3、获取接口的实现对象
14             EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
15             Employee employee = mapper.getEmployeeById(1);
16             // 输出信息
17             System.out.println(mapper);
18             System.out.println(employee);
19         } finally {
20             // 关闭session
21             session.close();
22         }
23     }

   3、junit测试方法,输出结果:

    

 

 

 

    

posted on 2018-12-23 00:41  H__D  阅读(1033)  评论(0编辑  收藏  举报