了解Mybatis
什么是Mybatis
市面上最流行的技术架构:SSM 他们代表了 Spring业务层框架,SpringMvc WEB层框架以及MyBatis数据库持久层框架。
MyBatis 作为一个数据库持久层框架,是基于ORM规范(对象关系映射) 。类似我们以前的JDBC 和 JPA。
为什么要学习Mybatis
这取决于市场的变化带动了技术的变更,当项目规模变大,用户体量增加,数据量增加,但是我们往往对数据的读写效率要求更高。JDBC的性能比较高但是用起来比较麻烦。JPA(不用写sql)开发速度快,但是由于自动生成SQL没法保证读写性能。 MyBatits作为一个半ORM框架它允许查询自己写SQL(只是把sql写到映射文件中XxxMapper.xml)。这样一来程序的性能就可以得到保证。同时MyBatis用起来也相对比较简单(比JPA要复杂一点,比JDBC简单)。
Mybatis与JDBC与JPA
Mybatis配置文件
Mybatis相关依赖
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.1</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
<!-- junit测试包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
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">
<!--根元素,里面就是Mybatis配置-->
<configuration>
<!-- 环境配置:数据库的配置环境(怎么连接数据库) ,
可以配置多个环境对象 environment,多个数据库的连接配置,
可以通过 default="development" 来切换默认的环境
-->
<environments default="development">
<environment id="development">
<!-- 事务管理器,type="JDBC"使用JDBC的事务管理 "JdbcTransaction" -->
<transactionManager type="JDBC"/>
<!-- 数据源配置 POOLED 连接池,对应 PooledDataSource-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
<!-- <environment id="test">-->
<!-- ... -->
<!-- </environment>-->
</environments>
<mappers>
<mapper resource="hello/ProductMapper.xml"/>
</mappers>
</configuration>
Mybatis常见用法
jdbc.properties
创建jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis-hello
jdbc.username=root
jdbc.password=admin
使用jdbc.properties
<configuration>
<!-- 加载properties-->
<properties resource="jdbc.properties" />
<!-- 链接数据库的配置环境-->
<environments default="development">
<!-- 开发环境-->
<environment id="development">
<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>
自动返回主键
mybatis的insert可以开启主键的自动返回,保存对象后,MyBatis会把对象的ID注入到对象中。
<insert id="insert" parameterType="com.mybatis.domain.Product"
useGeneratedKeys="true" keyColumn="id" keyProperty="id">
//...
</insert>
给对象设置别名
在sql映射文件中我们在指定参数类型的时候使用的是实例类的全限定名,这没有什么问题,在MyBatis中可以为实体类取别名,在使用的时候可以通过别名来代表实体类。
在映射文件中(XxxMapper.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-->
<properties resource="jdbc.properties" />
<typeAliases>
<typeAlias type="com.mybatis.domain.Product" alias="Product" />
<!-- <package name="com.mybatis.domain"/>-->
</typeAliases>
使用自定义别名
<select id="getById" parameterType="long" resultType="Product">
...
</select>
写在最后
mybatis是一款常用的半ORM框架,在实际开发过程中也有着重要作用。本篇博文对mybatis做了简单的介绍以及一些简单的入门,相关的面试题笔者也在昨天进行了发布,感兴趣的朋友可以去看看。笔者小,中,大厂均有面试经历,每日分享JAVA全栈知识,希望能够与大家共同进步。