暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MyBatis3使用

程序员升级之路 2020-12-29
142

一、MyBatis介绍

以下来自官方介绍:

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

https://mybatis.org/mybatis-3/zh/index.html

说简单点,MyBatis是一个持久化框架,用于Java程序高效访问数据库,不用我们去访问原生相对繁琐的JDBC等Api,提升开发效率。


二、MyBatis环境准备

作为这一系列文章的第1篇,今天先讲述MyBatis的使用。

使用前先做下环境准备,以 Mysql为例,先创建数据库,假设名字为mybatis,然后创建表,表结构如下:

    CREATE TABLE `user` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(20) DEFAULT NULL,
    `phone` varchar(20) DEFAULT NULL,
    `create_time` datetime DEFAULT NULL,
    PRIMARY KEY (`id`)
    ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

    很简单的一张表,包含几个字段:姓名,手机和创建时间


    可以再加点数据:

      INSERT INTO `user` VALUES ('1', 'edward', '13612345678', '2020-10-28 10:20:30');
      INSERT INTO `user` VALUES ('2''howard''13912345678''2020-10-28 10:20:40');


      三、具体使用步骤

      1、引入jar包

         <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.3.0</version>
        </dependency>

        使用的版本为3.3.0,后续都以这个版本讲述。


        2、编写主配置文件

        使用Xml描述,命名随意,根据公司规范,如mybatis-config.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>
          <settings>
          <setting name="lazyLoadingEnabled" value="false"/>
          </settings>


              <typeAliases>
              </typeAliases>
          <mappers>
          <mapper resource="dal/mapper/UserMapper.xml"/>
              </mappers>
          </configuration>


          可以看到Xml中顶层节点为configuration,有以下子元素:settings、typeAliases、mappers,当然还可以有其它子节点,后面单独讲述。


          其中settings用来配置一些参数,mappers设置mapper文件, mapper文件就是我们编写Sql的地方,后面会讲。


          3、配置数据源

          可以在上面的主文件中配,以下为例:

            <?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="dev" >
            <environment id="dev">
            <transactionManager type="JDBC">
            <property name="" value="" >
            </transactionManager>
            <dataSource type="UNPOOLED">
            <property name="driver" value="com.mysql.jdbc.Driver" >
                    <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&amp;characterEncoding=UTF-8" />
            <property name="username" value="root" >
            <property name="password" value="123456" >
            </dataSource>
                </environment>
            </environments>

            </configuration>


            如果是SpringBoot的程序一般在application.properties中配置,Spring会自动帮我们装配:

              spring.datasource.driverClassName = com.mysql.jdbc.Driver
              spring.datasource.url = jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=UTF-8
              spring.datasource.username = root
              spring.datasource.password =123456


              4、编写实体类

              用于返回数据

                public class UserEntity {
                private Long id;
                private String name;
                private Date createTime;
                private String phone;




                public Long getId() {
                return id;
                }


                public void setId(Long id) {
                this.id = id;
                }


                public String getName() {
                return name;
                }


                public void setName(String name) {
                this.name = name;
                }


                public Date getCreateTime() {
                return createTime;
                }


                public void setCreateTime(Date createTime) {
                this.createTime = createTime;
                }


                public String getPhone() {
                return phone;
                }


                public void setPhone(String phone) {
                this.phone = phone;
                }


                }


                5、编写接口类

                  @Repository
                  public interface UserMapper {
                  List<UserEntity> listAllUser();
                  }

                  上面我们只定义了一个方法。


                  6、编写Sql

                  前面我们在主配置文件中引入的Mapper文件:

                     <mappers>
                    <mapper resource="dal/mapper/UserMapper.xml"/>
                    </mappers>

                    现在相应目录编写文件内容:

                      <?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.liujh.mapper.UserMapper">
                      <sql id="userFields">
                      id,name, phone,create_time
                      </sql>


                      <select id="listAllUser" resultType="com.liujh.entity.UserEntity" >
                      select
                      <include refid="userFields"/>
                      from user
                      </select>


                      </mapper>

                      Mapper文件的顶层节点为mapper,其中namespace属性对应第4步编写的接口类的命名空间。


                      每一个sql语句都有相应的节点,查询语句对应select节点,其中重点的属性为id,和第4步编写的接口对应的方法:

                        List<UserEntity> listAllUser();

                        这里为了重用把查询字段单独用一个节点表示。


                        resultType表示查询结果返回的类型,对应前面定义的UserEntity。


                        四、测试

                            @Resource
                          private UserMapper userMapper;


                          @Test
                          public void testMapper(){
                          List<UserEntity> userEntities = userMapper.listAllUser();
                          Assert.assertEquals(userEntities.size(), 2);
                          }

                          在一个测试类中注入UserMapper,当然可以手动new一个也行,然后debug下就可以看到userEntities的数据了


                          Codis源码分析之Slots迁移篇

                          Codis  Proxy是如何处理一个请求的

                          Raft算法之客户端交互篇

                          文章转载自程序员升级之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                          评论