• 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的映射配置。不然会报异常

    运行结果
    和上述相同

    如有错误,欢迎指正!
  • 相关阅读:
    关于js计算非等宽字体宽度的方法
    [NodeJs系列]聊一聊BOM
    Vue.js路由管理器 Vue Router
    vue 实践技巧合集
    微任务、宏任务与Event-Loop
    事件循环(EventLoop)的学习总结
    Cookie、Session和LocalStorage
    MySQL 树形结构 根据指定节点 获取其所在全路径节点序列
    MySQL 树形结构 根据指定节点 获取其所有父节点序列
    MySQL 创建函数报错 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators
  • 原文地址:https://www.cnblogs.com/Lngstart/p/14462913.html
Copyright © 2020-2023  润新知