zoukankan      html  css  js  c++  java
  • MyBatis(一)——搭建MyBatis框架

    1.概念

    JDBC中,SQL夹在Java代码里,耦合度高;维护不易,如果sql有变化,需要频繁修改。

    MyBatis中,sql和Java编码分开,功能边界清晰,一个专注于业务,一个专注于数据

    2.创建项目并导包

    • MyBatis-3.4.2.jar(核心包,看名字就知道)
    • log4j-1.2.17.jar(需要连同log4j.xml或者log4j.properties一起复制进项目,文件名不能改为别的,固定式log4j,内容不用管)
    • mysql-connector-java.5.1.8.jar(连接数据库)

    3.创建MyBatis的核心(全局)配置文件mybatis-config.xml

    一般命名为mybatis-config.xml,配置,这个文件的作用是定义如何连接数据库。注意第2行是configuration,映射文件是mapper

    <?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>
        <!--1.配置环境 ,默认的环境id为mysql -->
        <environments default="mysql">
            <!--1.2.配置id为mysql的数据库环境 -->
            <environment id="mysql">
                <!-- 使用JDBC的事务管理 -->
                <transactionManager type="JDBC" />
                <!--数据库连接池 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                    <property name="username" value="root" />
                    <property name="password" value="shoulinniao" />
                </dataSource>
            </environment>
        </environments>
        <!--2.配置Mapper的位置 -->
        <mappers>
            <mapper resource="CustomerMapper.xml"/>
        </mappers>
    </configuration>

    配置Mapper的位置也有其他写法,这里的CustomerMapper.xml和mybatis-config.xml在同一个文件夹下。CustomerMapper.xml也常和CustomerMapper.java放在同一个包下,如果此时还用resource标识,用[/]隔开,例如<mapper resource="com/atguigu/mybatis/mapper/CustomerMapper.xml" />;用class标识则用[.]隔开,根据指定Mapper接口注册,例如<mapper class="com.atguigu.mybatis.mapper.CustomerMapper"/>;用name标识可以一次配置多个在同一包下的mapper文件,例如<mapper name="com.atguigu.mybatis.mapper"/>

    4.创建实体类Xxx.java

    package com.atguigu.mybatis.bean;
    
    public class Customer {
    
        private Integer id;
        private String username;
        private String jobs;
        private String phone;
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getJobs() {
            return jobs;
        }
        public void setJobs(String jobs) {
            this.jobs = jobs;
        }
        public String getPhone() {
            return phone;
        }
        public void setPhone(String phone) {
            this.phone = phone;
        }
        @Override
        public String toString() {
            return "Customer [id=" + id + ", username=" + username + ", jobs=" + jobs + ", phone=" + phone + "]";
        }
    }
    
    
    /*
    create table customer(
    id int primary key auto_increment,
    username varchar(50),
    jobs varchar(50),
    phone varchar(16)
    );
    
    */
    Customer.java

    5.创建映射文件

    一般命名为XxxMapper.xml,配置,Xxx是实体类的名字,这个文件的作用是定义如何操作数据库。

    例如CustomerMapper.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.CustomerMapper">
        <select id="selectById" resultType="com.atguigu.mybatis.bean.Customer">
            select * from customer where id = #{id}
        </select>
    </mapper>

    注意第2行是mapper,配置文件的是configuration;返回结果resultType最好加上包名

    6.创建mapper接口,实现两个绑定

    (1)接口名一般命名为XxxMapper.java,要和映射文件的namespace保持一致

    (2)接口中的方法名要和SQL的id保持一致

    package com.atguigu.mybatis.mapper;
    
    import com.atguigu.mybatis.bean.Customer;
    
    public interface CustomerMapper {
        
        Customer selectById(Integer id);
    }

    7.获取MyBatis操作数据库的会话对象SqlSession

    • 读取核心配置文件
    • 创建SqlSessionFactory工厂对象
    • 创建SqlSession对象
    • 创建实体类的接口 的代理实现类
    • 创建实体类对象存储查询结果
    • 输出测试
    package com.atguigu.mybatis.mapper;
    
    import static org.junit.Assert.*;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.Configuration;
    import org.apache.ibatis.session.ExecutorType;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.apache.ibatis.session.TransactionIsolationLevel;
    import org.junit.Test;
    
    import com.atguigu.mybatis.bean.Customer;
    
    public class MyBatisTest {
    
        @Test
        public void test() throws Exception {
            InputStream is=Resources.getResourceAsStream("mybatis-config.xml");//读取配置文件
            SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(is);//构建工厂
            SqlSession sqlSession=sessionFactory.openSession();//创建sqlSession
            CustomerMapper mapper=sqlSession.getMapper(CustomerMapper.class);//创建接口对象
            Customer customer=mapper.selectById(1);//获取查询结果
            System.out.println(mapper);//可以调用证明创建了实体类,这里用的是动态代理
            System.out.println(customer);//输出查询结果
            sqlSession.close();//关闭
        }
    }
    /*输出
    org.apache.ibatis.binding.MapperProxy@7d70d1b1
    Customer [id=1, username=守林鸟, jobs=学生, phone=10086]
    */

     

    8.目录结构

    我就纳闷了,黑马教程给导入的包怎么就那么多?对于初学者能不能不要这么残忍。


     参考&引用

    学习资料:B站尚硅谷MyBatis视频

  • 相关阅读:
    给python脚本传递命令行参数
    python.exe和pythonw.exe的区别(区分.py、.pyw、.pyc文件)
    python包管理器pip
    python从新手到安装指南
    python基础知识
    使用Lua做为MMOARPG游戏逻辑开发脚本的一点体会
    游戏中各音效的音量默认值
    Unity Editor自定义菜单排序(MenuItem Order)
    没有安装vs通过Rider编译Dll
    MyBatis-Plus 代码生成器
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/12953814.html
Copyright © 2011-2022 走看看