zoukankan      html  css  js  c++  java
  • 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(); } }
  • 相关阅读:
    PHP-redis中文文档
    thinkphp5操作redis系列教程】列表类型之lRange,lGetRange
    微信小程序利用canvas生成海报分享图片
    layui 富文本 图片上传 后端PHP接口
    Redis 学习笔记(十二)Redis 复制功能详解 ----- (error) READONLY You can't write against a read only slave
    php 从2维数组组合为四维数组分析(项目中前台侧边栏导航三级分类显示)
    MySQL中的外键是什么、有什么作用
    微信小程序之自定义模态弹窗(带动画)实例
    【JZOJ4805】【NOIP2016提高A组模拟9.28】跟踪
    【JZOJ4804】【NOIP2016提高A组模拟9.28】成绩调研
  • 原文地址:https://www.cnblogs.com/liudingwei/p/12649988.html
Copyright © 2011-2022 走看看