• mybatis入门


    目录

    一、搭建mybatis 框架环境

    1.1 mybatis简介

            mybatis是什么?

             mybatis官网:

    回顾:

    1.2 导入相关pom依赖

    1.3 Mybatis相关插件安装

    1.4 Mybatis.cfg.xml配置

            web.xml:

            mybatis.cfg.xml:

    二、基于ssm逆向工程的使用(IDEA)

    2.1 配置generatorConfig.xml

    2.2 加入工具类SessionUtil

    2.3 配置日志框架log4j2.xml

    三、Mybatis增删改查案例

    运行结果如下:

            查询结果:

             删除结果:

    四、总结 

     Mybatis generator插件使用步骤总结

     sqlSession的作用

     mybatis的测试


    一、搭建mybatis 框架环境

    1.1 mybatis简介

            mybatis是什么?

    • MyBatis 是一款ORM框架,即对象映射关系框架;是一款关于数据库层面的框架;
    • MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
    • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
    • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

             mybatis官网:

    mybatis – MyBatis 3 | 简介https://mybatis.org/mybatis-3/zh/index.html

    回顾:

            自定义mvc搭建环境

    1. 导入jar包依赖
    2. 导入框架的工具类+配置文件
    3. 配置到web.xml中

            Mybatis环境的搭建

    1. 导入pom依赖
    2. 导入框架的配置文件

    1.2 导入相关pom依赖

    先新建一个maven项目(上篇博客有提到过哦!)

     修改pom.xml的依赖

    替换的内容为:

    1. <properties>
    2. <maven.compiler.source>1.8maven.compiler.source>
    3. <maven.compiler.target>1.8maven.compiler.target>
    4. properties>
    5. <dependencies>
    6. <dependency>
    7. <groupId>junitgroupId>
    8. <artifactId>junitartifactId>
    9. <version>4.12version>
    10. <scope>testscope>
    11. dependency>
    12. <dependency>
    13. <groupId>javax.servletgroupId>
    14. <artifactId>javax.servlet-apiartifactId>
    15. <version>4.0.0version>
    16. <scope>providedscope>
    17. dependency>
    18. <dependency>
    19. <groupId>org.mybatisgroupId>
    20. <artifactId>mybatisartifactId>
    21. <version>3.4.5version>
    22. dependency>
    23. <dependency>
    24. <groupId>mysqlgroupId>
    25. <artifactId>mysql-connector-javaartifactId>
    26. <version>5.1.44version>
    27. dependency>
    28. <dependency>
    29. <groupId>org.apache.logging.log4jgroupId>
    30. <artifactId>log4j-coreartifactId>
    31. <version>2.9.1version>
    32. dependency>
    33. <dependency>
    34. <groupId>org.apache.logging.log4jgroupId>
    35. <artifactId>log4j-apiartifactId>
    36. <version>2.9.1version>
    37. dependency>
    38. <dependency>
    39. <groupId>org.apache.logging.log4jgroupId>
    40. <artifactId>log4j-webartifactId>
    41. <version>2.9.1version>
    42. dependency>
    43. dependencies>

    然后点击右下角的 import Changes 开始下载jar包


    下载完后,再在下面的build里面添加这些:

    1. <resources>
    2. <resource>
    3. <directory>src/main/javadirectory>
    4. <includes>
    5. <include>**/*.xmlinclude>
    6. includes>
    7. resource>
    8. <resource>
    9. <directory>src/main/resourcesdirectory>
    10. <includes>
    11. <include>jdbc.propertiesinclude>
    12. <include>*.xmlinclude>
    13. includes>
    14. resource>
    15. resources>

    然后在里面添加:

    1. <plugin>
    2. <groupId>org.mybatis.generatorgroupId>
    3. <artifactId>mybatis-generator-maven-pluginartifactId>
    4. <version>1.3.2version>
    5. <dependencies>
    6. <dependency>
    7. <groupId>mysqlgroupId>
    8. <artifactId>mysql-connector-javaartifactId>
    9. <version>5.1.44version>
    10. dependency>
    11. dependencies>
    12. <configuration>
    13. <overwrite>trueoverwrite>
    14. configuration>
    15. plugin>

     然后点击右下角的 import Changes 开始下载jar包,下载完后保存即可!

    然后是相关的文件

    配置jdbc:(记得改用户名、密码以及数据库名)

    jdbc.properties:

    1. jdbc.driver=com.mysql.jdbc.Driver
    2. jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8
    3. jdbc.username=root
    4. jdbc.password=123456

    1.3 Mybatis相关插件安装

            插件名:

    1. Free mybatis plugin
    2. Mybatis generator
    3. mybatis tools
    4. maven helper

     

    详细介绍:

    Intellij Idea Mybatis 插件(plugin和tools插件)_yangshijin1988的博客-CSDN博客_idea mapper 插件Intellij Idea Mybatis插件主要有 Mybatis plugin插件和Mybatis tools插件。(一)Mybatis plugin插件主要功能有:提供Mapper接口与配置文件中对应SQL的导航编辑XML文件时自动补全根据Mapper接口, 使用快捷键生成xml文件及SQL标签ResultMap中的property支持自动补全https://blog.csdn.net/yangshijin1988/article/details/63258960/

    1.4 Mybatis.cfg.xml配置

            web.xml:

    1. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    4. version="3.1">
    5. web-app>

            mybatis.cfg.xml:

    1. configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    2. <configuration>
    3. <properties resource="jdbc.properties"/>
    4. <settings>
    5. <setting name="logImpl" value="LOG4J2"/>
    6. settings>
    7. <typeAliases>
    8. typeAliases>
    9. <environments default="development">
    10. <environment id="development">
    11. <transactionManager type="jdbc"/>
    12. <dataSource type="POOLED">
    13. <property name="driver"
    14. value="${jdbc.driver}"/>
    15. <property name="url"
    16. value="${jdbc.url}"/>
    17. <property name="username" value="${jdbc.username}"/>
    18. <property name="password" value="${jdbc.password}"/>
    19. dataSource>
    20. environment>
    21. environments>
    22. <mappers>
    23. <mapper resource="com/javaxl/mapper/BookMapper.xml"/>
    24. mappers>
    25. configuration>

     

    二、基于ssm逆向工程的使用(IDEA)

    2.1 配置generatorConfig.xml

    1. generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    2. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
    3. <generatorConfiguration>
    4. <properties resource="jdbc.properties"/>
    5. <classPathEntry location="D:\\maven\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>
    6. <context id="infoGuardian">
    7. <commentGenerator>
    8. <property name="suppressAllComments" value="true"/>
    9. <property name="suppressDate" value="true"/>
    10. commentGenerator>
    11. <jdbcConnection driverClass="${jdbc.driver}"
    12. connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
    13. <javaTypeResolver>
    14. <property name="forceBigDecimals" value="false"/>
    15. javaTypeResolver>
    16. <javaModelGenerator targetPackage="com.ps.model"
    17. targetProject="src/main/java">
    18. <property name="enableSubPackages" value="false"/>
    19. <property name="constructorBased" value="true"/>
    20. <property name="trimStrings" value="false"/>
    21. <property name="immutable" value="false"/>
    22. javaModelGenerator>
    23. <sqlMapGenerator targetPackage="com.ps.mapper"
    24. targetProject="src/main/java">
    25. <property name="enableSubPackages" value="false"/>
    26. sqlMapGenerator>
    27. <javaClientGenerator targetPackage="com.ps.mapper"
    28. targetProject="src/main/java" type="XMLMAPPER">
    29. <property name="enableSubPackages" value="false"/>
    30. javaClientGenerator>
    31. <table schema="" tableName="t_mvc_Book" domainObjectName="Book"
    32. enableCountByExample="false" enableDeleteByExample="false"
    33. enableSelectByExample="false" enableUpdateByExample="false">
    34. table>
    35. <table schema="" tableName="t_easyui_permission" domainObjectName="Permission"
    36. enableCountByExample="false" enableDeleteByExample="false"
    37. enableSelectByExample="false" enableUpdateByExample="false">
    38. table>
    39. context>
    40. generatorConfiguration>

     

    这里的那个jar包要替换成你本地仓库下载好的那jar包的路径

    然后在generatorConfig.xml中改好自己想要的生成增删改查的表名:

     改好后添加运行插件:

     

    command line: mybatis-generator:generate -e

     

     增加完后 到pom.xml右键的Run Maven中就可以看到刚刚加入的那个运行插件了

    然后运行完后:

     增删改查的通用代码就出来了!

    2.2 加入工具类SessionUtil

    1. package com.ps.util;
    2. import org.apache.ibatis.session.SqlSession;
    3. import org.apache.ibatis.session.SqlSessionFactory;
    4. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    5. /**
    6. * @author 彭于晏
    7. * @site www.pengyuyan.com
    8. * @company 玉渊工作室
    9. * @create 2022-08-11 18:31
    10. */
    11. public class SessionUtil {
    12. private static SqlSessionFactory sessionFactory;
    13. private static ThreadLocal threadLocal = new ThreadLocal();
    14. static {
    15. sessionFactory = new SqlSessionFactoryBuilder().build(SessionUtil.class.getResourceAsStream("/mybatis.cfg.xml"));
    16. }
    17. public static SqlSession openSession() {
    18. SqlSession session = threadLocal.get();
    19. if (null == session) {
    20. session = sessionFactory.openSession();
    21. threadLocal.set(session);
    22. }
    23. return session;
    24. }
    25. public static void main(String[] args) {
    26. SqlSession session = openSession();
    27. System.out.println(session.getConnection());
    28. session.close();
    29. // System.out.println(session.getConnection());
    30. }
    31. }

     

    2.3 配置日志框架log4j2.xml

    1. <Configuration status="WARN" monitorInterval="30">
    2. <Properties>
    3. <Property name="LOG_HOME">/root/workspace/lucenedemo/logsProperty>
    4. <property name="ERROR_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/errorproperty>
    5. <property name="WARN_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/warnproperty>
    6. <property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%nproperty>
    7. Properties>
    8. <Appenders>
    9. <Console name="Console" target="SYSTEM_OUT">
    10. <ThresholdFilter level="trace" onMatch="ACCEPT"
    11. onMismatch="DENY" />
    12. <PatternLayout pattern="${PATTERN}" />
    13. Console>
    14. <File name="log" fileName="logs/test.log" append="false">
    15. <PatternLayout
    16. pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    17. File>
    18. <RollingFile name="RollingFileInfo" fileName="${LOG_HOME}/info.log"
    19. filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
    20. <ThresholdFilter level="info" onMatch="ACCEPT"
    21. onMismatch="DENY" />
    22. <PatternLayout
    23. pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    24. <Policies>
    25. <TimeBasedTriggeringPolicy interval="1"
    26. modulate="true" />
    27. Policies>
    28. RollingFile>
    29. <RollingFile name="RollingFileWarn" fileName="${WARN_LOG_FILE_NAME}/warn.log"
    30. filePattern="${WARN_LOG_FILE_NAME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
    31. <ThresholdFilter level="warn" onMatch="ACCEPT"
    32. onMismatch="DENY" />
    33. <PatternLayout
    34. pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    35. <Policies>
    36. <TimeBasedTriggeringPolicy />
    37. <SizeBasedTriggeringPolicy size="2 kB" />
    38. Policies>
    39. <DefaultRolloverStrategy max="20" />
    40. RollingFile>
    41. <RollingFile name="RollingFileError" fileName="${ERROR_LOG_FILE_NAME}/error.log"
    42. filePattern="${ERROR_LOG_FILE_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd-HH-mm}-%i.log">
    43. <ThresholdFilter level="error" onMatch="ACCEPT"
    44. onMismatch="DENY" />
    45. <PatternLayout
    46. pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    47. <Policies>
    48. <TimeBasedTriggeringPolicy interval="1"
    49. modulate="true" />
    50. Policies>
    51. RollingFile>
    52. Appenders>
    53. <Loggers>
    54. <logger name="org.springframework" level="INFO">logger>
    55. <logger name="org.mybatis" level="INFO">logger>
    56. <logger name="org.springframework" level="ERROR" />
    57. <logger name="org.hibernate" level="ERROR" />
    58. <logger name="org.apache.struts2" level="ERROR" />
    59. <logger name="com.opensymphony.xwork2" level="ERROR" />
    60. <logger name="org.jboss" level="ERROR" />
    61. <root level="all">
    62. <appender-ref ref="Console" />
    63. <appender-ref ref="RollingFileInfo" />
    64. <appender-ref ref="RollingFileWarn" />
    65. <appender-ref ref="RollingFileError" />
    66. root>
    67. Loggers>
    68. Configuration>

     

    三、Mybatis增删改查案例

    首先我们写一个接口来绑定删除方法和查询单个方法

    BookBiz.java

    1. package com.ps.biz;
    2. import com.ps.model.Book;
    3. /**
    4. * @author 彭于晏
    5. * @site www.pengyuyan.com
    6. * @company 玉渊工作室
    7. * @create 2022-08-11 19:19
    8. */
    9. public interface BookBiz {
    10. int deleteByPrimaryKey(Integer bid);
    11. Book selectByPrimaryKey(Integer bid);
    12. }

    再写一个实现类 BookBizImpl.java

    1. package com.ps.biz.imp;
    2. import com.ps.biz.BookBiz;
    3. import com.ps.mapper.BookMapper;
    4. import com.ps.model.Book;
    5. /**
    6. * @author 彭于晏
    7. * @site www.pengyuyan.com
    8. * @company 玉渊工作室
    9. * @create 2022-08-11 19:23
    10. */
    11. public class BookBizImpl implements BookBiz {
    12. private BookMapper bookMapper;
    13. // alt+insert 快速提供set/get/tostring/构造方法
    14. // alt+enter 快速构建实现类,填充代码的前半部分 ctrl+1
    15. public BookMapper getBookMapper() {
    16. return bookMapper;
    17. }
    18. public void setBookMapper(BookMapper bookMapper) {
    19. this.bookMapper = bookMapper;
    20. }
    21. @Override
    22. public int deleteByPrimaryKey(Integer bid) {
    23. return bookMapper.deleteByPrimaryKey(bid);
    24. }
    25. @Override
    26. public Book selectByPrimaryKey(Integer bid) {
    27. return bookMapper.selectByPrimaryKey(bid);
    28. }
    29. }

    最后写一个测试类的方法 BookBizImplTest.java

    1. package com.ps.biz.imp;
    2. import com.ps.biz.BookBiz;
    3. import com.ps.mapper.BookMapper;
    4. import com.ps.model.Book;
    5. import com.ps.util.SessionUtil;
    6. import org.apache.ibatis.session.SqlSession;
    7. import org.junit.After;
    8. import org.junit.Before;
    9. import org.junit.Test;
    10. import org.junit.runner.RunWith;
    11. import static org.junit.Assert.*;
    12. /**
    13. * @author 彭于晏
    14. * @site www.pengyuyan.com
    15. * @company 玉渊工作室
    16. * @create 2022-08-11 19:51
    17. */
    18. public class BookBizImplTest {
    19. private BookBizImpl bookBiz;
    20. private SqlSession sqlSession;
    21. @Before
    22. public void setUp() throws Exception{
    23. System.out.println("初始化方法...");
    24. BookBizImpl bookBiz =new BookBizImpl();
    25. // 工具类中获取session对象
    26. sqlSession = SessionUtil.openSession();
    27. // 从session对象中获取mapper对象
    28. BookMapper mapper = sqlSession.getMapper(BookMapper.class);
    29. bookBiz.setBookMapper(mapper);
    30. this.bookBiz =bookBiz;
    31. }
    32. @After
    33. public void tearDown()throws Exception{
    34. System.out.println("方法测试结束...");
    35. sqlSession.commit();
    36. sqlSession.close();
    37. }
    38. @Test
    39. public void deleteByPrimaryKey() {
    40. bookBiz.deleteByPrimaryKey(44);
    41. }
    42. @Test
    43. public void selectByPrimaryKey() {
    44. System.out.println("测试的业务方法..");
    45. // System.out.println(bookBiz.getBookMapper());
    46. Book book = bookBiz.selectByPrimaryKey(44);
    47. System.out.println(book);
    48. }
    49. }

    运行结果如下:

            查询结果:

             删除结果:


    四、总结 

     Mybatis generator插件使用步骤总结

     1. 添加配置文件
        1.1 修改5.1.44的jar的路径
        1.2 修改实体类生成地址
        1.3 修改SQL对应的配置文件的生成地址
        1.4 修改Dao层代码生成地址
        1.5 指定需要生成增删改查代码对应的表
     2. 配置maven 的 Mybatis 逆向生成代码的命令
        commond line
     3. 在pom文件中使用配置好的命令

     sqlSession的作用

    1.sqlSession可以拿到Mapper对象
    2.作为缓存使用,一级缓存,默认会开启的缓存
    3.处于性能的考虑,会采用二级缓存,二级缓存需要收动开启

     mybatis的测试

    1.日志框架的集成作用:排除定位问题
    2.对于ORM(hibernate/Mybatis/JPA/MP)框架,都需要注意事物问题

     

    今天分享的知识就到这里啦!喜欢的话可以点点关注,谢谢!

  • 相关阅读:
    无线路由器设置成交换机
    多线程之线程安全集合类
    LeetCode-169-多数元素
    计算机毕业设计之java+ssm校园外卖配送系统
    java基于springboot+vue的二手车信息网站系统
    ARM cache 分析
    人工智能 框架 paddlepaddle 飞桨 使用指南& 使用例子 线性回归模型demo 详解
    ThreeJS简介
    Java开发从入门到精通(一):Kafka基础知识
    【数据结构】优先级队列(堆)
  • 原文地址:https://blog.csdn.net/weixin_63531940/article/details/126275589