mybatis入门

1.MyBatis 概念

  1.1 MyBatis 简介

  MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis避免了几乎所有的JDBC代码、
手工设置参数和结果集重获。MyBatis只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO
到数据库记录。
  相对Hibernate和ApacheOJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。

  1.2 MyBatis的特点

1.简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,           易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现
2.灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过           sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
3.解除sql与程序代码的耦合:通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更      易单元测试。sql和代码的分离,提高了可维护性。
4.提供映射标签,支持对象与数据库的orm字段关系映射。
5.提供对象关系映射标签,支持对象关系组建维护。
6.提供xml标签,支持编写动态sql。 

2. 入门程序搭建

  2.1 准备数据库和数据

 CREATE TABLE `aa`.`user`(    
     `id` INT NOT NULL ,     
     `name` VARCHAR(255) ,     
     `age` INT ,    
      PRIMARY KEY (`id`)  
    );
    INSERT INTO `user`(`id`,`name`,`age`) VALUES ( '1','aa','12');
    INSERT INTO `user`(`id`,`name`,`age`) VALUES ( '2','bb','13');
    INSERT INTO `user`(`id`,`name`,`age`) VALUES ( '3','cc','14');
    INSERT INTO `user`(`id`,`name`,`age`) VALUES ( '4','dd','15'); 

  2.2 创建一个maven工程,并导入mybatis核心包、依赖包以及mysql驱动

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
  <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies> 

   2.3 准备pojo实体类

package com.sky.pojo;
public class Dept{
     private Integer id;
     private String name;
  
//省略set/get方法 }

  2.4 创建配置文件

    1.配置全局核心配置文件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中节点的位置是有先后顺序的-->
<configuration>
    <!--配置别名,在mapper中可以直接使用别名-->
    <typeAliases>
        <typeAlias type="pojo.Dept" alias="Dept"/>
        <typeAlias type="pojo.Employee" alias="Employee"/>
    </typeAliases>
    <environments default="default">
        <environment id="default">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 数据库连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--必须配置characterEncoding=UTF-8-->
                <property name="url" value="jdbc:mysql://localhost:3306/ssh?characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="1111"/>
            </dataSource>
        </environment>
    </environments>
    <!--实体类的映射文件,在dao包下创建完Mapper文件后在此追加即可-->
    <mappers>
        <mapper resource="dao/DeptMapper.xml"/>
    </mappers>
</configuration> 

    2.配置实体类对应的映射文件

<?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:配置名称空间,对配置的statement进行分类管理,此时名称可以任意
当使用Mapper代理时,namespace具有特殊的含义与功能-->
<mapper namespace="DEPT">
    <!-- 插入语句:
        id:可以通过id找到执行的statement,statement唯一标识
        resultType:结果类型  -->
    <!-- 查询所有用户 -->
    <select id="getAllDept" resultType="com.sky.pojo.Dept">
        SELECT ID,NAME FROM DEPT
    </select>
</mapper> 

    3.配置log4j.properties属性文件

# For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
log4j.rootLogger=DEBUG, stdout, 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n 

  3.测试

    @Test
    public void  test01() throws IOException {
        //1.加载核心全局配置文件
         InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.构建SqlSessionFactory对象:会话工厂
         SqlSessionFactory factory=  new  SqlSessionFactoryBuilder().build(inputStream);
         //3.构建SqlSession对象:执行已经映射的sql语句,调用openSession()默认开启事务不自动事务。
         SqlSession session = factory.openSession();
         List<User> list  = session.selectList("queryAllUser");
         //提交事务
         session.commit();
         //关闭SqlSession对象
         session.close(); 
         System.out.println(list);
    }
原文地址:https://www.cnblogs.com/a77355699/p/8119240.html