MyBatis工作环境的搭建

0x00:开发步骤

MyBatis 工作环境开发步骤为:创建工程、引入依赖 jar 包、搭建日志输出环境、配置数据库连接池、创建持久层 Java 对象、编写 Mapper 配置文件、编写可运行的样例代码。

0x01:准备数据库

以查询数据为例,数据库是一个用户表,库为 mybatis_test, 表为 user,里面包含用户的 id、姓名、密码、性别、邮箱、住址等。结构如下图:

0x02:给项目引入 jar 包

创建 JavaWeb 项目,随后引入 jar 包,添加到 WEB-INF/lib 目录下,然后全部选中右键 Build Path 再选择 Add To Build Path 即可,jar 包如下:

0x03:项目结构

扫描二维码关注公众号,回复: 1661839 查看本文章

0x04:编写日志输出环境配置配置文件

lib 中加入了 log4j 的 jar 包,这里将内容输出到控制台,其 log4j 的配置文件代码如下:

log4j.rootLogger = DEBUG,stdout
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %5p [%t] - %m%n

其中 rootLogger 是定义了日志输出级别为 debug 级。log4j.appender.stdout 是设置了日志的输出位置,ConsoleAppedner 是控制台。log4j.appender.stdout.layout 指定了输出载体的布局,PatternLayout 是自由布局的意思。log4j.appender.stdout.layout.ConversionPattern 定义了自由布局中日志的输出格式。

0x05:编写数据库连接池配置文件

数据库连接池配置文件,主要用来设置数据库的连接信息,例如数据库的连接驱动、数据库地址、数据库用户名和密码等,代码如下:

<?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="logImpl" value="LOG4J" />    
    </settings>
    <environments default="development">  
        <environment id="development">  
            <transactionManager type="JDBC" />  
            <dataSource type="POOLED">  
                <property name="driver" value="org.gjt.mm.mysql.Driver"/>  
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis_test?characterEncoding=utf-8"/>  
                <property name="username" value="root"/>  
                <property name="password" value="root"/>  
            </dataSource>  
        </environment>  
    </environments>  
    <mappers>  
        <mapper resource="sqlmap/UserMapper.xml"/>
    </mappers>  
</configuration>

settings 标签配置了日志输出模式。environment 标签配置了数据库的连接环境。mappers 是配置了 sql 语句的映射文件。

0x06:编写 sql 映射配置文件

再 MyBatis 中,基本 sql 语句都配置再 mapper 映射文件中,同时,也需要将文件配置到连接池文件中,上段代码已配置,其映射文件代码如下:

<?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="test">
    <select id="findUserById" parameterType="int" resultType="cn.com.mybatis.pojo.User">
        SELECT * FROM USER WHERE id=#{id}
    </select>
</mapper>

其中,namespace 属性对 sql 进行了分类处理,可以实现不同业务的 sql 隔离。select 标签中有一个 id 属性,当 sql 映射配置文件的 sql 被解析并封装到 mappedStatement 对象中时,为了调取相应的 sql,就需要这个 id 标识。
parameterType 时 sql 语句中参与字段的类型,resultType 表示将记录映射为 Java 对象。

0x07:编写映射的对象

上段的 resultType 映射的对象为 User 对象,编写这个 User 对象,其代码如下:

package cn.com.mybatis.pojo;

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;
    }
        //get和set方法略    
}

就是一个 java 对象,很简单,代码中有一个无参构造和有参构造。get 和 set 方法自动生成即可,页面中右键 source 选择 generate getters and setters 即可。

0x08:编写数据库交互类

最后,写下数据库交互类,之前文章说过 MyBatis 的工作流程,需要 SqlSessionFactor 加载配置文件,所以这里的数据库交互类主要就是创建 SqlSession 类,代码如下:

package cn.com.mybatis.datasource;

import java.io.IOException;
import java.io.InputStream;
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 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; 
    }
}

0x09:测试用例:

至此,代码就写完了,编写一个测试的例子即可,测试代码如下:

package cn.com.mybatis.test;

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

public class MyBatisTest {

    public DataConnection dataConn = new DataConnection();
    @Test
    public void TestSelect() throws IOException{
        SqlSession sqlSession = dataConn.getSqlSession();
    
        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.err.println("生日:" + sdf.format(user.getBirthday()));
        System.out.println("所在地:" + user.getProvince() + user.getCity());
        sqlSession.close();
    }
}

测试文件创建了可以与数据库交互的 sqlSession 实例对象,然后从数据库取出了 id 为 1 的用户数据,并在控制台打印。
sqlSession 的 SelectOne 方法有两个参数,第一个时 sql 映射的文件的 id,之前提到的唯一标识。第二个是 sql 映射文件中匹配的 parameterType 类型的参数,其控制台打印如下:

更多关于代码审计、WEB渗透、网络安全的运维的知识,请关注微信公众号:发哥微课堂。


猜你喜欢

转载自blog.csdn.net/fageweiketang/article/details/80718480