Mybatis 快速入门实战笔记

Mybatis 入门实战笔记

Mybatis 是一个实现了数据持久化的 ORM 框架,简单理解就是对 JDBC 进行了封装。

优点:

  • 相比 JDBC 减少了大量代码量,简单易学。
  • 使用灵活,SQL 语句写在 XML 里,从程序代码中彻底分离,降低了耦合度,便于管理。
  • 提供 XML 标签,支持编写动态 SQL 语句。
  • 提供映射标签,支持对象与数据库的 ORM 字段映射关系。

缺点:

  • SQL 语句编写工作量较大,尤其是字段和关联表多时。
  • SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

快速入门实例

环境搭建

新建一个 maven 工程,pom.xml依赖如下:

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.17</version>
    </dependency>
    
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.12</version>
    </dependency>
</dependencies>

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

创建数据库表:

CREATE TABLE t_user (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR (20),
  PASSWORD VARCHAR (20),
  age INT
)

创建表对应的实体类:

@Data
@AllArgsConstructor
public class User {
   

    private Integer id;

    private String username;
    
    private String password;
    
    private int age;
}

创建 mybatis 的配置文件 config.xml,放在 resources 目录下:

<?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>
    
    <!-- 配置 mybatis 运行环境 -->
    <environments default="dev">
        <environment id="dev">
            <!-- 事务管理 -->
            <transactionManager type="JDBC"/>
            <!-- 数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?useUnicode=true&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="sjh2019"/>
            </dataSource>
        </environment>
    </environments>
    
</configuration>

使用原生接口

Mybatis 框架需要开发者自定义 SQL 语句,写在 xxxMapper.xml中,实际开发中会为每个实体类创建对应的 XML 文件,定义管理该对象数据的 SQL。

创建一个 User 实体类对应的 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.sjh.mapper.UserMapper">

    <!-- 添加 -->
    <insert id="save" parameterType="com.sjh.entity.User">
        insert into t_user(username, password, age) values (#{username}, #{password}, #{age})
    </insert>
    

</mapper>
  • namespace 通常设置为文件所在包+文件名的形式。

  • insert 标签表示执行添加操作,select 标签表示查询操作,update 标签表示更新操作,delete 标签表示删除操作。

  • id 属性是实际调用 Mybatis 方法时需要用到的参数。

  • parameterType 属性是调用对应方法时参数的数据类型。


在全局配置文件 config.xml 中配置UserMapper.xml

<mappers>
    <mapper resource="com/sjh/mapper/UserMapper.xml"/>
</mappers>

调用 Mybatis 的原生接口执行添加操作:

public class MybatisTest {
   

    public static void main(String[] args) {
   
        //加载配置文件
        InputStream is = MybatisTest.class.getClassLoader().getResourceAsStream("config.xml");
        //创建 SqlSession 对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(is);
        SqlSession sqlSession = sessionFactory.openSession();
        //执行添加操作
        String statement = "com.sjh.mapper.UserMapper.save";//拼接配置文件的 namespace + sql标签的id
        sqlSession.insert(statement, new User(1,"sjh","123",24));
        sqlSession.commit();
        sqlSession.close();
    }
}

执行之后查看数据库:


Mapper 代理实现自定义接口

自定义接口和方法:

public interface UserRepo {
   
    
    int save(User user);
    
    int update(User user);
    
    int deleteById(Integer id);
    
    List<User> findAll();
    
    User findById(Integer id);
}

编写与方法相对应的 UserRepo.xml文件:

statement 标签可根据 SQL 执行的业务选择 insert、delete、update、select标签中的一个。

Mybatis 框架会根据规则自动创建接口的实现类的代理对象。

规则:

  • XML 文件中 namespace 的值为接口的全类名。
  • XML 文件中 statement 的 id 为接口中对应的方法名。
  • XML 文件中 statement 的 parameterType 和接口中对应方法的参数类型一致。
  • XML 文件中 statement 的 resultType 和接口中对应方法的返回值类型一致。
<?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.sjh.repository.UserRepo">

    <insert id="save" parameterType="com.sjh.entity.User">
        insert into t_user(username, password, age) values (#{username}, #{password}, #{age}) 
    </insert>

    <update id="update" parameterType="com.sjh.entity.User">
        update t_user set username = #{username}, password = #{password}, age = #{age}) 
    </update>
    
    <delete id="deleteById" parameterType="java.lang.Integer">
        delete from t_user where id = #{id}
    </delete>
    
    <select id="findAll" resultType="com.sjh.entity.User">
        select * from t_user
    </select>

    <select id="findById" parameterType="java.lang.Integer" resultType="com.sjh.entity.User">
        select * from t_user where id = #{id}
    </select>
    
</mapper>

在全局配置文件 config.xml 中配置UserRepo.xml

<mapper resource="com/sjh/repository/UserRepo.xml"/>

通过接口的代理对象执行查询操作:

public static void main(String[] args) {
   
    //加载配置文件
    InputStream is = MybatisTest.class.getClassLoader().getResourceAsStream("config.xml");
    //创建 SqlSession 对象
    SqlSessionFactoryBuilder
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值