美文网首页老孙说Java
ORM框架-MyBatis(一)

ORM框架-MyBatis(一)

作者: 老孙说IT | 来源:发表于2020-02-29 23:36 被阅读0次

    一、为什么学MyBatis

    1、发现问题

    2、问题总结

    二、MyBatis概述

    1、概念

    优秀的数据持久层框架,在实体类和sql之间建立映射关系,半自动化的ORM实现,

    封装性低于Hibernate,性能优秀、小巧易学。

    2、资源

    https://mybatis.org/mybatis-3/zh/index.html

    3、思想

    程序和sql语句分离,配置扩展方便

    4、架构

    5、优缺点

    优点:

    a、小巧易上手,是最简单的持久化框架

    b、程序与sql分离,管理、扩展、维护方便,可重用性强

    c、提供XMl标签,支持编写动态sql

    缺点:

    a、sql语句编写量大,对编程人员sql功底有一定要求

    b、由于sql语句依赖于数据库、导致数据库移植性差

    三、快速入门和基本操作

    1、创建项目

    创建一个Maven项目,引入jar或POM依赖

    <dependencies>

    <!--加入mybatis依赖库 -->

        <dependency>

        <groupId>org.mybatis</groupId>

        <artifactId>mybatis</artifactId>

        <version>3.4.4</version>

        </dependency>

        <!--加入mysql依赖库 -->

        <dependency>

        <groupId>mysql</groupId>

        <artifactId>mysql-connector-java</artifactId>

        <version>5.1.10</version>

    </dependency>

    </dependencies>

    2、编写配置文件

    A、db.properties

    driver=com.mysql.jdbc.Driver

    url=jdbc:mysql://localhost:3306/ms

    username=root

    password=admin

    B、mybatis.xml

    a、加载db

    b、取别名

    c、配置MyBatis的多套运行环境

    d、映射器-告诉MyBatis去哪里找到sql映射文件

    <?xmlversion="1.0" encoding="UTF-8"?>

    <!DOCTYPE configuration

    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-config.dtd">

    <configuration>

    <!--引入db.propertis文件 -->

    <propertiesresource="db.properties"/>

    <!--给实体类取别名-->

    <typeAliases>

    <!--简化在mapper配置文件中使用 -->

        <typeAliastype="com.ls.Student"alias="Student"/>

    </typeAliases>

    <!--配置MyBatis的多套运行环境-->

        <environmentsdefault="dev">

        <!--每一个environment关联一个连接 -->

            <environmentid="dev">

            <!--事务管理模式 (采用jdbc的事务管理)-->

                <transactionManagertype="JDBC"/>

                <!--配置数据源 -->

                <!--POOLED:Mybatis自带数据源 -->

                <dataSourcetype="POOLED">

                    <propertyname="driver"value="${driver}"/>

                    <propertyname="url"value="${url}"/>

                    <propertyname="username"value="${username}"/>

                    <propertyname="password"value="${password}"/>

                </dataSource>

            </environment>

        </environments>

        <!--映射器-告诉MyBatis去哪里找到sql映射文件 -->

        <mappers>

        <!--第1种方式-通过类资源路径获取-->

            <mapperresource="com/ls/StudentMapper.xml"/>

            <!--第2种方式-通过Url获取资源 -->

            <!-- <mapper url="f:/pMapper.xml"/> -->

        </mappers>

    </configuration>

    3、编写代码

    A、实体类

    publicclassStudent{

        privateIntegersno;

        privateStringpwd;

        privateStringsname;

        privateStringsex;

        privateIntegerage;

        privateIntegergid;

        privateStringphone;

        privateStringaddress;

        publicIntegergetSno() {

            returnsno;

        }

        publicvoidsetSno(Integersno) {

            this.sno=sno;

        }

        publicStringgetPwd() {

            returnpwd;

        }

        publicvoidsetPwd(Stringpwd) {

            this.pwd=pwd;

        }

        publicStringgetSname() {

            returnsname;

        }

        publicvoidsetSname(Stringsname) {

            this.sname=sname;

        }

        publicStringgetSex() {

            returnsex;

        }

        publicvoidsetSex(Stringsex) {

            this.sex=sex;

        }

        publicIntegergetAge() {

            returnage;

        }

        publicvoidsetAge(Integerage) {

            this.age=age;

        }

        publicIntegergetGid() {

            returngid;

        }

        publicvoidsetGid(Integergid) {

            this.gid=gid;

        }

        publicStringgetPhone() {

            returnphone;

        }

        publicvoidsetPhone(Stringphone) {

            this.phone=phone;

        }

        publicStringgetAddress() {

            returnaddress;

        }

        publicvoidsetAddress(Stringaddress) {

            this.address=address;

        }

    }

    B、映射文件

    <?xmlversion="1.0" encoding="UTF-8"?>

    <!DOCTYPE mapper

    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

    <mappernamespace="com.ls.entity.StudentMapper">

    <!--1.增加用户 -->

        <insertid="addStu"parameterType="stu"

        useGeneratedKeys="true"keyProperty="sno">

            insert into student(sname,pwd,sex,age) values(#{sname},#{pwd},#{sex},#{age})

        </insert>

        <!--2.删去用户 -->

        <deleteid="deleteStuBySno"parameterType="int">

        delete from student where sno=#{sno}

        </delete>

        <!--3.修改用户 -->

        <updateid="updateStu"parameterType="stu">

            update student set sname=#{sname} where sno=#{sno}

        </update>

        <!-- 4、查询所有 -->

        <selectid="selectAll"resultType="stu">

            select * from student

        </select>

        <!--5、查询单个 -->

        <selectid="selectBySno"resultType="stu"parameterType="int">

        select sname from student where sno=#{sno}

        </select>

    </mapper>

    4、功能测试

    A、步骤

    a1、通过流的方式读取配置文件

    a2、获得SqlSessionFactory对象

    a3、获得SqlSession对象

    a4、调用相关方法(增删改查)

    a5、提交事务

    a6、关闭资源

    a7、代码

    packagecom.ls.test;

    importjava.io.InputStream;

    importjava.util.List;

    importorg.apache.ibatis.io.Resources;

    importorg.apache.ibatis.session.SqlSession;

    importorg.apache.ibatis.session.SqlSessionFactory;

    importorg.apache.ibatis.session.SqlSessionFactoryBuilder;

    import com.ls.entity.Student;

    public class TestMyBatis{

        publicstaticvoidmain(String[]args){

            SqlSessionsession=null;

            try{

            //1.通过流的方式读取myBatis.xml配置文件

            InputStreamis=Resources.getResourceAsStream("mybatis.xml");

            //2.创建SqlSessionFactory工厂对象

            SqlSessionFactoryssf=newSqlSessionFactoryBuilder().build(is);

            //3.得到SqlSession对象

            session=ssf.openSession();

            //【添加学生】

    //      Student stu = new Student();

    //      stu.setSname("轩轩");

    //      stu.setPwd("888");

    //      stu.setSex("男");

    //      stu.setAge(18);

    //  int num=session.insert("addStu",stu);

    //  if(num>0){

    //      System.out.println("add success!");

    //  }

            //【删去学生】

    //      int num=session.delete("deleteStuBySno",22);

    //  if(num>0){

    //      System.out.println("delete success!");

    //  }

            //【修改学生】

    //      Student stu = new Student();

    //      stu.setSname("轩轩");

    //      stu.setSno(21);

    //      int num=session.update("updateStu",stu);

    //  if(num>0){

    //      System.out.println("update success!");

    //  }

            //【查询单个学生】

    //      Student stu=session.selectOne("selectBySno",20);

    //      System.out.println(stu.getSname());

            //【查询所有学生】

            List<Student>slist=session.selectList("selectAll");

            for(Studentstu:slist) {

                System.out.println(stu.getSname());;

            }

        session.commit();//提交事务

            }catch(Exceptione) {

                e.printStackTrace();

                session.rollback();//事务回滚

            }finally{

            session.close();//关闭资源

            }

        }

    }

    相关文章

      网友评论

        本文标题:ORM框架-MyBatis(一)

        本文链接:https://www.haomeiwen.com/subject/fusghhtx.html