Mybatis-基本的使用步骤

ORM

面向对象的方式操作数据库

Hibernate 纯ORM框架

Mybatis概要

apache下的开元的项目 Ibatis

  • 半自动的ORM框架
  • 持久化

为什么要学习Mybatis

  • 传统的JDBC操作需要建立连接释放资源
  • SQL语句写在Java代码里,mybatis语句统一管理(xml文件中)
  • SQL语句参数问题 ,
  • 结果集处理 ,自动生成对象

优缺点

  • 易于上手
  • 灵活,耦合度低(sql语句跟java代码分离)

缺点

  • 移植性比较差

基础使用

  1. 导入依赖
  2. 全局配置文件
  3. 编写Mapper接口
  4. 创建 mapper.xml文件
  5. 创建持久化对象
  6. 编写测试文件

创建Maven工程

导入依赖

<properties>
    <mybatis.version>3.5.6</mybatis.version>
</properties>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>${mybatis.version}</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
</dependency>

创建配置文件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="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://127.0.0.1:3306/mybatis_test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

新建一个mapper的包(dao)

一个mapper接口对应一个表的操作

public interface UserMapper {
    //使用注解的方式进行传参
    int insert(@Param("user") User user);
    User selectById(@Param("userId") int userId);
}

在resources下新建mapper/XxxMapper.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.smart.mybatis.mapper.UserMapper">
    <!--hibernate  注解的方式-->
    <!--mybatis里  resultMap来映射  PO -->
    <resultMap id="BaseResultMapper" type="com.smart.mybatis.entity.User">
        <!--   对应数据的ID-->
        <id column="user_id" property="userId"/>
        <!--    普通字段-->
        <result column="username" property="username"/>
        <result column="password" property="password"/>
        <result column="status" property="status"/>
    </resultMap>
    <!--结果集-->
    <insert id="insert">
        <!--   接口中的参数如何在xml中使用 -->
        insert into user (username, password)
        values (#{user.username}, #{user.password})
    </insert>

    <select id="selectById" resultMap="BaseResultMapper">
        select user_id, username, password, status
        from user
        where status = 0;
    </select>
</mapper>

测试代码

public class TestMain {
    public static void main(String[] args) {
        //工厂模式
        // 构建者模式
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(
                TestMain.class.getClassLoader().getResourceAsStream("mybatis-config.xml")
        );
        // 原生mybatis 默认为 false //
        SqlSession sqlSession = sqlSessionFactory.openSession(true);

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//        User user = new User();
//        user.setUsername("admin");
//        user.setPassword("123456");
//        int insert = mapper.insert(user);
//        System.out.println(insert);
        User user = mapper.selectById(2);
        System.out.println(user);
    }
}

SQL语句

create table user
(
    user_id  int auto_increment comment '主键'
        primary key,
    username varchar(64)       not null comment '用户名',
    password varchar(128)      not null comment '密码',
    status   tinyint default 0 null comment '状态 0表示未删除 1 表示删除',
    constraint username
        unique (username)
)
    comment '用户表';


多对多一定要有第三张中间表
#用户对多角色  多角色对多权限
#角色表
create table roles(
    role_id int auto_increment primary key,
    role_name varchar(64) not null unique comment '角色名字',
    decs varchar(128),
    is_del int(10) default 0 comment '0表示未删除1表示删除'
)comment '角色表';

#权限表
create table privilege(

    privilege_id int auto_increment primary key ,
    name varchar(128) not null comment '权限名',
    decs varchar(128) comment '权限的说明',
    is_del int default 0 comment '0表示未删除1表示删除'
);

# 中间表
create table roles_privilege_relation(
    id int auto_increment primary key ,
    privilege_id int references privilege(privilege_id),
    role_id int references roles(role_id)

);

Mybatis 的使用步骤:
  • 引入Mybatis 包依赖,创建Mybatis 的 config.xml 的配置文件链接数据库
  • 创建数据库表,设置外键等依赖
  • 反射生成实体类
  • 实现对应的接口,通过mapper.xml 实现(namespace=“接口”)使用@Param传参
  • 实现类mapper.xml中 设置resultMap 配置对应列名
  • 实现对应功能

总结 Mybatis:

mapper接口:
  • 方法命名 一般SQL关键字命名,与实体类一致
  • 返回的类型 查询返回单个对象或者集合 增删改返回影响的行数
  • 参数 @Param(“value”)

mapper.xml:

  • mapper namespace=“对应的接口完整地址+类名”
resultMap
  • 属性指向对象(不一定非要指定持久化对象entity)
  • entity 持久化 实现序列化接口 属性使用包装类型 提供getter和 setter方法 提供无参的构造方法
  • 子元素

id对应的逐渐

result对应普通字段

  • 公共属性:column property (解决列名不一致)

association 一对一的映射关系

  • 属性 :property 对应对象中的属性(如ID)
  • resultMap 执行另一个resultMap

collection 一对多

  • 属性 :property 对应对象中的属性(如ID)
  • resultMap 执行另一个resultMap

select

属性
id 重点指向接口的方法的名称
resultMap 重点返回结果集
resultType返回一个指定的对象
paramterType指定参数的类型(@Param()注解代替)
flushCache清空二级缓存
userCache执行查询语句使用你二级缓存 默认开始

insert

属性说明
id对象接口的方法名
keyproperty指定返回自增ID的赋值属性
userGeneratedKeys获取数据库的自增ID 默认fales

映射关系

一对一 一对多 多对多

多表查询 使用外连接 普通多表查询() < 子查询()< 外连接()

动态sql (在数据入口处对数据进行校验)

  • if

  • <if text="只做简单的逻辑判断 比如是否为null">
    
  • trim

  • <trim prefix="WHERE 或者 SET" prefixOverrides="AND 或者 OR" >
    
  • foreach

  • <foreach item="" collection="集合 |数组 |map " open="(" close=")" index="索引">
    separator="分隔符" >
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值