初识MyBatis

mac2024-05-11  35

MyBatis简介

1、MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架2、MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集3、MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录4、Mybatis 是一个 半自动的ORM(Object Relation Mapping)框架

下载网址

https://github.com/mybatis/mybatis-3/

为什么要使用MyBatis

1、JDBC

①SQL夹在Java代码块里,耦合度高导致硬编码内伤②维护不易且实际开发需求中sql有变化,频繁修改的情况多见

2、Hibernate和JPA

①长难复杂SQL,对于Hibernate而言处理也不容易②内部自动生产的SQL,不容易做特殊优化③基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难。导致数据库性能下降

3、MyBatis

①对开发人员而言,核心sql还是需要自己优化②sql和java编码分开,功能边界清晰,一个专注业务、一个专注数据

开发环境的准备

myBatis-3.4.1.jar mysql-connector-java-5.1.37-bin.jar log4j.jar

配置文件

log4j <?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> 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> <!-- 引入外部文件 --> <properties resource="db.properties"></properties> <!-- 数据库连接环境的配置 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${db.driver}" /> <property name="url" value="${db.url}" /> <property name="username" value="${db.username}" /> <property name="password" value="${db.password}" /> </dataSource> </environment> </environments> <!-- 引入SQL映射文件,Mapper映射文件 --> <mappers> <mapper resource="mybatis-mapper.xml" /> </mappers> </configuration> mybatis-mapper.xml 开发中我们通常将该文件的名称与对应的dao层保持一致,如:EmployeeMapper.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.atguigu.mybatis.dao.EmployeeMapper"> <select id="queryById" resultType="com.atguigu.mybatis.bean.Employee"> select * from employee where id = #{id} </select> </mapper> Dao层接口(这里不需要实现类,具体的操作由mybatis-mapper.xml决定) public interface EmployeeMapper { Employee queryById(int id); } 测试类 @Test public void t2() { InputStream inputStream = Resources.getResourceAsStream("mybatis_config.xml"); //加载核心配置文件 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); //通过配置文件创建session工厂 SqlSession session = factory.openSession(); //获取代理对象 EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class); //bean的属性名需要和数据库的列名一样,如果不一样可以起别名 Employee employee = employeeMapper.queryById(1); System.out.println(employee); }

MyBatis全局配置文件

上面的例子是基础使用,下面在详细说一下其他的mybatis_config.xml配置 properties

<properties> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test_mybatis" /> <property name="username" value="root" /> <property name="password" value="1234" /> </properties> 还可以引入外部文件 resource: 从类路径下引入属性文件url: 引入网络路径或者是磁盘路径下的属性文件 <properties resource="db.properties" ></properties>

setting

<!-- 配置驼峰命名法(将数据库中的_命名方式改为驼峰命名法) --> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>

typeAliases

<!-- 配置别名 --> <typeAliases> <!-- 类型别名是为 Java 类型设置一个短的名字,可以方便我们引用某个类 --> <typeAlias alias="emp" type="com.atguigu.mybatis.bean.Employee"/> <!-- 类很多的情况下,可以批量设置别名这个包下的每一个类创建一个默认的别名,就是简单类名小写 --> <package name="com.atguigu.mybatis.beans"/> </typeAliases>

typeHandlers 类型处理器 plugins 插件机制(略)

插件是MyBatis提供的一个非常强大的机制,我们可以通过插件来修改MyBatis的一些核心行为。插件通过动态代理机制,可以介入四大对象的任何一个方法的执行

environments 环境配置(略) databaseIdProvider数据库厂商标识(略) mappers 映射器

resource : 引入类路径下的文件url : 引入网络路径或者是磁盘路径下的文件class : 引入Mapper接口. 有SQL映射文件 , 要求Mapper接口与 SQL映射文件同名同位置. 没有SQL映射文件 , 使用注解在接口的方法上写SQL语句. <mappers> <mapper resource="EmployeeMapper.xml" /> <mapper class="com.atguigu.mybatis.dao.EmployeeMapper"/> <package name="com.atguigu.mybatis.dao"/> </mappers>
最新回复(0)