mybaits入门

Mybatis历史

ibatis提供持久层框架包括Sql Maps(封装JDBC)和Data Access Object(dao数据访问对象)

特性/概念

1、MyBatis支持定制化SQL(SQL语句自己写,自己维护)存储过程以及高级映射(自定义一对多)的优秀的持久层框架

2、避免几乎所有JDBC代码和手动设置参数以及获取结果集

3、可以使用简单的XML*或者注解用于配置和原始映射(SQL语句可以写在xml中或者通过注解写在接口中,面向接口编程),将接口和Java的POJO(普通JAVA对象)映射乘数据库中的记录

4、是一个半自动的ORM(Object(实体对象) Relation(关系型数据库) Mapping(映射))对象关系映射框架

和其他对比

jdbc

1、SQL夹杂在Java代码中偶合度高,导致硬编码硬伤

2、维护不易且时机开发需求中SQL有变化,频繁修改情况多见

3、代码冗长,开发效率低

Hibernat/JPA

1、操作简便,开发效率高

2、程序中的长难复杂SQL需要绕过框架

3、内部自动生产的sql,不容易做特殊优化

4、基于全反射的全自动框架,大量字段的POJO进行部分映射比较困难

5、反射操作太多,数据库性能下降

Mybatis

1、轻量级,性能出色

2、SQL和JAVA编码分开,功能边界清晰。JAVA代码专注业务,SQL语句专注数据

3、开发效率少寻Hibernate,但是完全能接受。

创建工程

Maven工程

Mybatis核心配置文件

习惯上命名mybatis-config.xml,整合Spring之后,整个配置文件可以省略

核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息

1)enviorments:配置多个连接数据库环境

  • default:默认使用的环境的ID

2)enviroment:配置某个具体的环境

  • id:表示连接数据库有的唯一标识,不能重复

3)transactionManager:设置事务管理方式

  • type:"JDBC/MANAGED"

  • JDBC:表示当前环境中,执行sql时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动

  • MANAGED:表示被管理,例如被Spring

4)dataSource:配置数据源

  • type:"POOLED\UPOOLED\JNDI"

  • POOLED:表示使用数据库连接池缓存数据库连接

  • UNPOOLED:表示不适用数据库连接池

  • JNDI:表示使用上下文数据源

核心配置文件存放的位置:src/main/resources

配置连接数据库的环境
<environments default="development">
       
        <environment id="development">
            //这里我们使用JDBC作为事务管理器,测试的时候记得提交事务
            <transactionManager type="JDBC"/>
           
            <dataSource type="POOLED">
         
                <property name="driver" value="${jdbc.driver}"/>
               
                <property name="url" value="${jdbc.url}"/>
                
                <property name="username" value="${jdbc.username}"/>
      
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
​
    </environments>
引入映射文件
<mappers>
    <mapper resource="mappers/UserMapper.xml"    
</mappers>

创建表

创建实体类POJO

保证字段名和属性名一致

com.atguigu.mybatis.pojo.User

public class User {
    private Integer id;
    private String name;
    private String password;
    private Integer age;
    private char sex;
    private String eamil;
    .....
}

创建mapper接口

MyBatis中的Mapper接口相当于以前的Dao,区别在于mapper仅仅是接口,不需要提供实现类

com.atguigu.mybatis.mapper.UserMapper(Interface)

public interface UserMapper {
​
    /**
     * 插入用户
     * @return
     */
    public int insertUser();
​
}

创建映射文件

相关概念:ORM对象关系映射

  • 对象:JAVA实体类对象

  • 关系:关系型数据库

  • 映射:二者之间的关系

JAVA概念 数据库概念
属性 字段/列
对象 记录/行

1、映射文件命名规则

  • 表对应的实体类的类名+Mapper.xml

  • 存放位置为src/main/resource/mappers

表t_user,映射实体类User,映射文件UserMapper.xml

2、面向接口编程

表——实体类——mapper接口——映射文件

  • 映射文件的namespace和mapper全类名一致

  • 映射文件中sql语句的id和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">
//
<mapper namespace="com.atguigu.mybatis.mapper.UserMapper">
    <insert id="insertUser" >
        insert into t_user values(null,"asd","123","12","m","123@123.com")
    </insert>
    
</mapper>

3、测试功能

注意提交事务

public class MyBatisTest {
    @Test
    public static void main(String[] args) throws IOException {
        //加载核心配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        //获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取mapper接口对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //测试功能
        int i = mapper.insertUser();
        //提交事务
        sqlSession.commit();
        //输出受影响的行数
        System.out.println(i);
        
    }
}

4、功能增强

(1)是否自动提交事务:
  //获取SqlSession默认不提交事务,参数列表true自动提交
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
(2)查看日志
a>pom加入log4j依赖
        <!--日志-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
        </dependency>
b>建立log4j配置文件

日志的级别:

  • FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)

  • 从左到右打印的内容越来越详细

resource/固定名称log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
​
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
​
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

posted on 2022-08-20 12:50  老菜农  阅读(28)  评论(0编辑  收藏  举报

导航