Mybatis入门笔记

MyBatis入门

一、概述

MyBaits是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架;

jdbc缺陷:存在大量的硬编码灵活性低,大量的无关业务的处理编码,如连接和关闭数据库的操作,扩展优化不便;

优点:
1、避免传统JDBC硬编码,执行高效,是JDBC的延伸 2、使用XML将SQL与程序解耦,便于维护
3、POJO对象和数据库记录直接映射 4、完善的文档支持

应用场景:1.更加关注SQL优化的项目;2.需求频繁改动的项目

二、框架概念

框架是一种规则,保证开发者遵循相同的方式开发程序,框架提倡”不要重复造轮子”,对基础功能进行封装,极大提高了开发效率,统一的编码规则,利于团队管理和维护。

SSM开发框架:

  • Spring:对象容器框架,对各个对象有效管理,底层框架;
  • Spring MVC:替代Servlet,帮助我们更好的在web层面进行开发;
  • MyBaties:简化数据库的交互,底层把JDBC进行了封装;

三、MyBatis开发流程

新建数据库连接时,注意加上时区测试

useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

比如连接icake数据库的URL

jdbc:mysql://localhost:3306/icake?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
  1. 引入MyBatis依赖,利用maven进行管理

    pom.xml中加入阿里云的仓库连接,下载依赖包更稳更快

    <repositories>
        <repository>
            <id>aliyun</id>
            <name>aliyun</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
    </repositories>
    
  2. 创建核心配置文件,使用xml文件配置。

    比如:配置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>
        <settings>
            <!-- goods_id ==> goodsId 驼峰命名转换 -->
            <setting name="mapUnderscoreToCamelCase" value="true"/>
        </settings>
        <environments default="dev">
            <environment id="dev">
                <transactionManager type="JDBC"></transactionManager>
                ...
    
  3. 创建实体(Entity)类,设置属性,生成get、set方法

    public class Goods {
        private Integer goodsId;//商品编号
        private String title;//标题
        ...
        public Integer getGoodsId() {
            return goodsId;
        }
        ...
    }
    
  4. 创建Mapper映射文件,实体类和数据表的映射

    <?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用来区分不同的sql语句-->
    <!-- resultType结果类型时Goods对象,每一条记录都被包装成Goods对象-->
    <mapper namespace="goods">
        <select id="selectAll" resultType="com.imooc.mybatis.entity.Goods" >
            select * from t_goods order by goods_id desc limit 10
        </select>
        ...
    </mapper> 
    
  5. 初始化SessionFactory,会话工厂。读取配置文件。比如读取mybatis-config.xml

    //初始化工具类MyBatisUtils,在工具类中配置,保证SqlSessionFactory在应用中全局唯一
    public class MyBatisUtils {
        //利用static(静态)属于类不属于对象,且全局唯一
        private static SqlSessionFactory sqlSessionFactory = null;
        //利用静态块在初始化类时实例化sqlSessionFactory
        static {
            Reader reader = null;
            try {
                reader = Resources.getResourceAsReader("mybatis-config.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
                ...
    public static SqlSession openSession(){
        //默认SqlSession对自动提交事务数据(commit),设置false代表关闭自动提交,改为手动提交事务数据
        return sqlSessionFactory.openSession(false);
    }   
    
  6. 利用SqlSession对象操作数据,增,删,改,查。

    //新建测试类MyBatisTestor,创建testSelectAll方法,编写java代码对数据库进行操作
    public void testSelectAll() throws Exception {
        SqlSession session = null;
        try{
            session = MyBatisUtils.openSession();
            //goods.selectAll定位sql语句,返回的是一堆Goods对象,用list集合来存放
            //session.selectList返回多条数据,session.selectOne()方法返回一条数据
            List<Goods> list = session.selectList("goods.selectAll");
            //for循环,getTitle()方法,输出对应表的标题
            for(Goods g : list){
                System.out.println(g.getTitle());
            }
        }catch (Exception e){
            throw e;
        }finally {
            MyBatisUtils.closeSession(session);
        }
    }
    
    

四、环境配置

mybatis-config.xml文件

MyBatis采用XML格式配置数据库环境信息,MyBaits环境配置标签,environment包含数据库驱动、URL、用户名与密码,,。idea内置了连接数据库的方法。

例子:<!--配置环境,不同的环境不同的id名字-->
<environment id="dev">
<!--采用JDBC方式对数据库事务进行commit/rollback-->
<transactionManager type="JDBC"></transactionManager>
<!--采用连接池方式管理数据库连接-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>

五、MyBatis的核心对象

SqlSessionFactory

SqlSessionFactory是MyBatis的核心对象,用于加载配置文件,初始化MyBatis框架,创建SqlSession对象,保证SqlSessionFactory在应用中全局唯一

SqlSession

SqlSession是MyBatis操作数据库的核心对象,SqlSession使用JDBC方式与数据库交互,SqlSession对象提供了数据表CRUD对应方法,CURD是创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作。

初始化工具类MyBatisUtils,在工具类中配置,保证SqlSessionFactory在应用中全局唯一

/**
 * MyBatisUtils工具类,创建全局唯一的SqlSessionFactory对象
 */
public class MyBatisUtils {
    //利用static(静态)属于类不属于对象,且全局唯一
    private static SqlSessionFactory sqlSessionFactory = null;
    //利用静态块在初始化类时实例化sqlSessionFactory
    static {
        Reader reader = null;
        try {
            reader = Resources.getResourceAsReader("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
            throw new ExceptionInInitializerError(e);
            //初始化错误时,通过抛出异常ExceptionInInitializerError通知调用者
        }
    }
    /**
     * openSession 创建一个新的SqlSession对象
     * @return SqlSession对象
     */
    public static SqlSession openSession(){
        //默认SqlSession对自动提交事务数据(commit)
        //设置false代表关闭自动提交,改为手动提交事务数据
        return sqlSessionFactory.openSession(false);
    }
    /**
     * 释放一个有效的SqlSession对象
     * @param session 准备释放SqlSession对象
     */
    public  static void closeSession(SqlSession session){
        if (session != null) {
            session.close();
        }
    }
}

六、MyBatis数据查询

数据查询步骤

  • 创建实体类(Entity),类中的属性是根据数据表的字段创建的

  • 创建Mapper XML

    作用:说明创建的类中的属性和数据库中表的对应关系,说明了对象和表之间的映射关系。mapper文件中存放了要执行的sql语句

    注意:xml文件最上面,加上xml声明和mybatis的dtd声明,dtd是约束文件,在dtd中定义对xml文件的约束,这样可以保证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">

  • 要在mybatis-config.xml文件中声明mapper
    <mappers>
        <mapper resource="mappers/goods.xml"/>
    </mappers>

  • 编写
posted @ 2019-09-26 21:42  ContinDo  阅读(94)  评论(0)    收藏  举报