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   老菜农  阅读(30)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

导航

统计信息

点击右上角即可分享
微信分享提示