Mybatis介绍和基本使用

「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

1、什么是Mybatis?

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

优点:

1、与JDBC相比,减少了代码量

2、 最简单的持久化框架,简单易学

3、SQL代码从程序代码中彻底分离出来,可以重用

4、提供XML标签,支持编写动态SQL

5、提供映射标签,支持对象与数据库的ORM字段关系映射;支持缓存、连接池、数据库移植等

缺点:

1、SQL语句编写工作量大,熟练度要高

2、数据库移植性比较差,如果需要切换数据库的话,SQL语句会有很大的差异

2、搭建Mybatis项目

2.1 主要流程

image.png

2.2 导入mybatis相关依赖包和数据库驱动

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.5</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.47</version>
</dependency>
复制代码

2.3 建表

image.png

2.4 创建实体类对象:UserInfo.java

public class UserInfo {
    private Integer uid;
    private String username;

    public Integer getUid() {
        return uid;
    }
    public void setUid(Integer uid) {
        this.uid = uid;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
}
复制代码

2.5 创建对应的Mapper接口:UserInfoMapper.java

public interface UserInfoMapper {
    // 根据id查询UserInfo实体
    //@Select("select * from user_info where id=#{id}")
    UserInfo selectUser(Integer id);
    // 插入
    Integer insertEmp(UserInfo emp);
}
复制代码

2.6 编写配置文件: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"></transactionManager>
                        <dataSource type="POOLED">
                                <property name="driver" value="com.mysql.jdbc.Driver"/>
                                <property name="url" value="jdbc:mysql://localhost:3306/mysql"/>
                                <property name="username" value="root"/>
                                <property name="password" value="haitaiinc"/>
                        </dataSource>
                </environment>
        </environments>
        <mappers>
                <mapper class="com.zhl.mapper.UserInfoMapper"></mapper>
        </mappers>
</configuration>
复制代码

2.7 编写Mapper接口对应的XML文件:UserInfoMapper.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.zhl.mapper.UserInfoMapper">

    <!--根据id查询Emp实体-->
    <select id="selectUser" resultType="com.zhl.entity.UserInfo">
        select * from user_info where uid = #{id}
    </select>

    <insert id="insertUserInfo">
        INSERT INTO
            `mysql`.`user_info` ( `username`)
        VALUES (#{username});
    </insert>
</mapper>
复制代码

2.8 测试类

public class MybatisTest {
    SqlSessionFactory sqlSessionFactory;
    @Before
    public void before(){
        // 从 XML 中构建 SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }
    @Test
    public void test(){
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
            UserInfo userInfo = mapper.selectUser(1);
            System.out.println(userInfo);
        }
    }
}
复制代码

Guess you like

Origin juejin.im/post/7035551149562265630