• Mybatis入门


    Mybatis基本信息

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。

    MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,

    将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

    特点

    • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
    • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
    • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
    • 提供映射标签,支持对象与数据库的orm字段关系映射
    • 提供对象关系映射标签,支持对象关系组建维护
    • 提供xml标签,支持编写动态sql。

     

    搭建mybatis框架环境

    1、创建maven工程

    右键选择New、Module,选择左侧的maven、更换jdk、下方选择框打勾然后搜索webapp、Ctrl+下方向键选择图中相同版本的webapp。

    2、导入相关pom依赖

    pom.xml

      1 <?xml version="1.0" encoding="UTF-8"?>
      2 
      3 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      4   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      5   <modelVersion>4.0.0</modelVersion>
      6 
      7   <groupId>com.yuan</groupId>
      8   <artifactId>mybatis01</artifactId>
      9   <version>1.0-SNAPSHOT</version>
     10   <packaging>war</packaging>
     11 
     12   <name>mybatis01 Maven Webapp</name>
     13   <!-- FIXME change it to the project's website -->
     14   <url>http://www.example.com</url>
     15 
     16   <properties>
     17     <maven.compiler.source>1.8</maven.compiler.source>
     18     <maven.compiler.target>1.8</maven.compiler.target>
     19   </properties>
     20 
     21 
     22   <dependencies>
     23     <!-- ********************** junit单元测试依赖 ********************** -->
     24     <dependency>
     25       <groupId>junit</groupId>
     26       <artifactId>junit</artifactId>
     27       <version>4.12</version>
     28       <scope>test</scope>
     29     </dependency>
     30 
     31     <!-- ********************** Java Servlet API  ********************** -->
     32     <dependency>
     33       <groupId>javax.servlet</groupId>
     34       <artifactId>javax.servlet-api</artifactId>
     35       <version>4.0.0</version>
     36       <scope>provided</scope>
     37     </dependency>
     38 
     39     <!-- ********************** Mybatis依赖 ********************** -->
     40     <dependency>
     41       <groupId>org.mybatis</groupId>
     42       <artifactId>mybatis</artifactId>
     43       <version>3.4.5</version>
     44     </dependency>
     45 
     46     <!-- ********************** Mysql JDBC驱动 ********************** -->
     47     <dependency>
     48       <groupId>mysql</groupId>
     49       <artifactId>mysql-connector-java</artifactId>
     50       <version>5.1.44</version>
     51     </dependency>
     52 
     53     <!-- **********************  日志配置  ********************** -->
     54     <!--记得修改mybatis.cfg.xml添加如下内容-->
     55     <!--<setting name="logImpl" value="LOG4J2"/>-->
     56     <!--核心log4j2jar包-->
     57     <dependency>
     58       <groupId>org.apache.logging.log4j</groupId>
     59       <artifactId>log4j-core</artifactId>
     60       <version>2.9.1</version>
     61     </dependency>
     62     <dependency>
     63       <groupId>org.apache.logging.log4j</groupId>
     64       <artifactId>log4j-api</artifactId>
     65       <version>2.9.1</version>
     66     </dependency>
     67     <!--web工程需要包含log4j-web,非web工程不需要-->
     68     <dependency>
     69       <groupId>org.apache.logging.log4j</groupId>
     70       <artifactId>log4j-web</artifactId>
     71       <version>2.9.1</version>
     72     </dependency>
     73   </dependencies>
     74 
     75   <build>
     76     <finalName>mybatis01</finalName>
     77     <resources>
     78       <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
     79       <resource>
     80         <directory>src/main/java</directory>
     81         <includes>
     82           <include>**/*.xml</include>
     83         </includes>
     84       </resource>
     85       <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
     86       <resource>
     87         <directory>src/main/resources</directory>
     88         <includes>
     89           <include>jdbc.properties</include>
     90           <include>*.xml</include>
     91         </includes>
     92       </resource>
     93     </resources>
     94 
     95     <plugins>
     96       <plugin>
     97         <groupId>org.mybatis.generator</groupId>
     98         <artifactId>mybatis-generator-maven-plugin</artifactId>
     99         <version>1.3.2</version>
    100         <dependencies>
    101           <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
    102           <dependency>
    103             <groupId>mysql</groupId>
    104             <artifactId>mysql-connector-java</artifactId>
    105             <version>5.1.44</version>
    106           </dependency>
    107         </dependencies>
    108         <configuration>
    109           <overwrite>true</overwrite>
    110         </configuration>
    111       </plugin>
    112     </plugins>
    113   </build>
    114 </project>

    3、Mybatis相关插件安装

    顶部工具栏处找到扳手图标(setting),选择图中底部的按钮

    Free mybatis plugin    --我这里是已经下载好了,没下载的右侧会有一个install,下载完之后再点击右侧的按钮(重启IDEA生效)

    Mybatis generator

    mybatis tools

    maven helper

    全部下载后关闭IDEA再重启

    4、Mybatis.cfg.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 resource="jdbc.properties"/>
    
        <settings>
            <setting name="logImpl" value="LOG4J2"/>
        </settings>
    
        <!-- 别名 -->
        <typeAliases>
            <!--<typeAlias type="com.javaxl.model.Book" alias="Book"/>-->
        </typeAliases>
    
    
        <!-- 配置mybatis运行环境 -->
        <environments default="development">
            <environment id="development">
                <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
                <transactionManager type="jdbc"/>
    
                <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
                <!-- POOLED 表示支持JDBC数据源连接池 -->
                <!-- UNPOOLED 表示不支持数据源连接池 -->
                <!-- JNDI 表示支持外部数据源连接池 -->
                <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>
    
        <mappers>
            <mapper resource="com/yuan/mapper/BookMapper.xml"/>
        </mappers>
    </configuration>

     

    基于ssm逆向工程的使用

    1、安装Mybatis generator插件  上一步已完成

    2、配置generatorConfig.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
     3        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
     4 <generatorConfiguration>
     5     <!-- 引入配置文件 -->
     6     <properties resource="jdbc.properties"/>
     7 
     8     <!--指定数据库jdbc驱动jar包的位置-->
     9     <classPathEntry location="D:Maven-folderapache-maven-3.5.0-binapache-maven-3.5.0mvn_repositorymysqlmysql-connector-java5.1.44mysql-connector-java-5.1.44.jar"/>
    10 
    11     <!-- 一个数据库一个context -->
    12     <context id="infoGuardian">
    13         <!-- 注释 -->
    14         <commentGenerator>
    15             <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
    16             <property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 -->
    17         </commentGenerator>
    18 
    19         <!-- jdbc连接 -->
    20         <jdbcConnection driverClass="${jdbc.driver}"
    21                         connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
    22 
    23         <!-- 类型转换 -->
    24         <javaTypeResolver>
    25             <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
    26             <property name="forceBigDecimals" value="false"/>
    27         </javaTypeResolver>
    28 
    29         <!-- 01 指定javaBean生成的位置 -->
    30         <!-- targetPackage:指定生成的model生成所在的包名 -->
    31         <!-- targetProject:指定在该项目下所在的路径  -->
    32         <javaModelGenerator targetPackage="com.yuan.model"
    33                             targetProject="src/main/java">
    34             <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
    35             <property name="enableSubPackages" value="false"/>
    36             <!-- 是否对model添加构造函数 -->
    37             <property name="constructorBased" value="true"/>
    38             <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
    39             <property name="trimStrings" value="false"/>
    40             <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
    41             <property name="immutable" value="false"/>
    42         </javaModelGenerator>
    43 
    44         <!-- 02 指定sql映射文件生成的位置 -->
    45         <sqlMapGenerator targetPackage="com.yuan.mapper"
    46                          targetProject="src/main/java">
    47             <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
    48             <property name="enableSubPackages" value="false"/>
    49         </sqlMapGenerator>
    50 
    51         <!-- 03 生成XxxMapper接口 -->
    52         <!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 -->
    53         <!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 -->
    54         <!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
    55         <javaClientGenerator targetPackage="com.yuan.mapper"
    56                              targetProject="src/main/java" type="XMLMAPPER">
    57             <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
    58             <property name="enableSubPackages" value="false"/>
    59         </javaClientGenerator>
    60 
    61         <!-- 配置表信息 -->
    62         <!-- schema即为数据库名 -->
    63         <!-- tableName为对应的数据库表 -->
    64         <!-- domainObjectName是要生成的实体类 -->
    65         <!-- enable*ByExample是否生成 example类 -->
    66         <!--<table schema="" tableName="t_book" domainObjectName="Book"-->
    67         <!--enableCountByExample="false" enableDeleteByExample="false"-->
    68         <!--enableSelectByExample="false" enableUpdateByExample="false">-->
    69         <!--&lt;!&ndash; 忽略列,不生成bean 字段 &ndash;&gt;-->
    70         <!--&lt;!&ndash; <ignoreColumn column="FRED" /> &ndash;&gt;-->
    71         <!--&lt;!&ndash; 指定列的java数据类型 &ndash;&gt;-->
    72         <!--&lt;!&ndash; <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> &ndash;&gt;-->
    73         <!--</table>-->
    74 
    75         <table schema="" tableName="t_mvc_book" domainObjectName="Book"
    76                enableCountByExample="false" enableDeleteByExample="false"
    77                enableSelectByExample="false" enableUpdateByExample="false">
    78         </table>
    79 
    80     </context>
    81 </generatorConfiguration>

    3、配置maven运行generator命令

    点击左上角的+号、选择maven,右侧name(名称,可随意取),Working directory:需配置该命令的项目路径,Command line:mybatis-generator:generate -e ;

    mybatis增删改案例

    SessionUtil.java

     1 package com.yuan.util;
     2 
     3 import org.apache.ibatis.session.SqlSession;
     4 import org.apache.ibatis.session.SqlSessionFactory;
     5 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     6 
     7 
     8 public class SessionUtil {
     9     private static SqlSessionFactory sessionFactory;
    10     private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
    11     static {
    12         sessionFactory = new SqlSessionFactoryBuilder().build(SessionUtil.class.getResourceAsStream("/mybatis.cfg.xml"));
    13     }
    14 
    15     public static SqlSession openSession() {
    16         SqlSession session = threadLocal.get();
    17         if (null == session) {
    18             session = sessionFactory.openSession();
    19             threadLocal.set(session);
    20         }
    21         return session;
    22     }
    23 
    24     public static void main(String[] args) {
    25         SqlSession session = openSession();
    26         System.out.println(session.getConnection());
    27         session.close();
    28 //        System.out.println(session.getConnection());
    29     }
    30 }

    BookService.java

     1 package com.yuan.service;
     2 
     3 import com.yuan.model.Book;
     4 
     5 public interface BookService {
     6 
     7     int deleteByPrimaryKey(Integer bid);
     8 
     9     int insert(Book record);
    10 
    11     int insertSelective(Book record);
    12 
    13     Book selectByPrimaryKey(Integer bid);
    14 
    15     int updateByPrimaryKeySelective(Book record);
    16 
    17     int updateByPrimaryKey(Book record);
    18 
    19 }

    BookServiceImpl.java

     1 package com.yuan.service.impl;
     2 
     3 import com.yuan.mapper.BookMapper;
     4 import com.yuan.model.Book;
     5 import com.yuan.service.BookService;
     6 
     7 public class BookServiceImpl implements BookService {
     8     private BookMapper bookMapper;
     9 
    10     public BookMapper getBookMapper() {
    11         return bookMapper;
    12     }
    13 
    14     public void setBookMapper(BookMapper bookMapper) {
    15         this.bookMapper = bookMapper;
    16     }
    17 
    18     @Override
    19     public int deleteByPrimaryKey(Integer bid) {
    20         return bookMapper.deleteByPrimaryKey(bid);
    21     }
    22 
    23     @Override
    24     public int insert(Book record) {
    25         return bookMapper.insert(record);
    26     }
    27 
    28     @Override
    29     public int insertSelective(Book record) {
    30         return bookMapper.insertSelective(record);
    31     }
    32 
    33     @Override
    34     public Book selectByPrimaryKey(Integer bid) {
    35         return bookMapper.selectByPrimaryKey(bid);
    36     }
    37 
    38     @Override
    39     public int updateByPrimaryKeySelective(Book record) {
    40         return bookMapper.updateByPrimaryKeySelective(record);
    41     }
    42 
    43     @Override
    44     public int updateByPrimaryKey(Book record) {
    45         return bookMapper.updateByPrimaryKey(record);
    46     }
    47 }

    BookServiceImplTest.java

     1 package com.yuan.service;
     2 
     3 
     4 import com.yuan.mapper.BookMapper;
     5 import com.yuan.model.Book;
     6 import com.yuan.service.impl.BookServiceImpl;
     7 import com.yuan.util.SessionUtil;
     8 import org.apache.ibatis.session.SqlSession;
     9 import org.junit.After;
    10 import org.junit.Before;
    11 import org.junit.Test;
    12 
    13 
    14 public class BookServiceTest{
    15 
    16     private BookService bookService;
    17     private SqlSession sqlSession;
    18     @Before
    19     public void setUp(){
    20         BookServiceImpl bookService = new BookServiceImpl();
    21         sqlSession = SessionUtil.openSession();
    22 
    23         BookMapper mapper = sqlSession.getMapper(BookMapper.class);
    24         bookService.setBookMapper(mapper);
    25         this.bookService = bookService;
    26     }
    27 
    28     @Test
    29     public void insert() {
    30         Book book = new Book();
    31         book.setBid(1);
    32         book.setBname("mybatis插入");
    33         book.setPrice(33f);
    34         bookService.insert(book);
    35     }
    36 
    37     @Test
    38     public void selectByPrimaryKey() {
    39 //        Book book = this.bookService.selectByPrimaryKey(27);
    40           this.bookService.deleteByPrimaryKey(1);
    41 //        System.out.println(book);
    42     }
    43     @After
    44     public void tearDown()throws  Exception{
    45         sqlSession.commit();
    46         sqlSession.close();
    47     }
    48 }

    谢谢观看!!!

  • 相关阅读:
    Git SSH Key 生成步骤
    IOS音频1:之采用四种方式播放音频文件(一)AudioToolbox AVFoundation OpenAL AUDIO QUEUE
    IOS网络篇1之截取本地URL请求(NSURLProtocol)
    IOS 视频直播/智能家居(一行行敲代码,从零开始)lesson:1整体架构
    iOS应用支持IPV6,就那点事儿
    App store最新审核标准公布
    iOS应用内付费(IAP)开发步骤列表
    iOS应用内支付(IAP)的那些坑
    IOS 第三方支付的使用:支付宝
    亲们,委托你们是否已忘记
  • 原文地址:https://www.cnblogs.com/ly-0919/p/11692737.html
Copyright © 2020-2023  润新知