zoukankan      html  css  js  c++  java
  • MyBatis学习-入门篇

    一、MyBatis 介绍

    MyBatis 是支持普通的 SQL 查询,存储过程和高级映射的优秀持久层框架,可以进行更为细致的 SQL 优化,减少查询字段。几乎消除了所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO (Plain Old Java Objects,普通的 Java 对象) 映射成数据库中的记录。

    二、如何使用 MyBatis

    我这里使用的 maven,所有目录也是基于 maven 的目录结构来说的。

    1. 所需的 JAR 包

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency>
    
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.3.0</version>
    </dependency>
            
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    2. 创建数据库表

    CREATE TABLE person (
      personId int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
      nickName varchar(200) DEFAULT NULL COMMENT '姓名',
      age int(11) DEFAULT NULL COMMENT '年龄',
      sex int(11) DEFAULT NULL COMMENT '性别',
      birthday timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '出生日期',
      PRIMARY KEY (personId)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

    3. 创建一个实体类 Person.java

    package com.enh.bean;
    
    import java.util.Date;
    
    public class PersonBean {
    
        private Integer personId;
        
        private String nickName;
        
        private Integer age;
        
        private Integer sex;
        
        private Date birthday;
        
        public PersonBean() {
        }
        public PersonBean(String nickName, Integer age,
                Integer sex, Date birthday) {
            super();
            this.nickName = nickName;
            this.age = age;
            this.sex = sex;
            this.birthday = birthday;
        }
        public Integer getPersonId() {
            return personId;
        }
        public void setPersonId(Integer personId) {
            this.personId = personId;
        }
        ... get() set() 方法
    public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { return "PersonBean [personId=" + personId + ", nickName=" + nickName + ", age=" + age + ", sex=" + sex + ", birthday=" + birthday + "]"; } }

    4. 创建Dao层接口类 PersonMapper.java

    package com.enh.mapper;
    
    import com.enh.bean.PersonBean;
    
    public interface PersonMapper {
    
        /**
         * @Description: 新增
         * @Author: 
         * @CreateTime: 
         * @param personBean
         * @return
         * @throws Exception
         */
        public Integer insert(PersonBean personBean) throws Exception;
    
    }

    5. 在 classpath 下创建 MyBatis 映射文件 com/enh/mapper/PersonMapper.xml 文件

    <?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.enh.mapper.PersonMapper">
        
        <insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="personBean">
            INSERT INTO 
                person (
                    nickName,
                    age,
                    sex,
                    birthday
                ) VALUES (
                    #{nickName},
                    #{age},
                    #{sex},
                    #{birthday}
                )
        </insert>
        
    </mapper>

    6. 在classpath下创建 MyBatis 配置文件 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>
        
        <!-- 引入外部文件 -->
        <properties resource="application.properties"></properties>
        
        <!-- 为Java Bean起别名 -->
        <typeAliases>
            <typeAlias alias="personBean" type="com.enh.bean.PersonBean" />
        </typeAliases>
    
        <!-- 配合MyBatis运行环境 -->
        <environments default="cybatis">
            <environment id="cybatis">
                <!-- 使用JDBC的提交和回滚来管理事物 -->
                <transactionManager type="JDBC"/>
                
                <!-- mybatis提供了三种数据源类型,分别是 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/enh/mapper/PersonMapper.xml" />
        </mappers>
        
    </configuration>

    7. 在 classpath 路径下创建参数集文件 application.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://127.0.0.1:3306/erim
    jdbc.username=root
    jdbc.password=root

    8. 需要建立一个初始化 SqlSession 的工具类

    package com.enh.common;
    
    import java.io.Reader;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    public class DBTools {
    
        public static SqlSessionFactory sessionFactory;
        
        static {
            try {
                // 使用MyBatis的Resources类加载配置文件
                Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
                // 构建SessionFactory实例
                sessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        public static SqlSession getSqlSession() {
            return sessionFactory.openSession();
        }
    }

    9. 测试

    public static void main(String[] args) {
        SqlSession sqlSession = null;
        try {
            // 获取sqlSession
            sqlSession = DBTools.getSqlSession();
            PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
            PersonBean personBean = new PersonBean("张三", 18, 1, new Date());
            personMapper.insert(personBean);
            System.out.println(personBean.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }    
  • 相关阅读:
    Golang 学习入坑(三)Go语言变量及常量及运算符
    Golang 学习入坑(二)Go语言结构及基本语法及基本类型
    docker 理解和一些应用
    golang学习入坑(一)Go介绍及环境搭建
    VMware安装Centos7超详细程
    2020-05-28 postgresql sequence
    2020-05-18 缓存穿透、缓存击穿、缓存雪崩
    2020-05-15 rocketmq-spring-starter支持多集群
    2020-05-15 rocketmq-spring-starter结合disconf使用
    2020-05-14 RSA加解密
  • 原文地址:https://www.cnblogs.com/libra0920/p/6208220.html
Copyright © 2011-2022 走看看