zoukankan      html  css  js  c++  java
  • Mybatis01:第一个Mybatis程序

    环境说明

    • JDK8 +
    • MySQL 5.1.18
    • Maven 3.6.3
    • IDEA

    Mybatis说明

    什么是Mybatis

    • Mybatis是一款优秀的持久层框架
    • 它内部封装了jdbc,是开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程
    • Mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由Mybatis框架执行sql语句并将结果映射成java对象并返回
    • Mybatis官方文档:官方文档

    持久化

    持久化是将程序数据在持久状态和瞬时状态间转换的机制

    • 即把数据(如内存中的对象)保存到可永久的存储的设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等
    • JDBC就是一种持久化机制。文件IO也是一种持久化机制

    为什么需要持久化服务呢?那是由于内存本身的缺陷引起的

    • 内存在断电后数据会丢失,但是有一些对象无论如何都不能丢失,所以需要持久化服务
    • 内存过于昂贵。相比于外存等,内存的价格要高2~3的数量级,以及内存的容量有限。

    为什么需要Mybatis

    • Mybatis帮助开发者将数据存入数据库中和从数据库中取数据
    • 传统的jdbc操作,有很多重复的代码块。比如:数据取出时的封装,数据库建立连接等等...,通过框架可以减少重复代码,提高开发效率
    • 详细可以参考:维基百科

    Mybatis第一个程序

    基于XML的方式

    代码演示

    1、搭建数据库

    create database eesy;
    use eesy;
    DROP TABLE IF EXISTS `user`;
    
    CREATE TABLE `user` (
      `id` int(11) NOT NULL auto_increment,
      `username` varchar(32) NOT NULL COMMENT '用户名称',
      `birthday` datetime default NULL COMMENT '生日',
      `sex` char(1) default NULL COMMENT '性别',
      `address` varchar(256) default NULL COMMENT '地址',
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    
    
    insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');
    

    数据库数据和下面结果略有修改

    2、创建Maven工程在pom.xml文件中导入依赖

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.18</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    

    3、编写Mybatis核心配置文件

    <?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">
    
    <!--mybatis的主配置文件-->
    <configuration>
    <!--    配置环境-->
        <environments default="mysql">
    <!--        配置MySQL的环境-->
            <environment id="mysql">
                <!-- 配置事务的类型-->
                <transactionManager type="JDBC"></transactionManager>
                <!-- 配置数据源(连接池)-->
                <dataSource type="POOLED">
                    <!-- 配置连接数据库的4个基本信息-->
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/eesy"/>
                    <property name="username" value="root"/>
                    <property name="password" value="12345"/>
                </dataSource>
            </environment>
        </environments>
    
        <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
        <mappers>
            <mapper resource="com/lng/dao/UserDao.xml"/>
        </mappers>
    </configuration>
    

    4、创建实体类

    class User{
        private Integer id;
        private String username;
        private String password;
        //提供属性的get和set方法
        //重写toString()方法
    }
    

    5、编写Dao接口类(也叫Mapper接口)

    package com.lng.dao;
    
    import com.lng.pojo.User;
    
    import java.util.List;
    
    /**
     * 用户的持久层接口
     * @author lngstart
     * @create 2021-02-14 9:58
     */
    public interface UserDao {
        /**
         * 查询所有操作
         * @return
         */
        List<User> findAll();
    }
    

    6、编写UserDao.xml配置文件

    • namespace十分重要,不能写错了
    • 要求
      • 创建位置:和持久层接口所在的包结构有相同的目录
      • 名称:以持久层接口名称命名文件名,拓展名是.xml
      • 上述的两点要求主要是为了在使用package标签的时候有对应关系
    <?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.lng.dao.UserDao">
        <!--配置查询所有-->
        <!--这里要让mybatis知道是向哪里封装数据-->
        <select id="findAll" resultType="com.lng.pojo.User">
            select * from user;
        </select>
    
    </mapper>
    

    7、编写测试类

    package com.lng.test;
    
    
    import com.lng.dao.UserDao;
    import com.lng.pojo.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.InputStream;
    import java.util.List;
    
    /**
     * @author lngstart
     * @create 2021-02-14 10:38
     */
    public class MybatisTest {
        /**
         * 入门案例
         * @param args
         */
        public static void main(String[] args) throws Exception {
            //1、读取配置文件
            InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
            //2、创建SqlSessionFactory工厂
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            //3、使用工厂创建SqlSession对象
            SqlSession sqlSession = factory.openSession();
            //4、使用SqlSession创建Dao接口的代理对象
            UserDao mapper = sqlSession.getMapper(UserDao.class);
            //5、使用代理对象执行方法
            List<User> all = mapper.findAll();
            for(User user : all){
                System.out.println(user);
            }
            //6、释放资源
            sqlSession.close();
            in.close();
        }
    }
    

    运行结果

    基于注解的方式

    1、在持久层接口中添加注解

    /**
     * 用户的持久层接口
     * @author lngstart
     * @create 2021-02-14 9:58
     */
    public interface UserDao {
        /**
         * 查询所有操作
         * @return
         */
        @Select("select * from user")
        List<User> findAll();
    }
    

    2、修改核心配置文件

    • 主要是修改mapper标签
    <!--告知Mybatis映射配置的位置-->
    <mappers>
            <mapper class="com.lng.dao.UserDao"/>
    </mappers>
    

    3、注意事项

    • 在使用基于注解的Mybatis配置是,一定要移除xml的映射配置。不然会报异常

    运行结果
    和上述相同

    如有错误,欢迎指正!
  • 相关阅读:
    设计模式之解释器模式
    设计模式之中介者模式
    设计模式之职责链模式
    设计模式之命令模式
    设计模式之迭代器模式
    设计模式之备忘录模式
    设计模式之状态模式
    【转】CSS中position属性( absolute | relative | static | fixed )详解
    【转】fiddler-http协议调试代理工具
    TCP/IP、Http、Socket的区别
  • 原文地址:https://www.cnblogs.com/Lngstart/p/14462913.html
Copyright © 2011-2022 走看看