前言
现在是2019年9月23号,晚上23:40,我目前是研二上学期,秋季上学期刚开学,我对自己职业规划是毕业后从事java后端开发,对于很多企业都要求后端开发者具备mybatis框架知识体系,为了毕业后能够找到一份令自己满意的工作,我开始学习了mybatis框架,以下是我学习mybatis框架的一些浅薄的认知,适合初学者阅读
MyBatis框架的介绍
(1)MyBatis框架是什么?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
(2)MyBatis为什么会出现,并且他解决的什么问题?
    数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。
Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
    向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。
    对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。
(3)同类的技术有哪些?
最原始的JDBC,Hibernate框架
MyBatis框架的入门案例
技术点
mybatis框架 + 开发工具IDEA
环境搭建
(1)新建一个基于maven管理的java项目,在项目的配置文件(pom.xml文件)下导入所需的依赖(以下是我的配置,具体版本可以根据实际情况而定,自行选择):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
   | <dependencies>         <dependency>             <groupId>org.mybatis</groupId>             <artifactId>mybatis</artifactId>             <version>3.4.5</version>         </dependency>         <dependency>             <groupId>mysql</groupId>             <artifactId>mysql-connector-java</artifactId>             <version>5.1.6</version>         </dependency>         <dependency>             <groupId>log4j</groupId>             <artifactId>log4j</artifactId>             <version>1.2.12</version>         </dependency>         <dependency>             <groupId>junit</groupId>             <artifactId>junit</artifactId>             <version>4.10</version>         </dependency>     </dependencies>
   | 
 
(2)在资源目录resources下新建一个SqlMapConfig.xml文件,导入约束,然后配置一些数据库相关的信息(具体数据库的配置信息根据自己的情况做相应修改即可):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
   | 
  ```xml
  <?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">
 
  <configuration>          <environments default="mysql">                  <environment id="mysql">                          <transactionManager type="JDBC"></transactionManager>                          <dataSource type="POOLED">                                  <property name="driver"value="com.mysql.jdbc.Driver" />                 <property name="url" value="jdbc:mysql://localhost:3306/eesy"/>                 <property name="username" value="root"/>                 <property name="password" value="yx1994"/>
              </dataSource>         </environment>     </environments>          <mappers>             </mappers> </configuration>
 
  | 
 
入门案例
(1)搭建好开发环境之后,我们可以新建我们的实体类和dao接口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
   |  package com.itheima.domain; import java.io.Serializable; import java.util.Date; public class User implements Serializable {     private Integer id;     private String username;     private Date birthday;     private String sex;     private String address;
      public Integer getId() {         return id;     }
      public void setId(Integer id) {         this.id = id;     }
      public String getUsername() {         return username;     }
      public void setUsername(String username) {         this.username = username;     }
      public Date getBirthday() {         return birthday;     }
      public void setBirthday(Date birthday) {         this.birthday = birthday;     }
 
      public String getSex() {         return sex;     }
      public void setSex(String sex) {         this.sex = sex;     }
      public String getAddress() {         return address;     }
      public void setAddress(String address) {         this.address = address;     }
      @Override     public String toString() {         return "User{" +                 "id=" + id +                 ", username='" + username + '\'' +                 ", birthday=" + birthday +                 ", sex='" + sex + '\'' +                 ", address='" + address + '\'' +                 '}';     }
 
  }
  public interface IUserDao {     
 
      List<User> findAll(); }
 
  | 
 
(2)完成第一步之后,我们需要在resources目录下,新建一个与dao接口相同的路径的xml配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
   | 
  <?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">
  <mapper namespace="com.itheima.dao.IUserDao">    
 
 
 
      <select id="findAll" resultType="com.itheima.domain.User">         select * from user     </select> </mapper>
 
  | 
 
(3)需要在SqlMapConfig.xml文件里面配置一下我们的映射文件
1 2 3
   | <mappers>         <mapper resource="com/itheima/dao/IUserDao.xml"/>     </mappers>
   | 
 
(4)我们可以写一个测试类来测试一下,我们写的能否从数据库取到数据,并且封装到实体中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   | @Test     public void testFindAll() throws Exception {                  InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");                  SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();         SqlSessionFactory factory = builder.build(in);                  SqlSession session = factory.openSession();                  IUserDao userDao = session.getMapper(IUserDao.class);                  List<User> users = userDao.findAll();         for (User user:users){             System.out.println(user);         }                  session.close();         in.close();     }
   | 
 
(5)执行结果:

以上我们已经完成了mybatis入门的第一个案例,这其中还有很多对数据库的增删改查操作,我们都可以用配置文件的方式,完成对数据的访问。