0


mybatis映射器用法

上周的博客留了个伏笔,使用JDBC连接数据库与java会有很多缺点和弊端,而为了解决这些弊端,开发者们推出了一种orm模型。

1.什么是ORM模型

ORM 模型是数据库的表和简单 Java 对象(Plain Ordinary Java Object,简称 POJO)的映射关系模型,主要解决数据库数据和 POJO 对象的相互映射。

1.1orm模型分类

现在比较常见的orm模型有两种,分别是Hibernate和MyBatis,本文就重点来给大家讲讲mybatis映射器的具体用法。

hibernate是全自动的,而mybatis是半自动的,其区别在于hibernate可以自动化生成sql语句,而mybatis不能。这种区别就好像冲锋枪和拉栓步枪,冲锋枪只需要突突突,而拉栓步枪需要拉大栓。

两种模型的使用环境也不一样,hibernate由于sql语句固定,所以优化和修改起来困难,适用于中小企业等对于需求变化不多的项目。至于mybatis专注于sql本身,虽然需要自己写sql语句,但是相对的优化与修改就比较方便,适用于需求变化多的项目。至于二者孰优孰劣,就要看不同的使用场景了。

1.2为什么要有mybatis

奥卡姆剃刀原理,如无必要,勿增实体。

而mybatis映射器的出现,正是为了解决jdbc的几个弊端与问题的:

问题一:数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。

mybatis 解决方式:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。

问题二:Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

mybatis 解决方式:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

问题三:向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

mybatis 解决方式:
Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

问题四:对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象 解析比较方便。

mybatis 解决方式:
Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

2.mybatis具体怎么用

2.1前期步骤

在lib文件夹下需要加入这几个架包,可以在java官网下到。

然后点击下图按键:

这样就可以生成成功构建项目架包了。

2.2将配置文件放入项目

mybatis-config.xml为主配置文件,将主配置文件放入src文件夹下。

<?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>
<typeAliases>
    <package name = "com.ape.bean"/>
</typeAliases>
    <!-- 和spring整合后 environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url"
                    value="jdbc:mysql://localhost:3306/test?serverTimezone=GMT" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/ape/mapper/TeacherMapper.xml"/>
    </mappers>
</configuration>

实体类和 接口文件跟之前的jdbc一样,这里我们把 sql语句放到了sqlMapper文件中,让sql语句进入到了配置文件中从而解决sql硬编码问题。

打开
sqlMapper.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="org.mybatis.example.BlogMapper">
     <select id="chazhaosuoyouxuesheng" resultType="com.ape.bean.Student">
        select * from student
    </select>
    <select id="findStu" resultType="com.ape.bean.Student" parameterType="int">
        <!-- #{名字} 用来接收入参 -->
        select * from student where sid = #{v}
    </select>
    <insert id="tianjiaxuesheng"  parameterType="com.ape.bean.Student" >
    
        insert into student(sname,birthday,ssex,classid)
        values(#{sname},#{birthday},#{ssex},#{classid})
    
    </insert>
    <update id="xiugaixuesheng" parameterType="com.ape.bean.Student">
        update student set sname=#{sname},birthday=#{birthday},ssex = #{ssex},
        classid=#{classid} where sid = #{sid}
    </update>

    <delete id="shanchuxuesheng" parameterType="int">
        delete * from student where sid = #{v}
    </delete>

</mapper>

2.3创建SqlSession

创建了SqlSession文件,就可以在java中做数据库的增删改查等操作了

package com.ape.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.ape.bean.Teacher;
import com.ape.dao.DaoUtil;
import com.ape.dao.ITeacherDao;

public class TeacherDaoImpl implements ITeacherDao  {

    @Override
    public int addTeacher(Teacher s) {
        SqlSession sqlSession = DaoUtil.getSqlSession();
        int ret = sqlSession.insert("tianjiaxuesheng", s);
        
        // 处理事务 mybatis 事务要手动处理
        if(ret > 0) {
            // 事务的提交
            sqlSession.commit();
        }else {
            // 事务的回滚
            sqlSession.rollback();
        }
        
        
        DaoUtil.closeSource(sqlSession);
        return ret;
    }

    @Override
    public int updateTeacher(Teacher s) {
        
        SqlSession sqlSession = DaoUtil.getSqlSession();
        int ret = sqlSession.update("xiugaixuesheng", s);

        if(ret > 0) {
            sqlSession.commit();
        }else {
            sqlSession.rollback();
        }
        
        DaoUtil.closeSource(sqlSession);
        
        return ret;
    }

    @Override
    public int deleteTeacher(int sid) {
            SqlSession sqlSession = DaoUtil.getSqlSession();
        int ret = sqlSession.delete("shanchulaoshi", sid);
        if(ret > 0) {
            sqlSession.commit();
        }else {
            sqlSession.rollback();
        }
        return ret;
    }

    @Override
    public List<Teacher> findAllTeacher() {
        SqlSession sqlSession = DaoUtil.getSqlSession();
        List<Teacher> slist = sqlSession.selectList("chazhaosuoyouxuesheng");
        DaoUtil.closeSource(sqlSession);
        return slist;
    }

    @Override
    public Teacher findTeacherBySid(int sid) {
        SqlSession sqlSession = DaoUtil.getSqlSession();
        Teacher s = sqlSession.selectOne("findStu",sid);
        DaoUtil.closeSource(sqlSession);
        return s;
    }

}

3.总结

mybatis的基本操作就是以上,而其进阶操作可以通过使用动态代理,省略掉imp文件,不用创建实现类,而在之后,连sql语句也可以通过动态sql语句的设置,使得sql语句更加灵活,可以使用注解的方式,使得简单的sql语句脱离xml文件的束缚,如此种种,便是我这一周的学习所得。

行文至此,不过一些拾人牙慧,因为以鄙人的水平,短时间内也很难有建设性的创造,希望未来可以将所学所用投入工作中,创造价值,如果能使自己的知识技能更进一步,那是我之幸运。

文末借唐朝李泌十七岁时写作的一首诗,与诸君共勉。

长歌行

    唐-李泌

天覆吾,地载吾,天地生吾有意无。

不然绝粒升天衢,不然鸣珂游帝都。

焉能不贵复不去,空作昂藏一丈夫。

一丈夫兮一丈夫,千生气志是良图。

请君看取百年事,业就扁舟泛五湖。

标签: mybatis java 数据库

本文转载自: https://blog.csdn.net/weixin_61789925/article/details/126146899
版权归原作者 涂碧宇 所有, 如有侵权,请联系我们删除。

“mybatis映射器用法”的评论:

还没有评论