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 }

谢谢观看!!!

原文地址:https://www.cnblogs.com/ly-0919/p/11692737.html