Loading

Mybatis全解-01-第一个Mybatis程序

什么是Mybatis

一款优秀的持久层框架,避免了JDBC底层繁杂的手动设置参数和获取结果集的过程。能够使用xml文件或注解形式来映射实体类和数据库内容。

Mybatis官方文档: http://www.mybatis.org/mybatis-3/zh/index.html

Github上地址:https://github.com/mybatis/mybatis-3

 

学习mybatis之前需要理解持久化的概念

什么是持久化

持久化就是将程序在持久状态和瞬时状态间转换的机制。就是把数据(内存中的对象)保存到可永久保存的存储设备之中(如磁盘)。

JDBC是一种持久化机制,文件IO也是持久化机制。

为什么需要持久化

首先就是价格,内存价格昂贵,其次就是内存中的数据断电即失,为了保证数据不丢失,需要对数据进行持久化。

 

持久化到持久层

用来完成持久化工作的代码块(也就是程序中的DAO层)。大多数情况下,数据持久化是通过各种关系数据库来实现。

之所以要独立出一个持久层的概念,而不是持久模块或者持久单元。真正意义上讲就是,在我们的程序架构中,应该用一个相对独立的逻辑层面,专注于数据持久层逻辑的实现,说白了就是用来操作数据库存在的。

 

为什么要用到Mybatis

Mybatis是一个半自动化的ORM框架(Object Relationship Mapping)即对象关系映射。Mybatis就是用来帮助我们操作数据库的,从数据库中取出数据,将数据存入数据库中。相比于传统的JDBC来操作数据库,Mybatis不用写那些过于繁杂与重复的代码,开发者只需要关注sql语句的实现。

优点:

1.简单小巧,没有任何第三方依赖,使用时只需要引入两个jar包。

2.使用灵活,不会对应用程序或者数据库的现有设计强加任何影响。Sql写在xml文件中有利于统一的管理与优化。

3.解除sql与程序代码之间的耦合,通过dao层将业务逻辑和数据访问逻辑的分离,使系统的设计更清晰,更易维护。

4.提供xml标签,支持编写动态sql。

 

第一个Mybatis程序

流程:搭建环境-导入Mybaits-编写代码-测试

1.搭建环境

 

CREATE DATABASE `mybatis`;

USE `mybatis`;

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user`(
`id` INT(20) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `user`(`id`,`name`,`pwd`) VALUES (1,'李慧','123456'),(2,'小明','234567'),(3,'李华','456789');

 

 

 

2.导入Mybatis的jar包

 

<dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis</artifactId>
   <version>3.5.2</version>
</dependency>
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.47</version>
</dependency>

 

 

3.编写Mybatis核心配置文件:mybatis-config.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="development">
       <environment id="development">
           <transactionManager type="JDBC"/>
           <dataSource type="POOLED">
               <property name="driver" value="com.mysql.jdbc.Driver"/>
               <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
               <property name="username" value="root"/>
               <property name="password" value="123456"/>
           </dataSource>
       </environment>
   </environments>
   <mappers>
       <mapper resource="com/li/dao/userMapper.xml"/>
   </mappers>
</configuration>

 

4.编写Mybatis工具类

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;

public class MybatisUtils {
    // SqlSessionFactory工厂,生产连接数据库的SqlSession
   private static SqlSessionFactory sqlSessionFactory;

   static {
       try {
       // 通过流的方式读取数据库的连接信息
           String resource = "mybatis-config.xml";
           InputStream inputStream = Resources.getResourceAsStream(resource);
      // 通过SqlSessionFactoryBuilder建造者建造SqlSessionFactory工厂
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      } catch (IOException e) {
           e.printStackTrace();
      }
  }

   //获取SqlSession连接
   public static SqlSession getSession(){
   // SqlSessionFactory工厂生产SqlSession
       return sqlSessionFactory.openSession();
  }

}

 

5.创建实体类

public class User {
   
   private int id;  //id
   private String name;   //姓名
   private String pwd;   //密码
   
   //构造,有参,无参
   //set/get
   //toString()
   
}

 

6.编写Mapper接口

import com.li.pojo.User;
import java.util.List;

public interface UserMapper {
   List<User> selectUser();
}

 

7.编写对应的Mapper.xml文件

注意:这里的namespace绑定的是接口

<?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.li.dao.UserMapper">
 <select id="selectUser" resultType="com.li.pojo.User">
  select * from user
 </select>
</mapper>

 

8.编写测试类

public class MyTest {
   @Test
   public void selectUser() {
           // 调用之前写好的MybatisUtils工具类里的方法,获得session,用来连接数据库
       SqlSession session = MybatisUtils.getSession();
       // 利用反射,得到mapper,然后执行里面的sql
       UserMapper mapper = session.getMapper(UserMapper.class);
       List<User> users = mapper.selectUser();
       for (User user: users){
           System.out.println(user);
      }
      // 最后记得关闭资源
       session.close();
  }
}

 

9.运行程序,查看测试结果。

 

10.如果报错,可能是出现了静态资源导出问题,读取不到你的文件。

解决方法,在pom文件中加入静态资源过滤代码。

<build>
<resources>
   <resource>
       <directory>src/main/java</directory>
       <includes>
           <include>**/*.properties</include>
           <include>**/*.xml</include>
       </includes>
       <filtering>false</filtering>
   </resource>
   <resource>
       <directory>src/main/resources</directory>
       <includes>
           <include>**/*.properties</include>
           <include>**/*.xml</include>
       </includes>
       <filtering>false</filtering>
   </resource>
</resources>
</build>

 

posted @ 2021-06-22 10:15  你比从前快乐;  阅读(60)  评论(0编辑  收藏  举报