Mybatis
Posted sunlili
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis相关的知识,希望对你有一定的参考价值。
https://blog.csdn.net/hellozpc/article/details/80878563
JDBC缺点:
每次都要获取连接,耦合度高,浪费资源,很多手动判断,所以引入MyBatis
官方文档 http://www.mybatis.org/mybatis-3/getting-started.html
MyBatis 是一款优秀的持久层(Dao)框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
特点:
定制化SQL
支持存储过程(数据库脚本)调用
高级映射
ORM-对象关系映射
针对关系库-实体对象映射
表 实体类
字段 成员属性
表记录 类对象
自动化 VS 半自动化 ORM 框架
Mybatis :半自动化 ORM 框架
-
数据库表结构需要手动创建
-
依赖于数据库平台
-
sql 语句需要开发人员编写
优势:
-
sql 语句有开发人员编写 后期优化比较方便
-
适合传统项目 ,用于需求变化高的项目(互联网项目 电商 金融项目...)
-
市面用的最多的一套持久层框架
Hibernate:自动化ORM框架
-
可以通过框架来创建
-
不依赖具体的数据库平台
-
可以实现基本的CRUD 而不提供sql 直接调用API 方法即可
缺点:
-
表数据量较大时 查询效率比较低
-
用于需求变化不高的项目 传统型项目(OA 后端管理 ERP 系统...)
-
学习成本较高(实体与实体之间映射 sql 优化)
Mybatis 环境搭建与测试
1.创建Maven 普通项目
2.添加坐标
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
?
?
?
<!-- mybatis jar 包依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
?
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<!-- log4j日志打印 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
?
</dependencies>
<build>
<!--
Maven 项目
如果源代码(src/main/java)存在xml properties tld 等文件 maven 默认不会自动编译该文件到输出目录
如果要编译源代码中xml properties tld 等文件 需要显式配置resources 标签
-->
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
?
</build>
3.添加日志log4j.properties 文件
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
4.添加全局配置文件 mybatis.xml
文件模板参考官网 https://mybatis.org/mybatis-3/zh/getting-started.html
<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"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
?
?
<!--
sql 映射文件 加载配置
-->
<mappers>
<mapper resource="com/shsxt/mappers/UserMapper.xml"/>
</mappers>
</configuration>
5.添加sql 映射文件 UserMapper.xml
映射文件模本配置 https://mybatis.org/mybatis-3/zh/getting-started.html
<mapper namespace="com.shsxt.mappers.UserMapper">
<!--
namespace:命名空间属性
值唯一 在整个应用程序中不允许出现相同的命名空间 规则:包名.文件名
-->
?
?
<!--
select 标签:查询标签
id:用于区分同一个xml 文件不同的标签 同文件下 标签id 值唯一
resultType:输出结果类型
parameterType:输入参数类型
标签体:待执行的sql 语句 #{}:参数占位符 类似于 原生的sql 中? 占位符
-->
<select id="queryUserByUserId" parameterType="int" resultType="com.shsxt.vo.User">
select id, user_name as userName, user_pwd as userPwd, flag, create_time as createTime from user where id=#{id}
</select>
?
?
</mapper>
public void test() throws IOException {
/**
a)、读取mybatis的配置文件
b)、加载配置文件创建SqlSessionFactory
c)、根据SqlSessionFactory创建SqlSession
d)、通过sqlSession操作数据库
e)、处理结果
f)、关闭session
*/
String file = "mybatis.xml";
InputStream is= Resources.getResourceAsStream(file);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sqlSessionFactory.openSession();
/**
* 参数1-statement:待执行的某个sql 对应的标签具体路径 namespace.标签id
* 参数2:参数值
*/
User user= session.selectOne("com.shsxt.mappers.UserMapper.queryUserByUserId",75);
System.out.println(user);
session.close();
}
Mybatis 概念介绍
MyBatis 是一款优秀的持久层(Dao)框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
特点:
定制化SQL
支持存储过程(数据库脚本)调用
高级映射
ORM-对象关系映射
针对关系库-实体对象映射
表 实体类
字段 成员属性
表记录 类对象
自动化 VS 半自动化 ORM 框架
Mybatis :半自动化 ORM 框架
-
数据库表结构需要手动创建
-
依赖于数据库平台
-
sql 语句需要开发人员编写
优势:
-
sql 语句有开发人员编写 后期优化比较方便
-
适合传统项目 ,用于需求变化高的项目(互联网项目 电商 金融项目...)
-
市面用的最多的一套持久层框架
Hibernate:自动化ORM框架
-
可以通过框架来创建
-
不依赖具体的数据库平台
-
可以实现基本的CRUD 而不提供sql 直接调用API 方法即可
缺点:
-
表数据量较大时 查询效率比较低
-
用于需求变化不高的项目 传统型项目(OA 后端管理 ERP 系统...)
-
学习成本较高(实体与实体之间映射 sql 优化)
Mybatis 环境搭建与测试
1.创建Maven 普通项目
2.添加坐标
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
?
?
?
<!-- mybatis jar 包依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
?
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<!-- log4j日志打印 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
?
</dependencies>
<build>
<!--
Maven 项目
如果源代码(src/main/java)存在xml properties tld 等文件 maven 默认不会自动编译该文件到输出目录
如果要编译源代码中xml properties tld 等文件 需要显式配置resources 标签
-->
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
?
</build>
3.添加日志log4j.properties 文件
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
4.添加全局配置文件 mybatis.xml
文件模板参考官网 https://mybatis.org/mybatis-3/zh/getting-started.html
<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"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
?
?
<!--
sql 映射文件 加载配置
-->
<mappers>
<mapper resource="com/shsxt/mappers/UserMapper.xml"/>
</mappers>
</configuration>
5.添加sql 映射文件 UserMapper.xml
映射文件模本配置 https://mybatis.org/mybatis-3/zh/getting-started.html
<mapper namespace="com.shsxt.mappers.UserMapper">
<!--
namespace:命名空间属性
值唯一 在整个应用程序中不允许出现相同的命名空间 规则:包名.文件名
-->
?
?
<!--
select 标签:查询标签
id:用于区分同一个xml 文件不同的标签 同文件下 标签id 值唯一
resultType:输出结果类型
parameterType:输入参数类型
标签体:待执行的sql 语句 #{}:参数占位符 类似于 原生的sql 中? 占位符
-->
<select id="queryUserByUserId" parameterType="int" resultType="com.shsxt.vo.User">
select id, user_name as userName, user_pwd as userPwd, flag, create_time as createTime from user where id=#{id}
</select>
?
?
</mapper>
public void test() throws IOException {
/**
a)、读取mybatis的配置文件
b)、加载配置文件创建SqlSessionFactory
c)、根据SqlSessionFactory创建SqlSession
d)、通过sqlSession操作数据库
e)、处理结果
f)、关闭session
*/
String file = "mybatis.xml";
InputStream is= Resources.getResourceAsStream(file);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sqlSessionFactory.openSession();
/**
* 参数1-statement:待执行的某个sql 对应的标签具体路径 namespace.标签id
* 参数2:参数值
*/
User user= session.selectOne("com.shsxt.mappers.UserMapper.queryUserByUserId",75);
System.out.println(user);
session.close();
}
测试效果
以上是关于Mybatis的主要内容,如果未能解决你的问题,请参考以下文章
SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper
MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段