美文网首页
MyBatis入门

MyBatis入门

作者: 凡哥爱丽姐 | 来源:发表于2020-05-15 21:13 被阅读0次

    1、MyBatis框架

        MyBatis是一个优秀的数据持久层框架,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。其封装性要低于Hibernate(全自动化框架),性能优越,并且小巧,简单,易学,应用也越来越广泛。

        1.1、MyBatis框架的优点

        (1)MyBatis是最简单的持久化框架,简单易学。

        (2)MyBatis相当灵活,不会对应用程序或者数据库的设计有影响,SQL写在XML里,从程序代码中彻底分离,既降低耦合度,又便于统一管理与优化。

        (3)提供XML标签,支持编写动态SQL语句。

        (4)提供映射标签,支持对象与数据库的ORM字段关系映射。

        1.2、MyBatis框架的缺点

        (1)SQL语句的编写工作量大,对开发人员编写SQL语句的功底又一定的要求。

        (2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更改数据库。

    2、搭建MyBatis

         以下环境的搭建和配置都是基于IDEA编辑器下的Maven项目,数据库使用的是MySql。

        2.1、在pom.xml中添加驱动的jar包(mysql.jar和mybatis.jar包)

     <dependencies>
        <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis</artifactId>
             <version>3.4.6</version>
        </dependency>
        <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>5.1.40</version>
        </dependency>    
    </dependencies>
    

        2.2、在resources资源库中创建MyBatis的核心配置文件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>
        <!--配置mybatis多套运行环境-->
        <environments default="development">
            <environment id="development">
                <!--配置事务管理,采用JDBC的事务管理-->     
                <transactionManager type="JDBC"/>
                    <!--POOLED:mybatis自带的数据源-->
                    <dataSource type="POOLED">
                        <property name="driver" value="${driver}"/> <!--加载mysql驱动:com.mysql.jdbc.Driver-->
                        <property name="url" value="${url}"/><!--指定连接的数据库路径:jdbc:mysql://localhost:3306/数据库名-->
                        <property name="username" value="${username}"/><!--数据库配置时的用户名-->
                        <property name="password" value="${password}"/><!--数据库配置时的密码-->
                    </dataSource>
            </environment>
        </environments>
        <!--指定mapper.xml文件的路径(maven项目是从resources源文件下找资源)-->
        <mappers>
                <mapper resource="包名/mapper文件名"></mapper>
        </mappers>
    </configuration>
    

        2.3、创建实体类

        2.4、创建接口类

        2.5、添加mapper文件

         注:在mapper文件中保存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">
    <!--namespace 表示命名空间,通常定义的格式是接口的完整路径-->
    <mapper namespace="接口的完整路径">
       <!--定义sql语句,sql语句结束后不要加分号-->
       <!-- id是被调用的方法名   mapper文件中读取参数的格式:#{属性名} -->
       <insert id="方法名">
               //sql语句
        </insert>
        <!--查询语句中需添加一个结果映射属性:resultType="一般是结果类型的完整路径"-->
        <select id="方法名" resultType="查询后返回值类型">
               //sql语句
        </select>
    </mapper>
    

        2.6、获取SqlSession,创建测试类

              //1.加载配置文件
              Reader  resourceAsReader=Resources.getResourceAsReader("mybatis-config.xml");
              //2.创建SqlSessionFactoryBuilder对象
              SqlSessionFactoryBuilder builder= new SqlSessionFactoryBuilder();
              //3.得到session工厂
              SqlSessionFactory factory=builder.build(resourceAsReader);
              //4.得到session
              SqlSession sqlSession= factory.openSession();
              //5.调取sql语句,insert("方法的完整路径"),路径=namespace+id 
              int rs=sqlSession.insert("方法的完整路径" ,e);
              //6.一般增、删、改需提交事务才可以实现数据库的更改
              sqlSession.commit();  
              //7.关闭资源(放在finally中,应该添加非空验证)
              sqlSession.close();    
    

    3、MyBatis一个简单的实现(实现用户数据的添加)

        3.1、数据库准备

         创建一个数据库名为test,表名为users

    CREATE TABLE users(
     id INT PRIMARY KEY,
     NAME VARCHAR(20),
     sex VARCHAR(20)
    )
    

        3.2、项目整体架构

    项目整体架构

        3.3、添加驱动的jar包

     <dependencies>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.6</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.40</version>
            </dependency>
     </dependencies>
    

        3.4、MyBatis的核心配置文件mybatis-config.xml

    <environments default="development">
            <environment id="development">
                <!--配置事务管理,采用JDBC的事务管理-->
                <transactionManager type="JDBC"/>
                <!--POOLED:mybatis自带的数据源-->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/> <!--加载mysql驱动:com.mysql.jdbc.Driver-->
                    <property name="url" value="jdbc:mysql://localhost:3306/test"/><!--指定连接的数据库路径:jdbc:mysql://localhost:3306/数据库名-->
                    <property name="username" value="..."/><!--数据库配置时的用户名-->
                    <property name="password" value="..."/><!--数据库配置时的密码-->
                </dataSource>
            </environment>
        </environments>
        <!--指定mapper.xml文件的路径(maven项目是从resources源文件下找资源)-->
        <mappers>
            <mapper resource="Mapper/UserDaoMapper.xml"></mapper>
        </mappers>
    

        3.5、User实体类

    package com.fan.entity;
    
    public class User {
        private Integer id;
        private String name;
        private String sex;
    
        public User() {
        }
    
        public User(Integer id, String name, String sex) {
            this.id = id;
            this.name = name;
            this.sex = sex;
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    }
    

        3.6、UserDao接口类

    package com.fan.dao;
    
    import com.fan.entity.User;
    
    public interface UserDao {
        //新增用户
        public int addUser(User user);
    }
    

        3.7、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.fan.dao.UserDao">
        <insert id="addUser">
            insert into users(id,name,sex) values(#{id},#{name},#{sex})
        </insert>
    </mapper>
    

        3.8、测试类

    import com.fan.entity.User;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import java.io.IOException;
    import java.io.Reader;
    
    public class Demo1 {
        public static void main(String[] args) {
            Reader resourceAsReader=null;
            SqlSession sqlSession=null;
            try {
                User user=new User(1,"张三","男");
                resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");
                SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
                SqlSessionFactory factory = builder.build(resourceAsReader);
                sqlSession = factory.openSession();
                int i = sqlSession.insert("com.fan.dao.UserDao.addUser", user);
                sqlSession.commit();
                System.out.println("插入成功"+i+"条");
    
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
               if(sqlSession!=null){
                   sqlSession.close();
               }
               if(resourceAsReader!=null){
                   try {
                       resourceAsReader.close();
                   } catch (IOException e) {
                       e.printStackTrace();
                   }
               }
            }
    
        }
    }
    

    4、下期预告

    用mybatis实现CRUD

    相关文章

      网友评论

          本文标题:MyBatis入门

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