开发者

Mybatis使用详细说明

目录
  • 什么是MyBATis?
  • 为什么选择MyBatis?
    • 与其它持久层框架的对比
  • 环境搭建
    • 实体类设计
      • Mapper 接口设计
        • Mapper XML 映射文件
          • 动态SQL:灵活构建查询

            什么是MyBatis?

            MyBatis 是一款优秀的 Java 持久层框架,它通过 XML 或注解的方式将 Java 对象与数据库中的记录进行映射。与传统的 JDBC 相比,MyBatis 极大地简化了数据库操作代码,让开php发者能够更专注于业务逻辑而不是繁琐的数据访问细节。

            MyBatis 的核心特点:

            简化了 JDBC 的复杂操作

            支持动态 SQL,能够根据条件灵活构建查询语句

            提供了强大的映射机制,支持复杂的对象关系映射

            与 Spring 等主流框架无缝集成

            学习曲线平缓,配置灵活

            为什么选择MyBatis?

            与其它持久层框架的对比

            相比于 Hibernate 这样的全自动 ORM 框架,MyBatis 提供了更多的灵活性。MyBatis 允许你直接编写原生 SQL,这在处理复杂查询或需要优化 SQL 性能时具有明显优势。

            主要优势:

            灵活性:可以编写原生 SQL,灵活控制查询逻辑

            性能优化:直接控制 SQL 语句,便于性能调优

            简化开发:减少了大量 JDBC 模板代码

            易于学习:学习曲线平缓,上手快速

            与 Spring 集成良好:可以无缝集成到 Spring 框架中

            环境搭建

            创建springboot项目

            Mybatis使用详细说明

             导入mybatis起步依赖、mysql驱动及其他需求(首次使用下载时间会较长)

            Mybatis使用详细说明

             连接数据源

            Mybatis使用详细说明

            Mybatis使用详细说明

             建立数据库

            范例代码:

            -- 创建数据库
            CREATE DATABASE IF NOT EXISTS demo;
            USE demo;
            
            -- 创建员工表
            CREATE TABLE employees (
                                       id INT PRIMARY KEY AUTO_INCREMENT,
                                       employee_id VARCHAR(20) UNIQUE NOT NULL,
                                       name VARCHAR(50) NOT NULL,
                                       gender ENUM('男', '女') NOT NULL,
                                       age INT,
                                       department VARCHAR(50) NOT NULL,
                                       position VARCHAR(50) NOT NULL,
                                       salary DECIMAL(10,2),
                                       hire_date DATE NOT NULL,
                                       email VARCHAR(100),
                                       phone VARCHAR(20),
                                       address VARCHAR(200),
                                       created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            );
            
            -- 插入示例数据
            INSERT INTO employees (employee_id, name, gender, age, department, position, salary, hire_date, email, phone, address)
            VALUES
            ('EMP001', '张三', '男', 28, '技术部', '软件工程师', 15000.00, '2020-03-15', 'zhangsan@company.com', '13800138001', '北京市海淀区'),
            ('EMP002', '李四', '女', 32, '人力资源部', 'HJaBRBLrR经理', 12000.00, '2018-06-20', 'lisi@company.com', '13800138002', '北京市朝阳区'),
            ('EMP003', '王五', '男', 35, '财务部', '财务主管', 18000.00, '2016-09-10', 'wangwu@company.com', '13800138003', '北京市西城区'),
            ('EMP004', '赵六', '女', 26, '市场部', '市场专员', 8000.00, '2021-01-08', 'zhaoliu@company.com', '13800138004', '北京市东城区'),
            ('EMP005', '钱七', '男', 30, '技术部', '高级工程师', 20000.00, '2019-11-25', 'qianqi@company.com', '13800138005', '北京市丰台区'),
            ('EMP006', '孙八', '女', 29, '销售部', '销售经理', 16000.00, '2020-07-30', 'sunba@company.com', '13800138006', '北京市石景山区'),
            ('EMP007', '周九', '男', 27, '技术部', '前端开发', 13000.00, '2021-03-12', 'zhoujiu@company.com', '13800138007', '北京市通州区'),
            ('EMP008', '吴十', '女', 33, '行政部', '行政主管', 11000.00, '2017-05-18', 'wushi@company.com', '13800138008', '北京市昌平区'),
            ('EMP009', '郑十一', '男', 31, '财务部', '会计', 10000.00, '2019-08-22', 'zhengshiyi@company.com', '13800138009', '北京市大兴区'),
            ('EMP010', '王芳', '女', 25, '市场部', '市场助理', 7000.00, '2022-02-14', 'wangfang@company.com', '13800138010', '北京市房山区');

            范例效果:

            Mybatis使用详细说明

             若已有数据库,则直接连接

            Mybatis使用详细说明

             在application.properties文件中配置数据库连接信息:

            Mybatis使用详细说明

            spring.application.name=demo
            #驱动类名称
            spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
            #数据库连接的url
            spring.datasource.url=jdbc:mysql://localhost:3306/demo
            #连接数据库的用户名
            spring.datasource.username=root
            #连接数据库的密码
            spring.datasource.password=1234

            实体类设计

            在 MyBatis 中,实体类对应数据库中的表结构。良好的实体类设计是使用 MyBatis 的基础。

            @Data
            @NoArgsConstructor
            @AllArgsConstructor
            public class Emp {
                private Integer id; //ID
                private String username; //用户名
                private String password; //密码
                private String name; //姓名
                private Short g编程ender; //性别 , 1 男, 2 女
                private String image; //图像url
                private Short job; //职位 , 1 班主任 , 2 讲师 , 3 学工主管 , 4 教研主管 , 5 咨询师
                private LocalDate entrydate; //入职日期
                private Integer deptId; //部门ID
                private LocalDateTime createTime; //创建时间
                private LocalDateTime updateTime; //修改时间
            }
            JaBRBLr

            Mapper 接口设计

            Mapper 接口定义了数据访问的方法,可以使用注解完成接口的实现。(例如实例代码中“分页查询”“查询数据总数”“新增员工”“根据id查询员工信息”这些功能的实现)

            @Mapper
            public interface EmpMapper {
            
                //分页查询
                @Select("select * from emp limit #{start},#{pageSize}")
                List<Emp> page(Integer start, Integer pageSize);
            
                //条件分页查询
                List<Emp> list(Integer start, Integer pageSize,String name, Short gender, LocalDate begin, LocalDate end);
            
                //查询数据总数
                @Select("select count(*) from emp")
                Long count();
            
                //批量删除员工
                void delete(List<Integer> ids);
            
                //新增员工
                @Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) " +
                        "value(#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})")
                void save(Emp emp);
            
                //根据id更新员工信息
                void update(Emp emp);
            
                //根据id查询员工信息
                @Select("select * from emp where id = #{id}")
                Emp getById(Integer id);
            }

            Mapper XML 映射文件

            XML 映射文件是 MyBatis 的核心,它定义了 SQL 语句和结果映射。在sql语句较复杂的情况下,不建议使用注解实现mapper接口(这样会使得代码显得杂乱不易阅读),而是在XML映射文件中编写sql语句。需要注意的是,XML映射文件的路径名称必须于mapper接口路径名称相同。(EmpMapper接口文件路径名称为:cn.nuist.tlias.mapper.EmpMapper,XML映射文件路径名称也为:cn.nuist.tlias.mapper.EmpMapper)

            Mybatis使用详细说明

             mapper接口中的“分页条件查询”“批量删除员工信息”和“根据id更新员工信息”功能在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="cn.nuist.tlias.mapper.EmpMapper">
            
                <select id="list" resultType="cn.nuist.tlias.pojp.Emp">
                    select *
                    from emp
                    <where>
                        <if test="name != null and name != ''">
                            name like concat('%',#{name},'%')
                        </if>
                        <if test="gender != null">
                            and gender = #{gender}
                        </if>
                        <if test="begin != null and end != null">
                            and entrydate between #{begin} and #{end}
                        </if>
                    </where>
                    order by update_time desc
                    limit #{start},#{pageSize}
                </select>
            
                <delete id="delete">
                    delete
                    from emp
                    where id in
                    <foreach collection="ids" item="id" open="(" separator="," close=")">
                        #{id}
                    </foreach>
                </delete>
                
                <update idjs="update">
                    update emp
                    <set>
                        <if test="username != null and username != ''">
                            username = #{username}
                        </if>
                        <if test="name != null and name != ''">
                            name = #{name}
                        </if>
                        <if test="gender != null">
                            gender = #{gender}
                        </if>
            
                        <if test="image != null and image != ''">
                            image = #{image}
                        </if>
                        <if test="job != null">
                            job = #{job}
                        </if>
                        <if test="entrydate != null">
                            entrydate = #{entrydate}
                        </if>
                        <if test="deptId != null">
                            dept_id = #{deptId}
                        </if>
                        <if test="updateTime != null">
                            update_time = #{updateTime}
                        </if>
                    </set>
                    where id = #{id}
                </update>
            
            </mapper>

            动态SQL:灵活构建查询

            MyBatis 的强大特性之一就是动态 SQL,它允许你根据条件动态生成 SQL 语句。

            <if> :根据条件包含 SQL 片段

            <choose>, <when>, <otherwise>:实现类似 switch-case 的逻辑

            <where>:智能处理 WHERE 条件,自动去除多余的 AND/OR

            <set>:用于 UPDATE 语句,智能处理 SET 子句

            <foreach>:遍历集合,常用于 IN 条件或批量操作

            <trim>:更灵活的字符串修剪功能

            <bind>:创建变量并在当前上下文使用

            到此这篇关于Mybatis使用详细说明的文章就介绍到这了,更多相关Mybatis使用内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

            0

            上一篇:

            下一篇:

            精彩评论

            暂无评论...
            验证码 换一张
            取 消

            最新开发

            开发排行榜