技术干货程序员开源工具技巧

自学Mybatis系列(番外1)——MyBatis实例(IDEA

2017-02-15  本文已影响0人  AceCream佳

这几天回头看了一下自己写的文章,发现一个问题:学习框架最好还是以使用为主,使用的不熟,一味钻研原理也是徒劳,所以这里决定——哦,在这停顿!写个最简单的实例,尽量多包括一些知识点。


包的引入过程我就不写了我用maven,已经把该引入的包都引入了。
这里向大家展示一下使用的jar包:

  • mybatis-3.4.1.jar

以上就是使用的jar包,其实就是mybatis的包和mysql-connector-java的包,可在官网下载使用。
先看测试用的表t_mybatis:

数据库:db1 表:t_mybatis 字段如上图

我使用的数据库可视化软件是DataGrip。
id类型是Long
r_name和r_note类型是String


由于我是用maven的webapp模板搭的环境,所以目录是自动生成的,为了测试添加了包和文件,如下图:

项目目录

下一步就是书写SQLSessionFactoryUtil类
<small>SqlSessionFactoryUtil.java</small>

package com.cream.util;


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;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Created by AceCream on 2017/2/8.
 */
public class SqlSessionFactoryUtil {
    //SqlSessionFactory对象
    private static SqlSessionFactory sqlSessionFactory = null;
    //类线程锁
    private static final Class CLASS_LOCK = SqlSessionFactoryUtil.class;
    /**
     * 私有化构造参数
     */
    private SqlSessionFactoryUtil() {}
    /**
     * 构建SQLSessionFactory
     */
    public static SqlSessionFactory initSqlSessionFactory() {
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException ex) {
            Logger.getLogger(SqlSessionFactoryUtil.class.getName()).log(Level.SEVERE,null,ex);
        }
        //下面括号中不能写this、因为我们的initSqlSessionFactory是静态的
        synchronized (CLASS_LOCK) {
            if (sqlSessionFactory==null){
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            }
        }
        return  sqlSessionFactory;
    }
    /**
     * 打开SqlSession
     */
    public static SqlSession openSqlSession(){
        if (sqlSessionFactory == null){
            initSqlSessionFactory();
        }
        return sqlSessionFactory.openSession();
    }
}

解释一下,上面就对SqlSessionFactory使用了单例模式:一看就能懂的~~~单例模式


接下来我们写这几个文件:
<small>Role.java</small>

package com.cream.pojo;

/**
 * Created by AceCream on 2017/2/15.
 */
public class Role {
    private Long id;
    private String rname;
    private String rnote;

    public Long getId() {
        return id;
    }

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

    public String getRname() {
        return rname;
    }

    public void setRname(String rname) {
        this.rname = rname;
    }

    public String getRnote() {
        return rnote;
    }

    public void setRnote(String rnote) {
        this.rnote = rnote;
    }

    @Override
    public String toString() {
        return "Role{" +
                "id=" + id +
                ", rname='" + rname + '\'' +
                ", rnote='" + rnote + '\'' +
                '}';
    }
}

<small>RoleDao.java</small>

package com.cream.dao;

import com.cream.pojo.Role;

import java.util.List;

/**
 * Created by AceCream on 2017/2/15.
 */
public interface RoleDao {

    List<Role> selectAll();

}

<small>roleMapper.java</small>

<?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.cream.dao.RoleDao">
    <resultMap id="roleMap" type="com.cream.pojo.Role">
        <id property="id" column="id"/>
        <result property="rname" column="r_name"/>
        <result property="rnote" column="r_note"/>
    </resultMap>
    <select id="selectAll" resultType="role" resultMap="roleMap">
        SELECT * FROM t_mybatis
    </select>
</mapper>

这里说几句:
resultMap在这里只是最基本的应用,由于我们数据库中的姓名栏是r_name,但是POJO类中是rname,直接获取会导致为空值,所以使用resultMap在这里可以简单让他们对应起来。


<small>jdbc.properties</small>

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db1
username=用户名
password=密码

注意改用户名和密码


<small>log4j.properties</small>

log4j=rootLogger=DEBUG,stdout
log4j.logger.org.mybatis=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5 %d %C %m%n

最后我们来测试一下:注意idea来说,xml等配置文件请放在resources文件夹下,否则不会被找到。
<small>Main.java</small>

package com.cream.main;

import com.cream.dao.RoleDao;
import com.cream.pojo.Role;
import com.cream.util.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by AceCream on 2017/2/15.
 */
public class Main {
    public static void main(String[] args) {
        SqlSession sqlSession = null;
        try{
            sqlSession = SqlSessionFactoryUtil.openSqlSession();
            RoleDao roleDao = sqlSession.getMapper(RoleDao.class);
            List<Role> list = new ArrayList<>();
            list = roleDao.selectAll();
            System.out.println(list);
            sqlSession.commit();
        }catch (Exception e){
            System.err.println(e.getMessage());
            sqlSession.rollback();
        }finally {
            if (sqlSession!=null){
                sqlSession.close();
            }
        }
    }
}

运行main
我们可以看到结果:

console显示

证明MyBatis已经初步使用成功!接下来就可以自己去各种尝试了。

上一篇 下一篇

猜你喜欢

热点阅读