• MyBatis入门


    MyBatis简介

    • MyBatis 本是apache的一个开源项目iBatis, 是一个基于Java的Dao框架。
    • MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。(JDBC仅是规范)
    • MyBatis 使用简单的 XML或注解用于配置和原始映射,将java普通对象映射为数据库的记录。(ORM---Object Relational Mapping)

    创建样本表作准备

    sql1

    创建数据库(mysql)

    create database test(id int,name varchar(10),major varchar(20));
    

    创建表

    use mybatis;
    create table test(id int,name varchar(10),major varchar(20));
    

    sql2

    写入样本数据

    insert into test values(1,'Jack','Math');
    insert into test values(2,'Marck','English');
    insert into test values(3,'szx','弱鸡');
    

    sql3

    PS: 这里我用了mycli插件,支持自动补全和语法高亮

    建立新的Maven项目

    maven项目默认,建好之后如下

    idea1

    导入依赖

    编辑pom.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>MyBatisTest</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <dependencies>
            <!--MyBatis框架依赖-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.4</version>
            </dependency>
            <!--mysql驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.19</version>
            </dependency>
            <!--日志相关-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.12</version>
            </dependency>
            <!--测试类-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.2</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
        
    </project>
    

    完成后会自动下载依赖,如果没有则手动导入
    idea2

    建立相关的包(Dao和Domain)

    idea3

    • dao中建IinfoDao接口,其中写的findAll()方法是用来查询的
    • domain中的info类实现Serializable接口(方便其对象被序列化)
      • 其中Serializable接口只是个标志,里面是空的
      • serialVersionUID最好是定义,否则反序列化可能出毛病
        结果如图
        idea4
        idea5

    编写info类(查询结果以类的形式封装)

    • 首先查看mybatis数据库的数据类型
    • info类中定义的变量名和类型都尽量与数据库中的一样
      sql4
    • 编写info类
    //info.class
    //自己导包(通常可以自动)
    import java.io.Serializable;
    
    public class info implements Serializable {
        private static final long serialVersionUID = 1L;
        //定义变量
        private int id;
        private String name;
        private String major;
    
        //alt+insert 生成方法
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getMajor() {
            return major;
        }
        public void setMajor(String major) {
            this.major = major;
        }
    
        //ctrl+o重写toString方法
    
        @Override
        public String toString() {
            return "id:"+id
                    +", name:"+name
                    +", major:"+major;
        }
    }
    
    

    编写配置部分

    编写log4j.properties

    • 在resources目录下新建两个文件分别是log4j.properties和SMConfig.xml
    • 其中SMConfig.xml为mybatis的核心配置文件
    • 先编写log4j.properties
    ### log4j.properties ###
    ### 设置###
    log4j.rootLogger = debug,stdout,D,E
    
    ### 输出信息到控制抬 ###
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target = System.out
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    
    ### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.D.File = E://logs/log.log
    log4j.appender.D.Append = true
    log4j.appender.D.Threshold = DEBUG 
    log4j.appender.D.layout = org.apache.log4j.PatternLayout
    log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    
    ### 输出ERROR 级别以上的日志到=E://logs/error.log ###
    log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.E.File =E://logs/error.log 
    log4j.appender.E.Append = true
    log4j.appender.E.Threshold = ERROR 
    log4j.appender.E.layout = org.apache.log4j.PatternLayout
    log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    
    

    编写SMConfig.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>
        <!--配置环境-->
        <environments default="mysql">
            <!--环境id-->
            <environment id="mysql">
                <!--事务类型-->
                <transactionManager type="JDBC"></transactionManager>
                <!--数据源(连接池)-->
                <dataSource type="POOLED">
                    <!--连接数据库的基本信息-->
    
                    <!--驱动-->
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>      <!--注意mysql版本(有无cj)-->
                    <!--url-->
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                    <!--数据库用户名-->
                    <property name="username" value="root"/>
                    <!--数据库密码-->
                    <property name="password" value="szx"/>
                </dataSource>
            </environment>
        </environments>
    
        <!--如果不使用注解的方法还要配置映射文件-->
        <!--指定映射配置文件位置,映射配置文件指的是每个Dao独立的配置文件-->
        <mappers>
            <!--包名最好一一对应-->
            <!--在resources文件夹中建包com.szx.dao        包下建文件IinfoDao.xml -->
            <mapper resource="com/szx/dao/IinfoDao.xml"/>
        </mappers>
    </configuration>
    

    编写IinfoDao.xml

    • 在resources文件夹中建包
    • 包下建文件IinfoDao.xml
    如果不能建包,那就一层层文件夹地建
    ![C!--这上面都是规范--E](https://images.cnblogs.com/cnblogs_com/xun-/1760690/o_200508144354idea6.png)
    <!-- IinfoDao.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.szx.dao.IinfoDao">
        <!--配置查询所有-->
        <!--Dao的方法名称-->
        <select id="findAll" resultType="com.szx.domain.info">
        <!--id必须和方法名对应,resultType指定结果存放在哪个类-->
        <!--里面写sql语句-->
            select * from user;
        </select>
    </mapper>
    

    到这一步所有的配置都已经完成,接着写测试类运行


    编写测试类

    • test文件夹的java中建立相同的包结构
      6
    //test.java
    package com.szx.test;
    
    import com.szx.dao.IinfoDao;
    import com.szx.domain.info;
    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.InputStream;
    import java.util.List;
    
    public class Test {
        public static void main(String[] args) throws IOException {
            //1.读取配置文件
            InputStream in = Resources.getResourceAsStream("SMConfig.xml");
            //2.创建SqlSessionFactory工厂对象
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(in);
            //3.用工厂生产新的SqlSession对象
            SqlSession session = factory.openSession();
            //4.使用SqlSession创建Dao接口的代理对象
            IinfoDao infoDao = session.getMapper(IinfoDao.class);
            //5.使用代理对象执行方法
            List<info> infos = infoDao.findAll();
            for (info inf:infos) {
                System.out.println(inf);
            }
            //6.释放资源
            session.close();
            in.close();
        }
    }
    
    

    运行查看结果

    idea8

  • 相关阅读:
    jmeter接口测试3-正则表达式提取器的使用
    Sublime中Markdown的安装与使用
    python使用you-get模块下载视频
    python BeautifulSoup模块的简要介绍
    python Requests模块的简要介绍
    mongodb基本操作的学习
    python中的常用方法
    网盘的选择,百度网盘、google drive 还是 Dropbox
    python_爬虫一之爬取糗事百科上的段子
    pycharm的使用破解和Anaconda的使用
  • 原文地址:https://www.cnblogs.com/xun-/p/12853582.html
Copyright © 2020-2023  润新知