美文网首页程序员
读书笔记:mybatis的使用入门

读书笔记:mybatis的使用入门

作者: 夜玉龙 | 来源:发表于2017-04-13 17:52 被阅读226次

    概述

    MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代
    码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 
    POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
                                                                          -----搬自官网
    

    利用mybatis操作对数据的操作的过程一般是这样的

    1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
    2. 由sessionfactory  产生 session
    3. 在session 中完成对数据的增删改查和事务提交等.
    4. 在用完之后关闭session 。
    5. 在Java对象和数据库之间有做mapping 的配置文件,也通常是xml 文件。
    

    利用IntelliJ Idea搭建一个mybatis开发环境

    所需资源

    1. IntelliJ Idea 15
    2. mybatis-3.4.4.jar
    3. mysql-connector-java-5.1.39-bin.jar
    

    准备工作:先创建一个数据库user

    Create TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `userName` varchar(50) DEFAULT NULL,
      `userAge` int(11) DEFAULT NULL,
      `userAddress` varchar(200) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    
    
    Insert INTO `user` VALUES ('1', 'Peter', '15', 'NewYork US');
    Insert INTO `user` VALUES ('2', 'Jack', '18', 'L.A US');
    Insert INTO `user` VALUES ('3', 'Linda', '17', 'London UK');
    Insert INTO `user` VALUES ('4', 'Lily', '21', 'Shanghai CN');
    
    1、打开IntelliJ Idea,创建一个Java工程,工程命名为DemoForMybatis

    src目录修改为src_test,创建src_user目录,并将src_user目录变成Sources类型

    2、导入所需包mybatis-3.4.4.jarmysql-connector-java-5.1.39-bin.jar
    3、现在来创建项目

    在目录 src_user下创建一个配置文件Configuration.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>
            <typeAlias alias="User" type="com.mybatis.model.User"/>
        </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://127.0.0.1:3306/test" />
                    <property name="username" value="root"/>
                    <property name="password" value="password"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="com/mybatis/model/User.xml"/>
        </mappers>
    </configuration>
    

    src_user中创建一个包,命名为com.mybatis.model,并在这个包中创建一个POJO User如下

    public class User {
        private int id;
        private String userName;
        private String userAge;
        private String userAddress;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getUserAge() {
            return userAge;
        }
    
        public void setUserAge(String userAge) {
            this.userAge = userAge;
        }
    
        public String getUserAddress() {
            return userAddress;
        }
    
        public void setUserAddress(String userAddress) {
            this.userAddress = userAddress;
        }
    }
    

    在包com.mybatis.model中创建一个xml文件User.xml,如下所示

    <?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.mybatis.models.UserMapper">
        <select id="selectUserByID" parameterType="int" resultType="User">
            select * from `user` where id = #{id}
        </select>
    </mapper>
    

    现在来利用mybatis里面的类来完成一个简单的查询功能,在src_test创建一个Java文件Test.java,代码如下

    import com.mybatis.model.User;
    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.Reader;
    
    /**
     * Created by Alpha on 17/4/12.
     */
    public class Test {
        private static SqlSessionFactory sqlSessionFactory;
        private static Reader reader;
    
        static{
            try{
                reader    = Resources.getResourceAsReader("Configuration.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    
        public static SqlSessionFactory getSession(){
            return sqlSessionFactory;
        }
    
        public static void SimpleSearch(int id){
            SqlSession session = sqlSessionFactory.openSession();
            try {
                User user = (User) session.selectOne("com.mybatis.models.UserMapper.selectUserByID", id);
                System.out.println(user.getUserAddress());
                System.out.println(user.getUserName());
            } finally {
                session.close();
            }
        }
    }
    

    创建测试类Main,代码如下:

    /**
     * Created by Alpha on 17/4/12.
     */
    public class Main {
        public static void main(String[] args){
            Test.SimpleSearch(2);
        }
    }
    

    运行测试代码,结果如下

    上述的方法可以采用更好维护的一种方式来修改一下
    src_user目录下面创建一个包com.mybatis.inter,并在包中创建一个接口IUserOperation,里面包含一个方法selectUserByID代码如下

    package com.mybatis.model;
    
    /**
     * Created by Alpha on 17/4/12.
     */
    public interface IUserOperation {
        public User selectUserByID(int id);
    }
    

    修改User.xml文件的命名空间为IUserOperation

    <?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.mybatis.inter.IUserOperation">
        <select id="selectUserByID" parameterType="int" resultType="User">
            select * from `user` where id = #{id}
        </select>
    </mapper>
    

    在Test类中新增一个方法SimpleSearchByInterface,代码如下

    public static void SimpleSearchByInterface(int id){
            SqlSession session = sqlSessionFactory.openSession();
            try {
                IUserOperation userOperation=session.getMapper(IUserOperation.class);
                User user = userOperation.selectUserByID(id);
                System.out.println(user.getUserAddress());
                System.out.println(user.getUserName());
            } finally {
                session.close();
            }
        }
    

    执行,查看结果如下

    按照上面的步骤类似,我们可以对数据进行基本的增删改查,过程不再赘述,下面我把最终的代码贴到下面

    User.xml

    <?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.mybatis.inter.IUserOperation">
        <select id="selectUserByID" parameterType="int" resultType="User">
            select * from `user` where id = #{id}
        </select>
        <resultMap id="resultListUser" type="User">
            <id column="id" property="id"/>
            <result column="userName" property="userName"/>
            <result column="userAge" property="userAge"/>
            <result column="userAddress" property="userAddress"></result>
        </resultMap>
        <select id="selectUsers" parameterType="string" resultMap="resultListUser">
            SELECT * from USER WHERE userName LIKE #{userName}
        </select>
        <insert id="addUser" parameterType="User" useGeneratedKeys="true"
                keyProperty="id">
            INSERT INTO USER (userName,userAge,userAddress) VALUES (#{userName},#{userAge},#{userAddress})
        </insert>
        <update id="updateUser" parameterType="User">
            UPDATE USER SET userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} WHERE id=#{id}
        </update>
        <delete id="deleteUser" parameterType="int">
            DELETE FROM USER WHERE id=#{id}
        </delete>
    </mapper>
    

    Test.java

       /**
         * 执行查询并返回查询的结果集
         */
        public static void getResultList(){
            SqlSession session = sqlSessionFactory.openSession();
            try{
                IUserOperation userOperation = session.getMapper(IUserOperation.class);
                List<User> users = userOperation.selectUsers("summer");
                for(User user : users){
                    System.out.println(user.getId() + ":" + user.getUserName() + ":" + user.getUserAddress());
                }
            }finally {
                session.close();
            }
        }
    
        /**
         * 添加数据到数据库中
         */
        public static void addUser(User user){
            SqlSession session = sqlSessionFactory.openSession();
            try{
                IUserOperation userOperation = session.getMapper(IUserOperation.class);
                userOperation.addUser(user);
                //添加后需要提交事务,否则数据库中不会有改变
                session.commit();
                System.out.println("当前增加的用户id为:" + user.getId());
            }finally {
                session.close();
            }
        }
    
        /**
         * 更新数据库的数据
         */
        public static void updateUser(int id){
            SqlSession session = sqlSessionFactory.openSession();
            try{
                IUserOperation userOperation = session.getMapper(IUserOperation.class);
                User user = userOperation.selectUserByID(id);
                user.setUserName("猪头三");
                userOperation.updateUser(user);
                session.commit();
            }finally {
                session.close();
            }
        }
    
        /**
         * 删除数据库中的数据
         */
        public static void deleteUser(int id){
            SqlSession session = sqlSessionFactory.openSession();
            try{
                IUserOperation userOperation = session.getMapper(IUserOperation.class);
                userOperation.deleteUser(id);
                session.commit();
            }finally {
                session.close();
            }
        }
    

    IUserOperation.java

    package com.mybatis.inter;
    import com.mybatis.model.User;
    
    import java.util.List;
    
    /**
     * Created by Alpha on 17/4/12.
     */
    public interface IUserOperation {
        public User selectUserByID(int id);
    
        public List<User> selectUsers(String userName);
    
        public void addUser(User user);
    
        public void updateUser(User user);
    
        public void deleteUser(int id);
    
        public List<Article> getUserArticles(int id);
    }
    

    好了,既然我们已经利用mybatis完成了一个数据库的增删改查操作,那么接下来我们讨论一下mybatis的XML的配置

    XML的配置

    mybatis3的配置大标签Configuration的树结构如下所示

    configuration
    |--- properties
    |--- settings
    |--- typeAliases
    |--- typeHandlers
    |--- objectFactory
    |--- plugins
    |--- environments
    |--- |--- environment
    |--- |--- |--- transactionManager
    |--- |--- |__ dataSource
    |__ mappers
    

    在配置的时候需要注意的是配置文件中的属性顺序必须和上面的Configuration的树结构顺序一致,否则就会出现错误
    下面让我们来详细讲一讲mybatis的配置

    properties

    我们对之前的配置文件做一下修改,修改的结果如下:

    <configuration>
        <properties resource="com/mybatis/model/config.properties">
            <property name="username" value="root"/>
            <property name="password" value="Jackson"/>
        </properties>
    
        <typeAliases>
            <typeAlias alias="User" type="com.mybatis.model.User"/>
        </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://127.0.0.1:3306/test" />
                    <property name="username" value="${username}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="com/mybatis/model/User.xml"/>
        </mappers>
    </configuration>
    

    上面在peoperties中有两个成员usernamepassword,在下面引用的时候我们采用的方式是${username}${password},也就是说properties的作用是定义在其它地方使用的属性,propertiesresource的属性定义的是将它所指向的配置文件给包含进来,也就是说我们这么做了就可以直接使用resource中的属性

    settings

    setting是mybatis中极其重要的属性,它们会改变mybatis运行时的行为。
    看下面一个代码

    <settings>
      <setting name="cacheEnabled" value="true"/>
      <setting name="lazyLoadingEnabled" value="true"/>
      <setting name="multipleResultSetsEnabled" value="true"/>
      <setting name="useColumnLabel" value="true"/>
      <setting name="useGeneratedKeys" value="false"/>
      <setting name="autoMappingBehavior" value="PARTIAL"/>
      <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
      <setting name="defaultExecutorType" value="SIMPLE"/>
      <setting name="defaultStatementTimeout" value="25"/>
      <setting name="defaultFetchSize" value="100"/>
      <setting name="safeRowBoundsEnabled" value="false"/>
      <setting name="mapUnderscoreToCamelCase" value="false"/>
      <setting name="localCacheScope" value="SESSION"/>
      <setting name="jdbcTypeForNull" value="OTHER"/>
      <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
    </settings>
    

    让我们具体看一下其中的意义

    cacheEnabled :该配置影响的所有映射器中配置的缓存的全局开关。默认值为true,一般不用进行设置即可
    lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置`fetchType`属性来覆盖该项的开关状态,默认值为false
    multipleResultSetsEnabled:是否允许单一语句返回多结果集(需要兼容驱动),默认为true,所以一般不用进行设置
    useColumnLabel:使用列标签代替列名。默认设置为true
    useGeneratedKeys:允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键,默认为false
    autoMappingBehavior:指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集,默认为PARTIAL
    autoMappingUnknownColumnBehavior:指定发现自动映射目标未知列(或者未知属性类型)的行为。NONE: 不做任何反应,WARNING: 输出提醒日志,('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior' 的日志等级必须设置为 WARN),FAILING: 映射失败 (抛出 SqlSessionException),默认为NONE
    defaultExecutorType:配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新。默认为SIMPLE
    defaultStatementTimeout:设置超时时间,它决定驱动等待数据库响应的秒数。默认什么都没设置,表示等待任意时间
    defaultFetchSize:   为驱动的结果集获取数量(fetchSize)设置一个提示值。此参数只可以在查询设置中被覆盖,默认什么都没设
    safeRowBoundsEnabled:允许在嵌套语句中使用分页(RowBounds),默认为false
    mapUnderscoreToCamelCase:是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。默认为false
    localCacheScope:MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。默认值为SESSION
    jdbcTypeForNull:当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER,默认为OTHER
    lazyLoadTriggerMethods:指定哪个对象的方法触发一次延迟加载。默认为equals,clone,hashCode,toString
    

    还有一些其它的配置,在此不再赘述,详情请见官方文档

    typeAliases

    为Java类型设置一个短的名字,存在的意义仅在于用来减少类完全限定名的冗余,例如

    <typeAliases>
        <typeAlias alias="User" type="com.mybatis.model.User"/>
    </typeAliases>
    

    这个是利用短名User来替代com.mybatis.model.User来进行使用

    typeHandlers

    如果我们想在数据库中存储一个Date型的字段,但是我们将该字段已经设为了varchar类型了,那么我们怎么去做到这一点呢,也许我们可以先将Date转化为String类型再进行存储,其实我们不必这样操作,我们可以使用TypeHandler的工具来做到这一点,下面我们来用一个例子说明一下这个属性的用法

    1. 创建一个继承自BaseTypeHandler的类ExampleTypeHandler,代码如下所示
    package com.mybatis.util;
    
    import org.apache.ibatis.type.BaseTypeHandler;
    import org.apache.ibatis.type.JdbcType;
    
    import java.sql.CallableStatement;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.Date;
    
    /**
     * Created by Alpha on 17/4/13.
     */
    public class ExampleTypeHandler extends BaseTypeHandler<Date> {
    
        @Override
        public void setNonNullParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) throws SQLException {
            ps.setString(i,String.valueOf(((Date)parameter).getTime()));
        }
    
        @Override
        public Date getNullableResult(ResultSet rs, String columnName) throws SQLException {
            String sqlTimetamp = rs.getString(columnName);
            if(null != sqlTimetamp){
                return new Date(Long.valueOf(sqlTimetamp));
            }
            return null;
        }
    
        @Override
        public Date getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
            String sqlTimetamp = rs.getString(columnIndex);
            if(null != sqlTimetamp)
                return new Date(Long.valueOf(sqlTimetamp));
            return null;
        }
    
        @Override
        public Date getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
            String sqlTimetamp = cs.getString(columnIndex);
            if(null != sqlTimetamp)
                return new Date(Long.valueOf(sqlTimetamp));
            return null;
        }
    }
    
    2. 创建一个pojo类Note用来存储存入数据库的对象
    package com.mybatis.model;
    
    import java.util.Date;
    
    /**
     * Created by Alpha on 17/4/13.
     */
    public class Note {
        private int id;
        private Date date;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public Date getDate() {
            return date;
        }
    
        public void setDate(Date date) {
            this.date = date;
        }
    }
    
    3. 创建一个队Note对象进行数据库操作的xml文件NoteMappper.xml
    <?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.mybatis.inter.NoteMappper">
        <resultMap id="note-base" type="com.mybatis.model.Note">
            <result property="id" column="id"/>
            <result property="date" column="date" typeHandler="com.mybatis.util.ExampleTypeHandler"/>
        </resultMap>
        <select id="queryNote" parameterType="int" resultMap="note-base">
            select * from note where id = #{id}
        </select>
        <insert id="insertNote" parameterType="com.mybatis.model.Note">
            insert into note (id,date) values(#{id},#{date,typeHandler=com.mybatis.util.ExampleTypeHandler})
        </insert>
    </mapper>
    
    4. 创建映射接口NoteMappper
    public interface NoteMappper {
        Note queryNote(int id);
        void insertNote(Note note);
    }
    
    5. 在Configuration添加typeHandler以及映射的NoteMappper.xml文件
    <typeHandlers>
            <typeHandler handler="com.mybatis.util.ExampleTypeHandler"/>
    </typeHandlers>
    
    <mapper resource="com/mybatis/model/NoteMappper.xml"/>
    
    6. 添加测试代码
    public static void testTypeHandler(){
            SqlSession session = sqlSessionFactory.openSession();
            try {
                NoteMappper noteMappper = session.getMapper(NoteMappper.class);
                Note note = new Note();
                note.setId(1);
                note.setDate(new Date());
                noteMappper.insertNote(note);
    
                session.commit();//默认的自动提交是关闭的,因此需要在此手动提交
                note = noteMappper.queryNote(1);
                System.out.println(note.getDate());
            }finally {
                session.close();
            }
        }
    

    上述操作的的目录结构如下


    下面是运行这个程序的结果


    看一下数据库中什么情况

    所以我们就利用typeHandler实现了特殊类型的存储,当然除了重写BaseTypeHandler,mybatis3还提供了一些已经写好的typeHandler,具体的可以见官方文档

    objectFactory
    MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。 默认的对象
    工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。
                                                          --------摘自官网
    

    也就是说默认的对象工厂只会帮我们创建一个未经初始化的类实例,假如我们要对类实例进行修改,我们可以通过覆写默认的对象工厂。
    配置如下

    <objectFactory type="com.mybatis.util.ExampleObjectFactory">
        <property name="someProperty" value="10"/>
    </objectFactory>
    
    plugins

    mybatis允许你在映射语句执行过程的某一点实施拦截调用,默认情况下,mybatis允许使用插件来拦截的方法调用如下

    Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
    ParameterHandler (getParameterObject, setParameters)
    ResultSetHandler (handleResultSets, handleOutputParameters)
    StatementHandler (prepare, parameterize, batch, update, query)
    

    如何使用plugins呢,我们通过实现Interceptor接口,并指定想要拦截的方法签名即可

    environments

    mybatis可以配置成多种环境,在我们使用多个数据库时会用到这一点,但是一个SqlSessionFactory实例只能使用其中的一个环境,配置文件的形式如下

    <configuration>
    <environments default="environment1">
        <environment id="environment1">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                .
                .
            </dataSource>
        </environment>
                .
                .
        <environment id="environment3">
            <transactionManager type="MANAGED"></transactionManager>
            <dataSource type="UNPOOLED">
                .
                .
            </dataSource>
        </environment>
    </environments>
    </configuration>
    

    我们可以使用下面的方法来选择使用哪一个环境

    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment,properties);
    

    从上面的代码我们可以看到环境中包括了事务管理器和数据源

    事务管理器

    事务管理器有两种,JDBCMANAGED,说明如下

    JDBC-这个配置就是直接使用了 JDBC 的提交和回滚设置。
    MANAGED-这个配置几乎没做什么。
    
    数据源

    数据源包含3中,UNPOOLEDPOOLED以及JNDI
    UNPOOLED-这个对数据的操作是没有启用数据库连接池的,在每次使用的时候都会打开和关闭连接,由于这样的原因,因此它在使用的时候的速度会比较慢,但是占用的资源相对较少,它的配置参数有下面5个

    driver – 这是 JDBC 驱动的 Java 类的完全限定名(并不是JDBC驱动中可能包含的数据源类)。
    url – 这是数据库的 JDBC URL 地址。
    username – 登录数据库的用户名。
    password – 登录数据库的密码。
    defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
    

    POOLED-相对于UNPOOLED连接,它的做法是创建了一个包含数个数据库连接的连接池,而且连接不会在使用的时候被关闭,所以它的速度更快,性能更好,但是占用的资源也较多,它的配置属性除了上面的属性之外,还包括下面的部分

    poolMaximumActiveConnections – 在任意时间可以存在的活动(也就是正在使用)连接数量,默认值:10
    poolMaximumIdleConnections – 任意时间可能存在的空闲连接数。
    poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000 毫秒(即 20 秒)
    poolTimeToWait – 这是一个底层设置,如果获取连接花费的相当长的时间,它会给连接池打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直安静的失败),默认值:20000 毫秒(即 20 秒)。
    poolPingQuery – 发送到数据库的侦测查询,用来检验连接是否处在正常工作秩序中并准备接受请求。默认是“NO PING QUERY SET”,这会导致多数数据库驱动失败时带有一个恰当的错误消息。
    poolPingEnabled – 是否启用侦测查询。若开启,也必须使用一个可执行的 SQL 语句设置 poolPingQuery 属性(最好是一个非常快的 SQL),默认值:false。
    poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的使用频度。这可以被设置成匹配具体的数据库连接超时时间,来避免不必要的侦测,默认值:0(即所有连接每一时刻都被侦测 — 当然仅当 poolPingEnabled 为 true 时适用)。
    
    mappers

    在上面的例子中,我们创建的配置文件有Configuration.xmlUser.xml以及NoteMapper.xml,其中User.xmlNoteMapper.xml是SQL语句映射的配置文件,那么我们在初始化Configuration.xml时如何找到这两个xml文件呢,实际上是通过mappers属性做到的,如下

    <mappers>
            <mapper resource="com/mybatis/model/User.xml"/>
            <mapper resource="com/mybatis/model/NoteMappper.xml"/>
    </mappers>
    

    下面我们详细讲一讲Mapper的XML配置文件

    相关文章

      网友评论

        本文标题:读书笔记:mybatis的使用入门

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