美文网首页
搭建MyBatis工作环境(一)

搭建MyBatis工作环境(一)

作者: 喵小姐_王小木 | 来源:发表于2019-01-09 20:27 被阅读0次

最近在学习MyBatis相关的技术,根据教程搭建一个简单的MyBatis入门工程,现在将搭建思路简单的总结一下,所有流程均是按照《SpringMVC+MyBatis开发(朱要光)》书中的教程。目前处于比照葫芦画瓢阶段,至于为什么要这么做,还是处于很懵懂的阶段,希望经过一段时间的学习,可以整理一份自己的见解。

一、数据库准备

//创建一个名为“mybatis_test"的数据库
CREATE DATABASE mybatis_test;
//创建一张名为user的表
DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(120) COLLATE utf8_bin DEFAULT NULL,
  `password` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `gender` varchar(5) COLLATE utf8_bin DEFAULT NULL,
  `email` varchar(100) COLLATE utf8_bin DEFAULT NULL,
  `province` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `city` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
//插入测试数据
INSERT INTO user (id, username, password, gender, email, province, city, birthday) values
(1, '张三', '111', '男', '1111@126.com', '河南省', '郑州市', '1991-04-23'),
(2, '李四', '222', '男', '2222@126.com', '河北省', '邯郸市', '1989-10-13'),
(3, '刘丽', '333', '女', '3333@126.com', '江苏省', '苏州市', '1994-06-09'),
(4, '李丽', '444', '女', '4444@126.com', '四川省', '成都市', '1992-11-07');

二、搭建工程环境

2.1、创建工程

我用的开发工具为idea,在idea中创建一个maven项目,为什么我们要用maven项目,而不是普通的java项目,如果是普通的java项目,我们如果依赖其他的项目,我们就需要手动把依赖的jar包复制到lib下,而且如果依赖的jar升级,我们就需要重新copy,特别麻烦,而且不容易管理。使用maven项目的话,我们只需要在pom文件中维护依赖jar包的坐标即可。maven的一些具体介绍和如果创建maven项目,大家可以自行百度。

2.2、引入jar包

我们需要引入我们项目依赖的jar包,在pom文件中维护依赖jar的坐标,如下:

<dependencies>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!--数据库连接-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>
        <!--日志输出-->
        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--SLF4J使你的代码独立于任意一个特定的日志API-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.11.1</version>
        </dependency>
        <!--Java 字节码操控框架-->
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>7.0</version>
        </dependency>
        <!--Code生成类库-->
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.2.10</version>
        </dependency>
        <!--使用spring的必备包,用来记录程序运行时的活动的日志记录-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <!--分析、编辑和创建Java字节码的类库-->
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.24.0-GA</version>
        </dependency>
    </dependencies>

2.3、创建工程目录结构

在src文件夹下创建三个包cn.com.mybatis.datasource(数据库连接)、cn.com.mybatis.po(持久层对象)、cn.com.mybatis.test(测试主程序)。
在src同级创建一个resource包,该目录下放置mapper包(该包下创建一个UserMapper.xml文件,SQL映射文件)、log4j.properties(日志输出配置文件)、SqlMapConfig.xml(数据库连接池配置文件)。
基本工程目录结构如下:


工程目录.png

2.4、编写日志输出环境配置文件---log4j.properties

这里使用的是目前比较流行的输出日志信息的开源工具log4j。

#日志输出级别,经常使用的级别:DEBUG(调试级别)、INFO(标准信息级别)、ERROR(错误级别)、WARN(异常级别)
# 在开发环境下日志级别要设成DEBUG,生产环境设为INFO或ERROR
#stdout将等级为DEBUG的日志信息输出到stdout参数所指定的输出载体中
log4j.rootLogger = DEBUG, stdout
# 设置stdout的输出载体是哪种类型,ConsoleAppender代表控制台
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
#设置stdout的输出载体的界面布局是哪种类型,PatternLayout可以灵活地指定布局模式,即自己去配置布局
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
#界面布局选择灵活布局类型,指定打印信息的具体格式,
#%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
#%t 输出产生该日志事件的线程名
#%m 输出代码中指定的消息
#%n 输出一个回车换行符
log4j.appender.stdout.layout.ConversionPattern = %5p [%t] - %m%n

2.5、编写数据库连接池配置文件---SqlMapConfig.xml

该配置文件是Mybatis与数据库建立连接的核心文件。

<?xml version="1.0" encoding="utf-8"?>
<!--指定xml的版本信息和编码格式信息(为上面一句配置的注释,第一句必须是xml配置信息,注释也不可以-->
<!--DTD文档定义类型,用来校验xml文件是否符合约定好的某种规范-->
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <settings>
        <!--日志模式-->
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!--和spring整合后environments配置将被废除-->
    <environments default="development">
        <environment id="development">
            <!--使用JDBC事务管理-->
            <transactionManager type="JDBC"/>
            <!--数据库连接池-->
            <dataSource type="POOLED">
                <!--数据库驱动信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--数据库连接地址-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis_test?characterEncoding=utf-8"/>
                <!--数据库用户名-->
                <property name="username" value="user"/>
                <!--数据库密码-->
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

2.6、编写SQL映射配置文件---UserMapper.xml

在Mybatis中,几乎所有的SQL语句都配置在Mapper映射文件中。在mapper--UserMapper.xml文件中首先添加一个select语句配置。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybtis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace对SQL进行分类化管理,实现不同业务SQL隔离-->
<mapper namespace="test">
    <!--select:查询语句,id:唯一标识,对应statement,parameterType:输入参数类型,resultType:结果类型-->
    <select id="findUserById" parameterType="int" resultType="cn.com.mybatis.po.User">
        SELECT * FROM user WHERE id=#{id}
    </select>
</mapper>

2.7、配置映射文件

为了能让Mybatis资源文件加载类解析Mapper文件,需要把Mapper文件的路径配置在全局配置文件SqlMapConfig.xml的configuration结尾标签前。

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

2.8、编写持久化实体类----cn.com.mybatis.po

持久化实体类是一个类中的成员变量与数据库表中字段一一对应的java类,一般这种类成为JavaBean。
在User类中,创建了User的所有属性信息,以及get和 set方法,并且创建了一个无构造参数函数和一个有参构造函数。

package cn.com.mybatis.po;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
    private int id;
    private String username;
    private String password;
    private String gender;
    private String email;
    private String province;
    private String city;
    private Date birthday;

    public User() {
    }

    public User(int id, String username, String password, String gender, String email, String province, String city, Date birthday) {
        super();
        this.id = id;
        this.username = username;
        this.password = password;
        this.gender = gender;
        this.email = email;
        this.province = province;
        this.city = city;
        this.birthday = birthday;
    }

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

2.9、编写数据库交互类----cn.com.mybatis.datasource

DataConnection类通过resource资源加载SqlMapConfig.xml配置文件,然后获取SQL会话工厂sqlSessionFactory,之后使用会话工厂创建可以与数据库交互的sqlSession类的实例对象。

package cn.com.mybatis.datasource;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;

public class DataConnection {
    //配置文件
    private String resource = "SqlMapConfig.xml";
    private SqlSessionFactory sqlSessionFactory;
    private SqlSession sqlSession;

    public SqlSession getSqlSession() throws IOException{
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    }
}

2.10、编写测试用例----cn.com.mybatis.test

MyBatisTest类的功能为从数据库中读取id=1的用户数据,并在控制台中打印出来。

package cn.com.mybatis.test;

import cn.com.mybatis.po.User;
import cn.com.mybatis.datasource.DataConnection;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.text.SimpleDateFormat;

public class MyBatisTest {

    public DataConnection dataConn = new DataConnection();

    @Test
    public void TestSelect() throws IOException {
        //通过DataConnection类获取sqlSession会话对象
        SqlSession sqlSession = dataConn.getSqlSession();
        //sqlSession.selectOne最终结果与映射文件中所匹配的resultType类型
        // statement对应UserMappper.xml中的namespace加statement配置的id
        // parameter对应UserMappper.xml中parameterType类型的参数#{id}
        User user = sqlSession.selectOne("test.findUserById", 1);
        System.out.println("姓名:" + user.getUsername());
        System.out.println("性别:" + user.getGender());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("生日:" + sdf.format(user.getBirthday()));
        System.out.println("所在地:" + user.getProvince() + user.getCity());
        //关闭sqlSession会话
        sqlSession.close();
    }
}

2.11、测试样例输出结果

image.png

相关文章

网友评论

      本文标题:搭建MyBatis工作环境(一)

      本文链接:https://www.haomeiwen.com/subject/kabyrqtx.html