zoukankan      html  css  js  c++  java
  • mybatis

    mybatis是一个开源框架,可以把java的pojo映射成数据库的中的记录;

    demo

    创建实体类,用于映射数据表

    package com.how2java.pojo;
     
    public class Category {
        private int id;
        private String name;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
         
    }

    配置文件mybatis-config.xml,主要是为了提供链接数据库所用的账号密码等。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <typeAliases>
          <package name="com.how2java.pojo"/>
        </typeAliases>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="admin"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="com/how2java/pojo/Category.xml"/>
        </mappers>
    </configuration>
    View Code

    配置文件Category.xml,这个是与数据表Category所对应的配置文件,其内部可以定义sql语句

    <?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.how2java.pojo">
            <select id="listCategory" resultType="Category">
                select * from   category_     
            </select>
        </mapper>

    测试类

    package com.how2java;
     
    import java.io.IOException;
    import java.io.InputStream;
    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 com.how2java.pojo.Category;
     
    public class TestMybatis {
     
        public static void main(String[] args) throws IOException {
            //根据配置文件得到sqlSessionFactory
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //根据sqlSessionFactory 得到session
            SqlSession session=sqlSessionFactory.openSession();
            //通过Session的selectList方法,调用配置文件Category.xml中的sql语句,sql语句的id就是selectList方法的参数
            List<Category> cs=session.selectList("listCategory");
            for (Category c : cs) {
                System.out.println(c.getName());
            }
             
        }
    }

    一级缓存

    Mytabis的一级缓存在session上,只要第一次通过session查询数据,就会放在session上;下次再查询相同id的数据,直接从缓存中取出来,不用再去数据库中取。

    public static void main(String[] args) throws IOException {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session1 = sqlSessionFactory.openSession();
            //同一个id=1的Category,在相同的session下,第二次查询没有启动数据库
            Category c1 = session1.selectOne("getCategory", 1);
            System.out.println(c1);
            Category c2 = session1.selectOne("getCategory", 1);
            System.out.println(c2);
     
            session1.commit();
            session1.close();
             
        }

    二级缓存

    mybatis的二级缓存是SessionFactory,这就比一级缓存范围更大了一些;因为session都是基于SessionFactory产生的;

    二级缓存不是默认开启的,需要配置mybatis-config.xml和Category.xml,另外还需要让pojo类实现序列化接口Serializable;

    这时再运行测试类,发现即使不是同一个session,但属于同一个SessionFactory,也会开启缓存,省掉第二次的数据库访问;

  • 相关阅读:
    css 文本超过指定行数,显示省略号
    CSS 使radio和checkbox框,和文字对齐平行
    C# 使用InputStream接收 解析表单参数
    CSS 控制文本超出宽度,显示省略号
    C# 将http在线文件,保存到服务器指定位置
    C# Get请求
    C# POST请求
    js 使用XMLHttpRequest 上传文件,显示进度条
    js 验证字符长度,一个中文2个字符,英文和数字为1个字符
    iOS Carthage集成SnapKit
  • 原文地址:https://www.cnblogs.com/zhuqiwei-blog/p/10771831.html
Copyright © 2011-2022 走看看