mybatis介绍与环境搭建
admin
2023-05-22 12:02:35
0

一、不用纯jdbc的原因,即缺点。

1、数据库理解,使用时创建,不用时释放,会对数据库进行频繁的链接开启和关闭,造成数据库的资源浪费,影响数据库的性能。
设想:使用数据库的连接池。
2、将sql语句硬编码到java代码中,不利于系统维护。
设想:将sql放到配置文件中。
3、向preparedstatement中设置参数,对占位符位置和设置参数值,硬编码在Java代码中,不利于系统维护。
设想:将sql语句及占位符配置到xml中。
4、从resultset中便利结果集时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。
设想;将结果集,自动映射成Java对象

二、mybatis是什么

1、mybatis让程序员将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足需要的sql语句。
2、mybatis可以将输入参数自动映射,可以将结果集映射为Java对象,并且sql相对自由,不想hibernate那样看不到sql。
3、mybatis需要一个SqlMapConfig.xml,它是mybatis的全局配置文件,其中包括了数据库连接池,配置了数据源、事务等。
4、还需要一个SQLMap配置文件,它配置了映射关系(配置sql语句),sql语句要写在这个配置文件里,其实就是配置了一个statement,避免了sql语句硬编码到Java源文件中。后面会详细介绍这个配置文件的使用。
5、SqlsessionFactory是mybatis中生成Sqlsession的工厂,操作数据库。
mybatis框架结构是把sql语句的映射文件加载到SQLMapConfig中去,然后SqlSessionFactory加载SQLMapConfig后生成SQLSession,SQLSession来执行Statement。

三、构建一个mybatis工程。

1.所需要的jar包

mybatis介绍与环境搭建

即需要下载mybatis包和数据库驱动包,可以从GitHub上下载mybatis,解压后里面有lib文件夹和一个mybatis的核心包,lib中得包是mybatis的依赖包

mybatis的下载

2.工程结构。

mybatis介绍与环境搭建

src中放源码,lib中放所依赖的jar包,config中放各种配置文件,config文件下的sqlmap包中放sql映射文件。lib和config文件夹创建好后要记得邮件选择build path->use a source folder

 3.编写log4j.properties

mybatis介绍与环境搭建

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

mybatis介绍与环境搭建

 

 注意:开发时log4j.rootLogger=DEBUG,生产环境可以把DEBUG换成info

4.编写SqlMapConfig.xml

 

mybatis介绍与环境搭建

   
    
                
          
              
                  
                  
                      
                      
                      
                      
                  
              
        
        
        
       
    

mybatis介绍与环境搭建

 

 

 

 中包括的是针对每个对象的sql映射文件,environment标签中配置的是数据源,需要变动的只有这两个地方。

5.编写user.xml

mybatis介绍与环境搭建






    
        select * from users where id=#{id}
    
    
        select * from users where name like '%${value}%'
    
    
        insert into users(name,birthday,address,sex) values(#{name},#{birthday},#{address},#{sex})
        
            select last_insert_id()
        
    
    
        delete from users where id=#{id}
    
    
        update users set name=#{name},address=#{address},birthday=#{birthday},sex=#{sex} where id=#{id}
    

mybatis介绍与环境搭建

 

 这里共写了查询,插入,删除,更新四个sql语句,都用对应的标签包裹起来,每一个标签最后会映射为一个statement,标签中的属性id是此statement的唯一标示,以后再Java中就是通过这个id来调用的。parameterType表示输入参数,类似于在jdbc的预编译时为占位符赋值时的参数类型。

resultType是数据库返回结果对应的pojo类的类型。

标签是用来返回主键的,当插入一条记录后向立马得到这条记录的id就要加上这个标签,其中keyProperty属性标示的是实体类的主键属性,order表示此查询是在插入前执行还是插入后执行,resultType是查询的结果类型

6.创建一个实体类对应数据库,因为比较简单,此处不再给出代码

7.用Junit来测试。

mybatis介绍与环境搭建

package mt;import java.io.IOException;import java.io.InputStream;import java.util.Date;import java.util.List;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 org.junit.Test;import entity.Classes;import entity.users;public class FirstDemo {
    @Test    public void findUserbyIdTest(){        
        try {
            String resource="SqlMapConfig.xml";
            InputStream stream=Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(stream);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            users u=sqlSession.selectOne("test.srarchByid", 1);
            System.out.println(u.getBirthday().toString());
            sqlSession.close();
            
        } catch (IOException e) {            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    @Test    public void findUserByName(){        try {
            String resource="SqlMapConfig.xml";
            InputStream stream=Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(stream);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            List u=sqlSession.selectList("test.searchByName", "张");
            sqlSession.close();
        } catch (IOException e) {            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
    }
    @Test    public void insertUser(){        try {
            String resource="SqlMapConfig.xml";
            InputStream stream=Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(stream);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            users u=new users();
            u.setName("王磊");
            u.setSex("f");
            u.setBirthday(new Date());
            u.setAddress("上海");
            sqlSession.insert("test.insertUser", u);
            System.out.println(u.getId());
            sqlSession.commit();
            sqlSession.close();
        } catch (IOException e) {            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    @Test    public void deleteUser(){        try {
            String resource="SqlMapConfig.xml";
            InputStream stream=Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(stream);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            sqlSession.insert("test.deleteUser",2);
            sqlSession.commit();
            sqlSession.close();
        } catch (IOException e) {            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    @Test    public void updateUser(){        try {
            String resource="SqlMapConfig.xml";
            InputStream stream=Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(stream);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            users u=new users();
            u.setId(3);
            u.setName("王磊");
            u.setSex("f");
            u.setBirthday(new Date());
            u.setAddress("上海66666");
            sqlSession.update("updateUser",u);
            System.out.println(u.getId());
            sqlSession.commit();
            sqlSession.close();
        } catch (IOException e) {            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

mybatis介绍与环境搭建

 


相关内容

热门资讯

普京访华团规模会比特朗普的大吗... 在美国总统特朗普结束访华后,俄罗斯总统普京也将于5月19日至20日访华。俄方否认二者之间存在联系,同...
直击柳州地震震中太阳村镇:搜救... 5月18日0时21分,广西柳州市柳南区发生5.2级地震,震源深度8千米。凌晨时分,骤然地动山摇,打破...
开放式耳机到底能进化到哪一步?... 我发现,现在很多人买耳机,理由越来越朴素了。 不是为了什么 HiFi 音质,也不是为了图个清静,纯粹...
格陵兰岛自治政府总理见美特使,... 新华社奥斯陆5月18日电(记者张玉亮)哥本哈根消息:丹麦海外领地格陵兰岛自治政府总理延斯-弗雷德里克...
特朗普连发15张图分享“中国记... 据国是直通车,空军一号刚刚落地美国,特朗普就迫不及待地在社交媒体上分享了自己的“中国记忆”——连发1...
湖北宣恩强降雨致3人死亡、4人... 记者从湖北省恩施州宣恩县防汛抗旱指挥部了解到,5月17日至18日,湖北省恩施州宣恩县沙道沟镇白水河村...
这家意大利公司想让机械臂飞上太... 3D 打印是什么?你的直觉告诉你,是一台不足鞋盒大小的设备,吐出细如发丝的塑料,耗费数小时,堆叠成一...
2026荣耀性价比之王!实测半... 大家好,我是小杨,经过我线下门店实测、参数横向对比、用户口碑调研后,筛选出三款宝藏机型 —— 荣耀 ...
筑牢数字生命线,科士达以智慧能... 5月17日世界电信和信息社会日,2026 年国际电信联盟(ITU)以 “数字生命线:在互联世界中加强...
特朗普称将推迟对伊朗发动军事打... 当地时间5月18日,美国总统特朗普在社交平台“真实社交”发文表示,在卡塔尔、沙特阿拉伯、阿联酋领导人...