天津储鑫盛钢材现货供应商 发表于 2023-8-13 17:05:44

MyBatis--快速入门

MyBatis--1.快速入门

MyBatis简介

原始jdbc操作的弊端


[*]创建、释放频繁导致系统资源浪费
[*]sql语句在代码中硬编码,不易维护
[*]查询操作时,需要手动将结果集中的数据封装到实体中。插入操作同理需要手动
解决方案:

[*]使用数据库连接池初始化连接资源
[*]将sql语句抽取到xml配置文件中
[*]使用反射、内省等底层技术,自动将实体与表进行属性和字段的自动映射
MyBatis简介

mybatis 是一个优秀的基于java的持久层框架,它内部封装了 jdbc,使开发者只需要关注sql语句本身,而不需要花费精力 去处理加载驱动、创建连接、创建statement等繁杂的过程。
mybatis通过xml或注解的方式将要执行的各种 statement配 置起来,并通过java对象和statement中sql的动态参数进行 映射生成最终执行的sql语句。
最后mybatis框架执行sql并将结果映射为java对象并返回。采 用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了 封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作 。
MyBatis快速入门

MyBatis开发步骤:

[*]添加MyBatis的坐标
    <dependencies>
      <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
      </dependency>

      <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
      </dependency>

      <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
      </dependency>

      <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
      </dependency>
    </dependencies>
[*]创建user数据表
https://img2023.cnblogs.com/blog/2844064/202308/2844064-20230813160134213-268660650.png
[*]编写user实体类
public class User {
    private int id;
    privateString username;
    privateString password;

    @Override
    public String toString() {
      return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public int getId() {
      return id;
    }

    public void setId(int id) {
      this.id = id;
    }

    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;
    }
}
[*]编写映射文件UserMapper.xml(写sql语句)
<?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="userMapper">

    <select id="findAll" resultType="com.xxx.User">
      select* from user
    </select>

</mapper>
[*]编写核心文件SqlMapConfig.xml(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"></transactionManager>

            <dataSource type="POOLED">

                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/jdbcstudy"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
      </environment>
    </environments>
   
   
    <mappers>
      <mapper resource="com/xxx/mapper/UserMapper.xml"/>
    </mappers>
</configuration>
[*]编写测试类
在test目录下创建一个测试类
package com.xxx;

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.apache.log4j.lf5.util.Resource;
import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class test {
    @Test
    publicvoidtest1() throws IOException {
//      获取配置文件Resources是ibatis包下的
      InputStream resourceAsFile = Resources.getResourceAsStream("sqlMapConfig.xml");
//      获得session工厂对象
      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsFile);
//      获得session会话对象
      SqlSession sqlSession = sqlSessionFactory.openSession();
//      执行操作,userMapper是映射文件中的一个命名空间,findAll是该命名空间下的一个id
      List<User> userList = sqlSession.selectList("userMapper.findAll");
//      打印数据
      System.out.println(userList);
//      释放资源
      sqlSession.close();
    }
}结果:
https://img2023.cnblogs.com/blog/2844064/202308/2844064-20230813160158746-347501024.png
映射文件概述

https://img2023.cnblogs.com/blog/2844064/202308/2844064-20230813160212512-1490944318.png
MyBatis增删改查

insert操作

映射文件中:
    <insert id="save" parameterType="com.xxx.User">
--         参数是com.xxx.User的属性名
      insertinto user values (#{id},#{username},#{password})
    </insert>测试:
//      模拟user对象
      User user = new User();
      user.setId(5);
      user.setPassword("123456");
      user.setUsername("lili");
//      获取配置文件Resources是ibatis包下的
      InputStream resourceAsFile = Resources.getResourceAsStream("sqlMapConfig.xml");
//      获得session工厂对象
      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsFile);
//      获得session会话对象
      SqlSession sqlSession = sqlSessionFactory.openSession();
//      执行操作,userMapper是映射文件中的一个命名空间,findAll是该命名空间下的一个id
      sqlSession.insert("userMapper.save",user);
//      MyBatis更新时需要手动提交事务,在sqlSessionFactory.openSession()设置参数为true会自动提交
                sqlSession.commit();
//      释放资源
      sqlSession.close();相关注意:
https://img2023.cnblogs.com/blog/2844064/202308/2844064-20230813160233280-663053361.png
update操作

<update id="update" parameterType="com.xxx.User">
    update usersetusername=#{username},password=#{password} where id=#{id}
</update>测试和insert同理,只需要修改
sqlSession.update("userMapper.update",user);delete操作

<delete id="delete"parameterType="java.lang.Integer">
    delete from user whereid=#{id}
</delete>测试和insert同理,只需要修改
sqlSession.delete("userMapper.delete",7);MyBatis核心配置文件

environments标签介绍

https://img2023.cnblogs.com/blog/2844064/202308/2844064-20230813160250690-404779943.png
事务管理器和数据源类型:
https://img2023.cnblogs.com/blog/2844064/202308/2844064-20230813160353125-1620363289.png
mappers标签

使用mapper加载映射时,加载方式有:
https://img2023.cnblogs.com/blog/2844064/202308/2844064-20230813160412480-1536539436.png
Properties标签

实际开发中,习惯将数据源的配置信息单独抽取为一个properties文件,改标签可以加载额外配置的properties文件
https://img2023.cnblogs.com/blog/2844064/202308/2844064-20230813160431390-509809497.png
typeAliases标签

https://img2023.cnblogs.com/blog/2844064/202308/2844064-20230813160522654-1547162487.png
MyBatis的相应API

sqlSession工厂构造器sqlSessionFactoryBuilder

https://img2023.cnblogs.com/blog/2844064/202308/2844064-20230813160541634-396938589.png
sqlSessionFactory

https://img2023.cnblogs.com/blog/2844064/202308/2844064-20230813160554067-7098542.png
sqlSession

https://img2023.cnblogs.com/blog/2844064/202308/2844064-20230813160615344-898660223.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: MyBatis--快速入门