1.Mybatis是什么
Mybatis是一种基于SQL开发的对象关系映射(ORM)的持久化框架。底层是JDBC,前身是ibatis(在使用时它时相关的就在ibatis包中,如SqlSession,操作数据库的核心)。它的使用,开发人员不用再繁琐的写基类,Mapper接口,映射文件。只需要用反向生成文件去生成前面的三个文件。
2.pom.xml相关配置
2.1在<properties>标签内声明好下面对应的变量值
<mybatis.version>3.4.5</mybatis.version>
<junit.version>4.11</junit.version>
<ehcache.version>2.10.4</ehcache.version>
<pagehelper.version>4.2.1</pagehelper.version>
<mybatis-ehcache.version>1.0.0</mybatis-ehcache.version>
<mybatis-generator-core.version>1.3.5</mybatis-generator-core.version>
<maven-plugin-api.version>3.5.0</maven-plugin-api.version>
<mybatis.spring.version>1.3.1</mybatis.spring.version>
<spring.version>5.0.3.RELEASE</spring.version>
<jstl.version>1.2</jstl.version>
<servlet-api.version>4.0.0</servlet-api.version>
<jsp-api.version>2.3.1</jsp-api.version>
<jackson.version>2.9.0</jackson.version>
<commons-fileupload.version>1.3.3</commons-fileupload.version>
2.2在dependencies标签中加相关依赖(数据库版本我是8.0.25)
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--mybatis缓存-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>${mybatis-ehcache.version}</version>
</dependency>
<!-- 缓存 -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>${ehcache.version}</version>
</dependency>
<!-- mybatis反向建模 -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>${maven-plugin-api.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>${mybatis-generator-core.version}</version>
</dependency>
<!-- mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<!--springmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
<!--json处理-->
<!--实际上为三个包,但是导入databind会自动导入其他两个包-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!--文件上传组件-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
2.3加组件
<plugins>
<!--maven的mybatis代码生成插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
2.4配置打包方式
<!--配置资源打包方式-->
<resources>
<resource>
<!-- 配置打war时候的要打的文件路径 -->
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<!--包含文件夹以及子文件夹下所有资源-->
<include>**/*.*</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
上述写完一定要刷新,这样才会导入
3.创建相关文件
4.核心的mybatis文件
<?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>
<!--1.引入jdbc.properties:类似于之前DBUtil可以把经常改的属性放到配置文件里去-->
<properties resource="jdbc.properties"></properties>
<!--2.通用配置:日志 缓存 ...可选的-->
<settings>
<!--开启日志:就可以查看运行sql语句详细步骤-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!--全局开启-->
<setting name="cacheEnabled" value="true"/>
</settings>
<!--3.配置数据库环境(事务,连接)-->
<environments default="mysql">
<!--环境标签可以配置多个(可以是oracle) 但是启动可以通过default属性控制-->
<environment id="mysql">
<!--事务管理-->
<transactionManager type="JDBC"></transactionManager>
<!--数据源:获取数据库连接的 pooled表示是通过连接池创建-->
<dataSource type="pooled">
<!--如果引入了jdbc.properties 借助于类似于EL表达式方式来获取${key}获取value-->
<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>
<!--4.配置插件 可选-->
<!--5.引入映射文件 需要写多个-->
<mappers>
<!--
resource:表示资源 用于项目中的资源
class:表示类 用于在mapper接口上通过注解的方式实现映射文件,可以不用映射文件
url:表示地址 用于引入本地磁盘的内容
-->
<mapper resource="mapper/HuserMapper.xml"/>
<!--项目相关的映射文件都要写在这,名字最好复制-->
</mappers>
</configuration>
5.反向生成文件
5.1先准备好一个jdbc.properties文件(这里要是自己的url,name,password,在指定路径放好jar包文件)
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db6012?useSSL=true&serverTimezone=UTC&characterEncoding=utf-8
jdbc.username=root
jdbc.password=mysql
driverClassPath=D:\\jar\\mysql-connector-java-8.0.25.jar
5.2编写 generatorConfig.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
<!--加载jdbc.properties配置文件-->
<properties resource="jdbc.properties" />
<!--配置驱动jar包的位置-->
<classPathEntry location="${driverClassPath}" />
<context id="context1" targetRuntime="MyBatis3">
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<jdbcConnection driverClass="${jdbc.driver}"
connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}" />
<!--根据表自动生成实体类 新的项目如果包不同一定要更新-->
<javaModelGenerator targetPackage="com.sc.pojo"
targetProject="src/main/java">
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--根据表生成mapper的映射文件 新的项目要修改包的地址-->
<sqlMapGenerator targetPackage="mapper"
targetProject="src/main/resources"></sqlMapGenerator>
<!--根据表生成mapper接口-->
<javaClientGenerator targetPackage="com.sc.mapper"
targetProject="src/main/java" type="XMLMAPPER" />
<!--根据这里配置的表来决定生成多少内容:经常修改的内容-->
<!--如果重复生成会出现bug 注:
实体类:会还原 清除我们自定义的功能
mapper接口:也会还原 清除我们自定义的功能
映射文件:会追加 在原来xml基础 上面拼接几十个标签
防止:要么删除之前有的内容 要么一定修改表名
-->
<!--表名修改-->
<table tableName="Huser" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false" >
</table>
</context>
</generatorConfiguration>
5.3相应数据库要有表Huser
5.4用maven可以找到对应项目,之后使用组件
6.建测试包,方便测试
有可能有人会自动生成,没有生成就手动创建,创建后标记颜色,右击包
结果
建包加类测试
public class TestMyBatis {
@Test//加测试注解
public void add() throws IOException {
InputStream is =
Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sf =
new SqlSessionFactoryBuilder().build(is);
SqlSession session = sf.openSession();
//底层通过反射 利用动态代理方式创建Mapper接口实现类
HuserMapper mapper = session.getMapper(HuserMapper.class);
Huser u = new Huser();
// u.setUsername("admin123");
u.setPassword("123456");
u.setCreatetime(new Date());
System.out.println(u);
mapper.add(u);//只会在内存中保存 还没有执行呢
session.commit();//事务提交才会发送sql语句执行
session.close();
}
}
7.测试后看日志
这样就成功,具体业务会修改mapper接口,随之加修改映射文件,同样的方式测试,保证Mybatis数据不会出现错误,业务层(service)根据业务调用即可。
如有不足,请指正!mybatis官网:MyBatis中文网