MyBatis的基本使用(1)

简介

MyBatis是一种半自动ORM的持久层框架,具有较高的sql灵活性,支持动态sql、高级映射、缓存、延迟加载等特性。但是缺点就是与数据库的无关性较低(意味着不能随意更换数据库,对数据库的依赖程度较高)。

什么是持久层

  • 说到持久层,就要提到一个概念——持久化。持久化就是指将数据通过某种技术保存在永久介质(硬盘)中,可以在所需时再次取出使用,对于开发人员来说,可以狭义的理解为“将对象信息保存到数据库”。
  • 而持久层则就是持久化层,是对象与数据库记录相互转换的过程

什么是ORM

  • ORM(Object Relational Mapping)对象关系映射,指在关系型数据库和对对象之间做一个映射,就可以像平时操作对象一样操作数据库。

使用步骤

  • 编写mapper接口
  • 编写mapper映射文件
  • 配置mybatis全局配置文件
  • 加载全局配置文件,创建SqlSessionFactory对象
  • 使用SqlSessionFactory对象创建SqlSession对象
  • SqlSession调用xml映射文件中的sql进行CURD

示例

  • 准备工作:创建数据库、表、Java Bean。

数据库表结构
/**
 * 图书表
 */
public class Book {

    private String bookId;          //图书编号
    private String name;            //图书名
    private Integer number;         //图书数量

    public String getBookId() {
        return bookId;
    }

    public void setBookId(String bookId) {
        this.bookId = bookId == null ? null : bookId.trim();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public Integer getNumber() {
        return number;
    }

    public void setNumber(Integer number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return "Book{" +
                "bookId='" + bookId + '\'' +
                ", name='" + name + '\'' +
                ", number=" + number +
                '}';
    }
}
  • pom.xml 导入mybatis依赖,博主这里导入的是3.5.3版本
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.3</version>
</dependency>
  • 编写mapper接口
public interface BookMapper {

    /**
     * 添加图书
     * @param book
     * @return
     */
    int add(Book book);

    /**
     * 修改图书
     * @return
     */
    int update(Book book);

    /**
     * 删除图书
     * @return
     */
    int delete(int id);

    /**
     * 查询图书
     * @return
     */
    int query();

}
  • 编写mapper映射文件
<?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.windpursuer.mapper.BookMapper"><!--这个namespace指向你的mapepr接口-->
    <insert id="add" parameterType="com.windpursuer.bean.Book">
        insert into book (book_id,name,number)
        values(#{bookId},#{name},#{number})
    </insert>
    <update id="update" parameterType="com.windpursuer.bean.Book">
        update book
        set name = #{name},number=#{number}
        where book_id = #{bookId}
    </update>
    <delete id="delete" parameterType="int">
        delete from book
        where book_id = #{bookId}
    </delete>
    <select id="query" resultType="com.windpursuer.bean.Book">
        select * from book
    </select>

</mapper>
  • 编写mybatis全局配置文件
<?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.cj.jdbc.Driver"/><!--数据库驱动-->
                <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/><!--url-->
                <property name="username" value="root"/><!--数据库用户名-->
                <property name="password" value="123456"/><!--密码-->
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="BookMapper.xml"/><!--绑定mapper映射文件-->
    </mappers>
</configuration>
  • 加载全局配置文件,创建SqlSessionFactory对象,这里使用了MybatisUtils工具类的方式
public class MybatisUtils {
    private static SqlSessionFactory factory = null;
    private static ThreadLocal<SqlSession> tl = new ThreadLocal<SqlSession>();
    static {
        // 1 读取配置文件 config.xml
        InputStream in = null;
        try {
            in = Resources.getResourceAsStream("mybatis-config.xml");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        // 2 创建SqlSessionFactory
        factory = new SqlSessionFactoryBuilder().build(in);
    }

    public static SqlSession openSession() {
        // 3 创建SqlSession
        SqlSession sqlSession = tl.get();
        if (sqlSession == null) {
            sqlSession = factory.openSession();
            tl.set(sqlSession);
        }
        return sqlSession;

    }

    public static void close(SqlSession sqlSession) {

        if (sqlSession != null) {
            tl.remove();
            sqlSession.close();
        }

    }

}
  • 编写测试类
public class MybatisTest {


    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.openSession();

        Book book = new Book();
        book.setBookId(1004);
        book.setName("Python");
        book.setNumber(10);
        //添加图书
        int result = sqlSession.getMapper(BookMapper.class).add(book);
        if (result == 1){
            System.out.println("添加成功");
        }

    }

}

最后

以上就是初步了解mybatis,mybatis使用步骤啦!其中还有很多细节的地方,博主后续会继续更新,遇到问题的小伙伴也可以在文章下方评论区进行互动。

评论

  1. 陈阿明
    Edge
    4月前
    2021-3-24 14:57:48

    啊哈哈哈哈

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇