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视频

 

posted @ 2020-05-28 17:27  守林鸟  阅读(455)  评论(0编辑  收藏  举报