标题目录
1.mybatis简单介绍
2.mybatis与hibernate的区别
3.搭建mybatis框架环境
4.基于ssm逆向工程的使用(IDEA)
5.Mybatis增删改查案例
1.mybatis简单介绍
1.1 mybatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
mybatis是一个基于Java的持久层框架(半自动),主要包括SQL Maps和Data Access Objects(DAO)
1.2 MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。
MyBatis使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
1.3 每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。
SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
2. mybatis与hibernate的区别
两者均为ORM框架,但也有一些不同
mybatis hibernate
轻量级 重量级
半自动化 全自动化
sql hql(但也可以使用sql,但违背了hibernate的初衷)
扩展性、迁移性比较差 无缝移植
3.搭建mybatis框架环境
1、创建maven工程
2、导入相关pom依赖
<?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>com.hmc</groupId> <artifactId>mybatis01</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>mybatis01 Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <!--junit--> <junit.version>4.12</junit.version> <!--servlet --> <servlet.version>4.0.0</servlet.version> <!--mybatis--> <mybatis-version>3.4.5</mybatis-version> <!--mysql--> <mysql.version>5.1.44</mysql.version> </properties> <!--junit--> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!--servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet.version}</version> <scope>provided</scope> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis-version}</version> </dependency> <!--记得修改mybatis.cfg.xml添加如下内容--> <!--<setting name="logImpl" value="LOG4J2"/>--> <!--核心log4j2jar包--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.9.1</version> </dependency> <!--web工程需要包含log4j-web,非web工程不需要--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>2.9.1</version> </dependency> <!--分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version> </dependency> </dependencies> <build> <finalName>mybatis01</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <dependencies> <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> </dependencies> <configuration> <overwrite>true</overwrite> </configuration> </plugin> </plugins> </pluginManagement> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <!--对应的资源目录--> <resource> <directory>src/main/resources</directory> <includes> <include>*.properties</include> <include>*.xml</include> </includes> </resource> </resources> </build> </project>
3、Mybatis相关插件安装
mybatis plugin
没安装的时候是显示install,完成之后重启IDEA即可,下面的插件以此类推
Mybatis generator
mybatis tools
maven helper
4、Mybatis.cfg.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="jdbc.properties"/> <!--由log4j实现mybatis日志打印--> <settings> <setting name="logImpl" value="LOG4J2"/> </settings> <!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 --> <plugins> <!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 --> <plugin interceptor="com.github.pagehelper.PageInterceptor"> </plugin> </plugins> <!-- 别名 --> <!--<typeAliases> <!–<typeAlias type="com.hmc.oa.model.Book" alias="Book"/>–> <package name="com.hmc.model"/> </typeAliases>--> <!-- 配置mybatis运行环境 development开发环境--> <environments default="development"> <environment id="development"> <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 --> <transactionManager type="jdbc"/> <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI --> <!-- POOLED 表示支持JDBC数据源连接池 --> <!-- UNPOOLED 表示不支持数据源连接池 --> <!-- JNDI 表示支持外部数据源连接池 --> <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="com/hmc/mapper/BookMapper.xml"/> </mappers> </configuration>
4.基于ssm逆向工程的使用(IDEA)
1、安装Mybatis generator插件
2、配置generatorConfig.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="jdbc.properties"/> <!--由log4j实现mybatis日志打印--> <settings> <setting name="logImpl" value="LOG4J2"/> </settings> <!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 --> <plugins> <!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 --> <plugin interceptor="com.github.pagehelper.PageInterceptor"> </plugin> </plugins> <!-- 别名 --> <!--<typeAliases> <!–<typeAlias type="com.hmc.oa.model.Book" alias="Book"/>–> <package name="com.hmc.model"/> </typeAliases>--> <!-- 配置mybatis运行环境 development开发环境--> <environments default="development"> <environment id="development"> <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 --> <transactionManager type="jdbc"/> <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI --> <!-- POOLED 表示支持JDBC数据源连接池 --> <!-- UNPOOLED 表示不支持数据源连接池 --> <!-- JNDI 表示支持外部数据源连接池 --> <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="com/hmc/mapper/BookMapper.xml"/> </mappers> </configuration>
3、配置maven运行generator命令
4、在pom中处理generatorConfig.xml不能编译问题
5.Mybatis增删改查案例
新建 IBookService接口
IBookService实现类(IBookServiceImpl)
接下来测试一下(IBookServiceImplTest)
package com.hmc.service.imp; import com.hmc.mapper.BookMapper; import com.hmc.model.Book; import com.hmc.service.IBookService; import com.zking.ssm.util.MybatisSessionFactoryUtils; import com.hmc.vo.BookVo; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class IBookServiceImplTest { private org.apache.ibatis.session.SqlSession SqlSession; private IBookService bookService; private Book book; @Before public void setUp() throws Exception { SqlSession = MybatisSessionFactoryUtils.openSession(); BookMapper mapper = SqlSession.getMapper(BookMapper.class); IBookServiceImpl IBookServiceImpl=new IBookServiceImpl(); IBookServiceImpl.setBookMapper(mapper); this.bookService=IBookServiceImpl; book=new Book(); } @After public void tearDown() throws Exception{ SqlSession.commit(); SqlSession.close(); } @Test public void install() { List<Book> bk=new ArrayList<Book>(); bk.add(new Book("mybatis",13.4,"小说")); bookService.addbooks(bk); } @Test public void queryBookAll() { List<Book> books = bookService.queryBookAll(); for (Book book1 : books) { System.out.println(book1); } }
输出结果
数据库数据
查询数据