千家信息网

mybatis介绍与环境搭建

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,一、不用纯jdbc的原因,即缺点。1、数据库理解,使用时创建,不用时释放,会对数据库进行频繁的链接开启和关闭,造成数据库的资源浪费,影响数据库的性能。设想:使用数据库的连接池。2、将sql语句硬编码到
千家信息网最后更新 2026年11月01日mybatis介绍与环境搭建

一、不用纯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包和数据库驱动包,可以从GitHub上下载mybatis,解压后里面有lib文件夹和一个mybatis的核心包,lib中得包是mybatis的依赖包

mybatis的下载

2.工程结构。

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

3.编写log4j.properties

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

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

4.编写SqlMapConfig.xml

                                                                                                                                                                                                                                              

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

5.编写user.xml

                    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}    

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

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

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

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

7.用Junit来测试。

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();        }    }}


数据 文件 配置 数据库 语句 标签 参数 结果 编码 中放 代码 对象 属性 类型 系统 查询 自由 不用 实体 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西安纸贵互联网科技有限公司 苏州找大状互联网科技有限公司 礼当家互联网科技 唐信互联网科技 无线互联网科技 互联网科技ppt模板 上海万想互联网科技 湖南洣水互联网科技有限公司扣款 昭通云南众福互联网科技有限公司 宁夏众和广鑫互联网科技有限公司 互联网新科技动漫ppt素材 威龙国际互联网科技公司 杭州披云加互联网科技有限公司 工业互联网科技成果转化 世界互联网科技成果奖 互联网科技职业技能培训学校 互联网科技品牌 河南商务圈互联网科技有限公司 黑龙江互联网科技公司 互联网的黑科技实验室 互联网科技工作委员会副主任毛军 互联网科技深圳 赫美联合互联网科技 互联网科技美容 国外互联网科技网站 央行互联网金融科技公司 广西互联网科技孵化中心 晋城互联网科技 山东子淼互联网科技有限公司 宇信科技在杭州互联网排第几
0