Mybatis入门实例
本文使用IDEA创建mybatis项目,并成功coding一个最简单的mybatis示例
(本文参靠自以下文章,非常感谢原作者!)
MyBatis:快速入门实例 HelloWorld
https://my.oschina.net/kolbe/blog/508052
MyBatis官方文档(中文版)
http://www.mybatis.org/mybatis-3/zh/getting-started.html
MyBatis官方文档的一句话,道出了mybatis框架的核心要素
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。
所有代码都是围绕SqlSessionFactory展开的。
接下来展示创建mybatis的步骤
一、在IDEA中创建一个maven项目。
在maven的pom.xml配置文件中加入mybatis依赖、jdbc驱动如下
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.29</version>
</dependency>
二、为代码方便,还可以使用mybatis的generator插件
继续在pom中添加依赖
<build>
<finalName>xxx工程名</finalName>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
然后在resources文件夹下添加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>
<!--导入属性配置-->
<properties resource="datasource.properties"></properties>
<!--指定特定数据库的jdbc驱动jar包的位置-->
<classPathEntry location="${db.driverLocation}"/>
<context id="default" targetRuntime="MyBatis3">
<!-- optional,旨在创建class时,对注释进行控制 -->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--jdbc的数据库连接 -->
<jdbcConnection
driverClass="${db.driverClassName}"
connectionURL="${db.url}"
userId="${db.username}"
password="${db.password}">
</jdbcConnection>
<!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类
targetPackage 指定生成的model生成所在的包名
targetProject 指定在该项目下所在的路径
-->
<!--<javaModelGenerator targetPackage="com.mybatis.pojo" targetProject=".\src\main\java">-->
<javaModelGenerator targetPackage="com.mybatis.pojo" targetProject="./src/main/java">
<!-- 是否允许子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="false"/>
<!-- 是否对model添加 构造函数 -->
<property name="constructorBased" value="true"/>
<!-- 是否对类CHAR类型的列的数据进行trim操作 -->
<property name="trimStrings" value="true"/>
<!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 -->
<property name="immutable" value="false"/>
</javaModelGenerator>
<!--mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->
<!--<sqlMapGenerator targetPackage="mappers" targetProject=".\src\main\resources">-->
<sqlMapGenerator targetPackage="mappers" targetProject="./src/main/resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
-->
<!-- targetPackage:mapper接口dao生成的位置 -->
<!--<javaClientGenerator type="XMLMAPPER" targetPackage="com.mmall.dao" targetProject=".\src\main\java">-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.mybatis.dao" targetProject="./src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 该处与数据库中要生成的表相对应-->
<table tableName="Student" domainObjectName="Student" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<!-- geelynote mybatis插件的搭建 -->
</context>
</generatorConfiguration>
然后在idea右侧maven标签中找到mybatis-generator,根据配置文件中的相应配置来生成对应的bean类和mapper类
三、完成上述两步环境搭建后,需要配置mybatis的配置文件
在resources文件夹下,新建一个mybatis-config.xml的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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 此处要加载所需要使用的mapper -->
<mappers>
<mapper resource="mappers/StudentMapper.xml"/>
</mappers>
</configuration>
四、完成配置后,新建一个测试类,来测试mybatis的配置效果
public class StudentTest {
public static void main (String[] args) throws IOException {
String resource = "mybatis-config.xml";
//1.加载MyBatis的配置文件:mybati-config.xml(它也加载关联的映射文件,也就是mappers节点下的映射文件)
InputStream inputStream = Resources.getResourceAsStream(resource);
//2.SqlSessionFactoryBuuilder实例通过输入流调用build方法来创建sqlsession工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//3.通过工厂来获取sqlsession的实例,sqlsession完全包含了面向数据库执行sql命令所需的所有方法。
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.准备基本信息
//4.1)statement:用来定位映射文件(StudengtMapper.xml)中的语句(通过namespace id + select id) 下句中 com.mybatis.dao.StudentMapper为namespace id/selectByPrimaryKey为select id
String statement = "com.mybatis.dao.StudentMapper.selectByPrimaryKey";
//4.2)parameter:传进去的参数,也就是需要获取students表中主键值为1的记录
int parameter = 1;
//5.sqlsession实例来直接执行已映射的sql语句,selectOne表示获取的是一条记录
Student student = sqlSession.selectOne(statement,parameter);
System.out.print(student.toString());
//6.关闭输入流和sqlsession实例
inputStream.close();
sqlSession.close();
}
}
为体现接口式编程的思想,可将上述部分代码替换为
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
Student student = mapper.selectByPrimaryKey(2);
以上,最简单的mybatis示例已经完成!