MyBatis概念

Posted buhuang-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis概念相关的知识,希望对你有一定的参考价值。

 MyBatis简介


    MyBatis是一个ORM数据持久层框架

    它在内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询,存储过程和高级映射

    将SQL语句写在配置文件中,和程序分离,利于维护

    什么是ORM

      ORM(Object Relational Mapping)是对象到数据库表的映射,即数据持久化

    使用eclipse

      1. 配置上Tomcat

        Window——pereferences——server——runtime Environment

      2. 配置Server         

        Window——show view——servers

        选择阿帕奇的tomcat7,然后就可以添加项目到tomcat

      3. 创建动态web项目

        选择创建项目Dynamic web project

    搭建MyBatis开发环境

      1. 导入MyBatis的jar

        log4j-1.2.17.jar——日志记录

        mybatis-3.2.2.jar——核心包

        mybatis-3.2.2-sources.jar——源码包MyBatis

                             mysql-connector-java-5.1.0-bin.jar——mysql驱动

        有四个,直接放lib下即可

      2.配置DTD

        配置config和mapper的DTD,让文件自动联想(自动提示)

      3.  添加mybatis配置文件

        在项目下面创建一个和src同级的文件夹resources

          1. 导入mybatis-config.xml (MyBatis核心配置文件)

          在 settings 节点下创建 typeAliases

<typeAliases>
            <!-- 一般都直接指定包名。使用时直接写实体类的名称即可 -->
            <package name="com.xxx.pojo"/> 
</typeAliases>

 

          在最下面的mappers节点中创建mapper节点,将mapper文件加载到配置文件中(每个mapper文件都需要配置一下)

<mappers>
        <mapper resource="com/xxx/dao/UserMapper.xml" />
</mappers>

 

        2. 导入database.properties

          database.properties文件用来指定连接数据库的配置信息

        3. 导入log4j.properties

          error:将日志输出在外部文件

 

        4.创建工具类util

          将(核心代码)读取配置文件的操作封装起来

          创建MyBatisUtil工具类

public class MyBatisUtil {
    //使用单例方式创建factory对象
    private static SqlSessionFactory factory=null;
    //在静态块中初始化factory对象
    static {
        //读取配置文件,需要用io流来读取
        InputStream is;
        try {
            //getResourceAsStream 按照访问输出流的方式获取资源
            //参数就是要读取的资源
            is = Resources.getResourceAsStream("mybatis-config.xml");
            //创建SqlSessionFactory对象
            factory = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
//        开启会话
    public static SqlSession openSqlSession() {
        return factory.openSession(true);
    }
//        关闭会话
    public static void closeSqlSession(SqlSession session) {
        session.close();
    }
}

 

 

        5. 创建实体类pojo

        6.在dao中创建接口

          接口的方法的名称必须和mapper.xml的对应的SQL语块的id一样

 

        7.在dao中创建mapper.xml配置文件

           在根节点mapper中,添加属性namespace

             namespace:命名空间

             namespace指定接口类的位置和名称(代表映射文件的存放位置,关联绑定接口)

 

          添加增删改查语句

          

        8.创建测试用例类test

           未把核心代码封装到工具类的demo

 

 1     //每个方法都必须加上@Test注解
 2     @Test
 3     public void test_Demo_01() {
 4         //将SqlSession对象创建到外层
 5         SqlSession session=null;
 6         try {
 7             //读取配置文件,需要用io流来读取
 8             //getResourceAsStream 按照访问输出流的方式获取资源
 9             //参数就是要读取的资源
10             InputStream is=Resources.getResourceAsStream("mybatis-config.xml");
11             //创建SqlSessionFactory对象,读取配置文件
12             //SqlSessionFactory 就代表sqlsession的工厂
13             SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
14             //创建sqlsession对象
15             //openSession 打开会话,true默认自动提交事务
16             session = factory.openSession(true);
17             
18             //调用mapper中的select方法
19             //selectOne 表示只查询了一个数
20             int count=session.selectOne("com.xxx.dao.UserMapper.UserCount");
21             
22             //输出查询出来的结果
23             System.out.println("总行数是:"+count);
24         } catch (IOException e) {
25             // TODO Auto-generated catch block
26             e.printStackTrace();
27         }finally {
28             //如果session不是空,则关闭
29             if(session!=null) {
30                 session.close();
31             }
32         }
33     }

          使用封装类后的demo

          

@Test
    //这是使用工具类的示例
    public void test_Demo_02() {
        //将SqlSession对象创建到外层
        SqlSession session=null;
        try {
            //将读取配置文件的代码封装到了工具类,所以用它创建session即可
            session = MyBatisUtil.openSqlSession();

            //调用mapper中的select方法
            //selectOne 表示只查询了一个数
            int count=session.selectOne("com.xxx.dao.UserMapper.UserCount");
            //输出查询出来的结果
            System.out.println("总行数是:"+count);
        }finally {
            //释放资源
            MyBatisUtil.closeSqlSession(session);
        }
    }

          将结果输出到日志中

//在方法外部获取日志,减少创建
private Logger logger = Logger.getLogger(test01.class);


//将把日志保存外部文件中,其他的方法都不会保存到外部文件
logger.error(user);

        使用Mapper接口方式操作数据

//使用Mapper接口方式操作数据,需要指定一个接口类
//然后.它相应的方法
List<User> users=session.getMapper(UserMapper.class).userList();

 

        

 

以上是关于MyBatis概念的主要内容,如果未能解决你的问题,请参考以下文章

mybatis学习(39):动态sql片段

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

mybatis动态sql片段与分页,排序,传参的使用

MyBatis动态SQL标签用法

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

mybatis动态sql之利用sql标签抽取可重用的sql片段