MyBatis二:搭建MaBatis

搭建MaBatis

一、下载及创建maven工程
  1. 环境搭建详见maven笔记
  2. 下载MyBatis

    MyBatis官网

  3. 引入的依赖
    <!-- 设置打包方式 -->
    <packaging>jar</packaging>
    
    <!-- 配置依赖 -->
    <dependencies>
        <!-- 1.junit测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    	<!-- 2.mysql驱动(数据库连接) -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>
    	<!-- 3.mybatis核心 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        
        <!-- 4.日志 -->
        <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
        
    </dependencies>
    
二、创建MaBatis的核心配置文件
  1. MyBatis核心配置文件中,标签的顺序:

    properties?,settings?,typeAliases?,typeHandlers?,
    objectFactory?,objectWrapperFactory?,reflectorFactory?,
    plugins?,environments?,databaseIdProvider?,mappers?

  2. properties

    用于引入properties文件

  3. typeAlias:设置某个类型的别名

    因为查询功能中,需要返回结果集,故要设置resultType=实体类的全类名,而一个工程中会有大量的查询,所以用全类名设置所有的resultType会很麻烦,所以可以通过typeAlias标签设置实体类全类名的别名

    type:设置需要设置别名的类型
    alias:设置某个类型的别名,若不设置该属性,则该类型拥有默认的别名(即类名),且不区分大小写

    方式一:对指定实体类设置别名
    <typeAlias type="com.atguigu.mybatis.pojo.User"></typeAlias>
    
    方式二:以包为单位,将包下所有的类型设置默认的类型别名,即类名且不区分大小写
    <package name="com.atguigu.mybatis.pojo"/>
    
  4. environments:配置多个连接数据库的环境

    属性:default,设置默认使用的环境的id,因为一个工程只是用一个数据库连接

  5. 子标签:environment
  6. 子标签:transactionManager:设置事务管理方式

    type=“JDBC|MANAGED”
    JDBC:表示当前环境中,执行SQL时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动处理
    MANAGED:被管理,例如Spring

  7. 子标签:dataSource:配置数据源

    type:设置数据源的类型,type=“POOLED|UNPOOLED|JNDI”
    POOLED:表示使用数据库连接池缓存数据库连接
    UNPOOLED:表示不使用数据库连接池
    JNDI:表示使用上下文中的数据源

  8. 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>
    
        <!--引入properties文件-->
        <properties resource="jdbc.properties" />
    
        <!--设置类型别名-->
        <typeAliases>
            <package name="com.atguigu.mybatis.pojo"/>
        </typeAliases>
    
        <!--
            environments:配置多个连接数据库的环境,属性default用于设置默认使用的环境的id
        -->
        <environments default="development">
            <!--
                environment:配置某个具体的环境。属性id表示连接数据库的环境的唯一标识,不能重复
            -->
            <environment id="development">
                <!-- transactionManager:设置事务管理方式-->
                <transactionManager type="JDBC"/>
                <!-- dataSource:配置数据源 -->
                <dataSource type="POOLED">
                    <!--设置连接数据库的驱动-->
                    <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>
    
            <environment id="test">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:13306/mybatis"/>
                    <property name="username" value="root"/>
                    <property name="password" value="7989775nx"/>
                </dataSource>
            </environment>
        </environments>
        
        <!--引入映射文件-->
        <mappers>
            <package name="com.atguigu.mybatis.mapper"/>
        </mappers>
    </configuration>
    
  9. 引入映射文件

    是指映射文件resources文件下的路径

    <mappers>
        <!-- 第二种写法 <mapper resource="com.atguigu.mybatis.mapper/UserMapper.xml"/> -->
        <!--
             以包为单位引入映射文件
                要求:
                1、mapper接口所在的包要和映射文件所在的包要完全一致
                2、mapper接口要和映射文件的名字一致(即UserMapper.java 对应 UserMapper.xml)
        -->
        <package name="com.atguigu.mybatis.mapper"/>
    </mappers>
    
  10. 配置properties

    因为一个工程中可能会有多个properties文件,故需要再每个键前加上一个标识,如:jdbc.driver

    jdbc.properties
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:13306/mybatis
    jdbc.username=root
    jdbc.password=123456
    
三、创建Mapper接口
  1. 作用

    相当于JavaWeb工程中的dao,但不需要实现类,接口会对应映射文件进行实现

  2. UserMapper.java
    public interface UserMapper {    
        // 表 -- 实体类 -- mapper接口 -- 映射文件   
    
        // 添加用户信息
        int insertUser();
    
        // 修改用户信息
        void updateUser();
    
        // 删除用户信息
        void deleteUser();
    
        // 查询用户信息
        User retrieveTest();
    
        List<User> retrieveAllTest();
    }
    
四、创建MaBatis映射文件
  1. ORM:Object Relationship Mapping , 对象映射关系

    Object:java实体类对象

    Relationship:关系型数据库

    Mapping:二者之间的对应关系

    Java概念数据库概念
    属性字段/列
    对象记录/行
  2. 映射文件的命名规则

    表所对应 的实体类的类名 加上 Mapper.xml后缀:类如UserMapper.xml

  3. 创建的位置

    src/main/resources/mappers目录下

  4. 作用

    用于编写SQL语句,故Mapper接口不需要写实现类

  5. 保证两个一致,以实现面向接口操作数据

    mapper接口的全类名和映射文件的mapper标签的命名空间namespace保持一致

    mapper接口中的方法名与映射文件中SQL标签的id保持一致

  6. UserMapper.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.atguigu.mybatis.mapper.UserMapper">
    
        <insert id="insertUser">
            insert into t_user values(null,'张三','123',23,'女',"zhangsan@qq.com")
        </insert>
    
        <update id="updateUser">
            update t_user set username = "李四" where id = 4
        </update>
    
        <delete id="deleteUser">
            delete from t_user where id >4
        </delete>
    
        <!-- 查询功能的标签必须设置resultType或resultMap
             因为MyBatis执行完查询sql语句后,并不知道要将它转换为一个什么样的实体类对象,故设置了
     		 resultType或resultMap,查询sql语句后的结果就可以转换为设置的resultType,最后再将
    		 转换后的结果作为返回值返回给当前的方法。
             resultType:结果类型,设置默认的映射关系,即属性名和字段名一一对应
             resultMap:结果映射,设置自定义的映射关系,如果属性名和字段名不一致,或出现一对多/多对一的
                        情况
         -->
        <select id="retrieveTest" resultType="com.atguigu.mybatis.pojo.User">
            select * from t_user where id = 4
        </select>
    
        <select id="retrieveAllTest" resultType="com.atguigu.mybatis.pojo.User">
            select * from t_user
        </select>
    </mapper>
    
五、通过Junit测试
  1. 测试程序
    public class UserTest {
        @Test
        public void userTest() throws IOException {
            /*  读取MaBatis核心配置文件
                使用org.apache.ibatis.io.Resources的静态方法getResourceAsStream,
                获取在resources目录下的指定配置文件的字节输入输入流
            */
            InputStream mybatisConfigStream = Resources.getResourceAsStream("mybatis-config.xml");
            // 创建SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            // 创建基于核心配置文件(mybatis-config.xml)的SqlSession工厂类
            SqlSessionFactory build = sqlSessionFactoryBuilder.build(mybatisConfigStream);
            // 创建SqlSession对象,且设置事务提交方式为自动提交
            SqlSession sqlSession = build.openSession(true);
            // 通过代理模式创建指定mapper接口的代理实现类对象
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            // 代理实现类对象在调用接口中的方法时,会通过映射文件自动匹配到对应的SQL标签内的SQL语句
            int result = mapper.insertUser();
            mapper.updateUser();
            mapper.deleteUser();
            User user = mapper.retrieveTest();
            System.out.println("user = " + user);
            List<User> userList = mapper.retrieveAllTest();
            userList.forEach(user -> System.out.println(user));
        }
    }
    
六、加入log4j日志功能
  1. 创建log4j.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
        <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
            <param name="Encoding" value="UTF-8" />
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
    %m (%F:%L) \n" />
            </layout>
        </appender>
        <!-- 设置日志的级别
             fatal(致命) > error(错误) > warn(警告) > info(信息) > debug(调试)
             从左到右的内容越来越详细
         -->
        <logger name="java.sql">
            <level value="debug" />
        </logger>
        <logger name="org.apache.ibatis">
            <level value="info" />
        </logger>
        <root>
            <level value="debug" />
            <appender-ref ref="STDOUT" />
        </root>
    </log4j:configuration>
    
  2. 日志的级别

    FATAL(致命) > ERROR(错误) > WARN (警告) > INFO(信息) > DEBUG(调试)
    ​ 从左到右的内容越来越详细

七、设置模板
  1. 设置mybatis-config.xml模板

    在这里插入图片描述

错误总结
  1. java文件所在的文件夹目录写错,和映射所对应的文件路径对不上

    atguigu写成了arguigu

  2. 电脑装了两个版本的MySQL

    MySQL5.7 的端口号是:13306

    MySQL8.0 的端口号是:3306

  3. 空格

    mapper标签中的namespace的值后面,不能有任何空格,否则就会报错

    // 错误示例
    <mapper namespace="com.atguigu.mybatis.mapper.ParamMapper ">
    // 正确示例
    <mapper namespace="com.atguigu.mybatis.mapper.ParamMapper">    
    

    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

e_nanxu

感恩每一份鼓励-相逢何必曾相识

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值