什么是 MyBatis?

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

安装

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。

如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:

<!--添加MyBatis依赖-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
</dependency>
<!--添加数据库依赖-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.15</version>
</dependency>
<!--添加日志依赖-->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

创建数据库

导入SQL脚本

 SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `userId` int(11) NOT NULL AUTO_INCREMENT,
  `userName` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'moti', '3333'); 

结果如下:

创建User类

package com.moti.bean;
public class User {
    private Integer userId;
    private String userName;
    private String password;
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

创建UserMapper接口

package com.moti.mapper;
import com.moti.bean.User;
public interface UserMapper {
    public User getUserById(Integer userId);
}

创建所有所需要的配置文件

在pom同级创建resource文件夹,在resource文件夹下创建db.properties,log4j.properties,mybatis-config.xml文件,在resource文件夹下创建mapper文件夹,在mapper文件夹下创建UserMapper.xml文件.

具体如下

db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1/mybatis?serverTimezone=UTC&useSSL=false
username=root
password=983934

log4j.properties

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.cn.mybatis.mydemo.mapper.PersonMapper=DEBUG
log4j.logger.cn.mybatis.mydemo.mapper.CardMapper=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

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">
<!-- XML 配置文件包含对 MyBatis 系统的核心设置 -->
<configuration>
    <!-- 指定 MyBatis 数据库配置文件 -->
    <properties resource="db.properties" />
    <!-- 指定 MyBatis 所用日志的具体实现 -->
    <settings>
        <setting name="logImpl" value="LOG4J" />
    </settings>
    <environments default="mysql">
        <!-- 环境配置,即连接的数据库。 -->
        <environment id="mysql">
            <!-- 指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置 -->
            <transactionManager type="JDBC" />
            <!-- dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现。 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    <!-- mappers告诉了MyBatis去哪里找持久化类的映射类(注解形式)
        将写好的sql映射文件注册到全局配置文件中
     -->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

UserMapper.xml

<?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.moti.mapper.UserMapper">
    <!--
        namespace:名称空间
        id:唯一标识
        resultType:返回值类型
        #{userId}:根据传入的参数获得userId值
        将接口和xml进行绑定
            xml中的namespace属性为接口的全路径
            xml中的sql的id为接口的方法名
    -->
    <select id="getUserById" resultType="com.moti.bean.User">
        select * from user where userId = #{userId}
    </select>
</mapper>

全部创建完成后的目录结构如下:

编写测试类AppTest
package com.moti;
import com.moti.bean.User;
import com.moti.mapper.UserMapper;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
/**
 * Unit test for simple App.
 */
public class AppTest 
{
    @Test
    public void test1() throws IOException {
        //根据配置文件,创建一个SqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获得SqlSession对象,SqlSession代表和数据库的一次会话,用完关闭(线程不安全)
        SqlSession session = sqlSessionFactory.openSession();
        try{
            User user = session.selectOne("UserMapper.selectUser",1);
            System.out.println(user);
        }finally {
            session.close();
        }
    }
    /*
    接口式编程:
        Dao    ===> DaoImpl
        Mapper ===> XXXMapper.xml
        Mapper接口没有实现类,但是框架会为我们生成代理对象
        将接口和xml进行绑定
            xml中的namespace属性为接口的全路径
            xml中的sql的id为接口的方法名
    两个重要的配置文件:
            mybatis-config.xml:
                mybatis的全局配置文件,包含了数据库的连接信息,事务管理器信息...系统运行时环境
            XXXMapper.xml:
                保存了每一个sql语句的映射信息,将sql语句抽离出来
     */
    @Test
    public void test2() throws IOException {
        //1.获得SqlSessionFactory对象
        //根据配置文件,创建一个SqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //2.获得SqlSession对象,SqlSession代表和数据库的一次会话,用完关闭(线程不安全)
        SqlSession session = sqlSessionFactory.openSession();
        try{
            //3.获得接口的实现类对象(这里的对象是由MyBatis框架为我们生成的代理对象)
            UserMapper mapper = session.getMapper(UserMapper.class);
            User user = mapper.getUserById(1);
            System.out.println(user);
        }finally {
            //记得一定要关闭session对象
            session.close();
        }
    }
}
最后修改日期:2020-07-13

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。