美文网首页技术干货程序员开源工具技巧
自学Mybatis系列(番外1)——MyBatis实例(IDEA

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

作者: AceCream佳 | 来源:发表于2017-02-15 15:17 被阅读0次

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


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

    • mybatis-3.4.1.jar
    • mysql-connector-java-5.1.40-bin.jar
    • ant-1.9.6.jar
    • ant-launcher-1.9.6.jar
    • asm-5.0.4.jar
    • cglib-3.2.2.jar
    • commons-logging-1.2.jar
    • javassist-3.20.0-GA.jar
    • log4j-1.2.17.jar
    • log4j-api-2.3.jar
    • log4j-core-2.3.jar
    • ognl-3.1.8.jar
    • slf4j-api-1.7.21.jar
    • slf4j-log4j12-1.7.21.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已经初步使用成功!接下来就可以自己去各种尝试了。

    相关文章

      网友评论

        本文标题:自学Mybatis系列(番外1)——MyBatis实例(IDEA

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