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 框架

  1. 数据库表结构需要手动创建

  2. 依赖于数据库平台

  3. sql 语句需要开发人员编写

 

优势:

  1. sql 语句有开发人员编写 后期优化比较方便

  2. 适合传统项目 ,用于需求变化高的项目(互联网项目 电商 金融项目...)

  3. 市面用的最多的一套持久层框架

 

Hibernate:自动化ORM框架

  1. 可以通过框架来创建

  2. 不依赖具体的数据库平台

  3. 可以实现基本的CRUD 而不提供sql 直接调用API 方法即可

缺点:

  1. 表数据量较大时 查询效率比较低

  2. 用于需求变化不高的项目 传统型项目(OA 后端管理 ERP 系统...)

  3. 学习成本较高(实体与实体之间映射 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

<?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"/>
               <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

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
       PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<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>

6.执行测试

 @Test
   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 概念介绍

MyBatis 是一款优秀的持久层(Dao)框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

特点:

定制化SQL

支持存储过程(数据库脚本)调用

高级映射

 

ORM-对象关系映射

针对关系库-实体对象映射

表 实体类

字段 成员属性

表记录 类对象

自动化 VS 半自动化 ORM 框架

Mybatis :半自动化 ORM 框架

  1. 数据库表结构需要手动创建

  2. 依赖于数据库平台

  3. sql 语句需要开发人员编写

 

优势:

  1. sql 语句有开发人员编写 后期优化比较方便

  2. 适合传统项目 ,用于需求变化高的项目(互联网项目 电商 金融项目...)

  3. 市面用的最多的一套持久层框架

 

Hibernate:自动化ORM框架

  1. 可以通过框架来创建

  2. 不依赖具体的数据库平台

  3. 可以实现基本的CRUD 而不提供sql 直接调用API 方法即可

缺点:

  1. 表数据量较大时 查询效率比较低

  2. 用于需求变化不高的项目 传统型项目(OA 后端管理 ERP 系统...)

  3. 学习成本较高(实体与实体之间映射 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

<?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"/>
               <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

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
       PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<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>

6.执行测试

 @Test
   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

mybatis动态sql片段与分页,排序,传参的使用

MyBatis动态SQL标签用法

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

mybatis动态sql之利用sql标签抽取可重用的sql片段

[mybatis]动态sql_sql_抽取可重用的sql片段