mybatis学习笔记一--------入门案例

第一步:

  导入依赖

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.4</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.30</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>compile</scope>
    </dependency>

第二步:配置核心文件--SqlMapConfig.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">


<!-- mybatis的基本配置文件:主要配置基本的上下文参数和运行环境 -->
<configuration>

    <!--配置-->
    <properties resource="dbconfig.properties"></properties>
    <!--设置 -->
    <settings>
        <!--缓存配置的全局开关:如果这里设置成false,那么即便在映射器中配置开启也无济于事 -->
        <setting name="cacheEnabled" value="true" />
        <!--延时加载的全局开关 -->
        <setting name="lazyLoadingEnabled" value="false" />
        <!-- 是否允许单一语句返回多结果集 -->
        <setting name="multipleResultSetsEnabled" value="true" />
        <!-- 使用列标签代替列名,需要兼容驱动 -->
        <setting name="useColumnLabel" value="true" />
        <!-- 允许JDBC自动生成主键,需要驱动兼容。如果设置为true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍能正常工作 -->
        <setting name="useGeneratedKeys" value="false" />
        <!-- 指定MyBatis该如何自动映射列到字段或属性:NONE表示取消自动映射;PARTIAL表示只会自动映射,没有定义嵌套结果集和映射结果集;FULL会自动映射任意复杂的结果集,无论是否嵌套 -->
        <setting name="autoMappingBehavior" value="PARTIAL" />
        <!-- 配置默认的执行器:SIMPLE是普通的执行器;REUSE会重用预处理语句;BATCH会重用语句并执行批量更新 -->
        <setting name="defaultExecutorType" value="SIMPLE" />
        <!--设置超时时间:它决定驱动等待数据库响应的秒数,任何正整数-->
        <setting name="defaultStatementTimeout" value="25"/>
        <!--设置数据库驱动程序默认返回的条数限制,此参数可以重新设置,任何正整数 -->
        <setting name="defaultFetchSize" value="100" />
        <!-- 允许在嵌套语句中使用分页(RowBounds) -->
        <setting name="safeRowBoundsEnabled" value="false" />
        <!-- 是否开启自动驼峰命名规则,即从a_example到aExample的映射 -->
        <setting name="mapUnderscoreToCamelCase" value="true" />
        <!-- 本地缓存机制,防止循环引用和加速重复嵌套循环 -->
        <setting name="localCacheScope" value="SESSION" />
        <!-- 当没有为参数提供特定JDBC类型时,为空值指定JDBC类型。某些驱动需要指定列的JDBC类型,多数情况直接用一般类型即可,如NULL/VARCHAR/OTHER -->
        <setting name="jdbcTypeForNull" value="OTHER" />
        <!-- 指定触发延迟加载的方法,如equals/clone/hashCode/toString -->
        <setting name="lazyLoadTriggerMethods" value="equals" />
    </settings>


    <!--别名:pojo对象的别名 -->
    <typeAliases>
        <!--对类单独进行别名设置  -->
        <typeAlias alias="user" type="com.itheima.domain.User"></typeAlias>
        <!-- 对包进行扫描,可以批量进行别名设置,设置规则是:获取类名称,将其第一个字母变为小写 -->
    <!--        <package name="com.itheima.domain"/>-->
    </typeAliases>


    <!--   配置环境-->
    <environments default="mysql">

        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置连接池-->
            <dataSource type="POOLED">
                <!--配置连接数据库的4个基本信息-->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
    <mappers>
      <!--<mapper resource="com/itheima/mapper/IUserMapper.xml"/>-->  
        <package name="com.itheima.mapper"/>
    <!--此处是接口绑定的形式,使用包路径映射的话,需要注意的是该映射文件与接口属于同一路径下-->
</mappers> </configuration>

第三步:配置映射文件

  

<?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">

<!--
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
 -->
<mapper namespace="com.itheima.mapper.IUserMapper">
    <select id="findAll" resultType="user">
       select * from user;
    </select>

    <insert id="add" parameterType="com.itheima.domain.User">
        insert into user (id,username) values (#{id},#{username});
    </insert>

    <update id="update" parameterType="com.itheima.domain.User">
        update user set username=#{username} where id=#{id}
    </update>


    <delete id="del" parameterType="int">
        delete from user where id=#{id}
    </delete>
</mapper>

第四步:测试

  

package com.itheima.test;

import com.itheima.domain.User;
import com.itheima.mapper.IUserMapper;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MybatisTest {

@Test
    public void test() throws IOException {
        //读取核心配置文件产生流对象
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        //构建者模式
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //创建SqlSession工厂
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        IUserMapper userMapper = sqlSession.getMapper(IUserMapper.class);

  //查询所有
       List<User> users = userMapper.findAll();
        for (User user:users) {
            System.out.println(user);
        }

  /*     //添加
    User user = new User();
    user.setId(2);
    user.setUsername("zhangsan");

  userMapper.add(user);

*/
 /* User user=new User(); user.setId(2); 
user.setUsername("wangwu");
userMapper.update(user);
*/

/*userMapper.del(2);*/
sqlSession.commit(); sqlSession.close(); } }

猜你喜欢

转载自www.cnblogs.com/liudingwei/p/12649988.html