1.1. 配置流程说明

--获得数据库连接

第一步:导入包(任何框架需要的事情)

第二步:创建总配置文件,文件名随便写

第三步:创建一个MybatisUtils工具类,(获得操作对象)

--需求:插入数据到数据库

第四步:创建一个映射接口

第五步:创建一个映射文件

第六步:在总配置文件加载映射文件。

第七步:编写测试插入数据代码

 

1.2. 配置步骤

1.2.1. 第一步:导入包

 

 

1.2.2. 第二步:创建一个Mybatis的总配置文件

--提示:配置文件对参数理解要够深,必须先在代码里面找到对应的代码,在看文档--

--任何框架,只有有XML的,它必定会提供规则文件(DTD and schema)!!!

 

-注意:MybatisDTDPublic ID没有写在DTD文件里面,可以在官方文档里面找到

--以后,任何框架如果没有在DTD文件提供Public Id 的都去找官方文档。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" >
<configuration>
    <!--environments标签用于配置数据库连接信息,可以配置多个数据库的连接信息  
    default属性:环境集里面可以配置多个数据库连接环境,但是必须要指定默认的环境,指定的是环境environment标签的ID
    -->
    <environments default="sms">
        <!-- environment环境标签 ,用于配置一个数据库连接的信息-->
        <environment id="sms">
            <!-- 指定使用的事务类型 -->
            <!-- 观点:任何框架的内置属性都可以在代码里面找到 -->
            <!-- 大部分配置文件的解释类都是在configuration、builder这个两个单词或者单词的缩写的包里面
                  在org.apache.ibatis.session.Configuration配置类里面找到对应的代码查看
                  JDBC : 使用JDBC的事务处理
                  MANAGER: 不需要事务处理
            -->
            <transactionManager type="JDBC"></transactionManager>
            <!--
                dataSource标签:作用,配置数据库连续信息
                type:配置数据源的类型
                 JNDI :使用JNDI数据源,就是在web服务器配置数据源,让程序调用
                 POOLED : 使用默认内置的连接池
                 UNPOOLED:使用直连数据库,不需要连接池
             -->
            <dataSource type="POOLED">
                <!-- 配置四要素 -->
                <property name="driver" value="org.gjt.mm.mysql.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/sms" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    
    <!-- 配置指定加载的映射文件 -->
    <mappers>
       <mapper resource="cn/gzsxt/mapper/xml/StudentMapper.xml"/>
       
    </mappers>

</configuration>


 

 

1.2.3. 第三步:创建一个MybatisUtils 获得Session

package cn.lxm.utils;

 

import java.io.IOException;

import java.io.Reader;

 

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

 

public class MybatisUtils {

 

// 注意:基于如果出现多个会话工厂,可能导致事务不同步的问题,所以我们一个项目只使用一个会话工厂

public static final SqlSessionFactory SSF = createSqlSessionFactory();

// 需求:实现同一条线程,使用的session是相同的。线程绑定,

// 创建一个线程绑定变量,将变量放在该对象里面,表示对象同一条线程共享

private static final ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();

 

// 1.获得会话工厂

private static SqlSessionFactory createSqlSessionFactory() {

try {

// 1.返回一个Reader对象

Reader reader = Resources.getResourceAsReader("mybatis-config.xml");

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

SqlSessionFactory sessionFactory = builder.build(reader);

return sessionFactory;

 

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

 

// 2.获得操作对象,SqlSession对象

 

public static SqlSession getSqlSession() {

//1.判断线程变量里面是否已经有值

if (threadLocal.get() == null) {

//2.如果没有值,那么创建一个session对象设置在线程变量里面

SqlSession session = SSF.openSession();

threadLocal.set(session);

}

//3.返回线程变量里面的session对象

return threadLocal.get();

}

 

public static void main(String[] args) {

//同一条线程。对象一样

//注意事项:如果对象是一个静态的属性的碎屑,意味着,整个系统共用一个对象

//如果放在ThreadLocal对象里面,仅仅是当前线程共用该对象

System.out.println(MybatisUtils.getSqlSession());

System.out.println(MybatisUtils.getSqlSession());

}

 

}

 

 

--创建SqlSession的对象是否成功

public static void main(String[] args) {

System.out.println(DbUtils.getSession());

}

 

5.结果

 

1.2.4. 第四步:创建实体类

package cn.lxm.pojo;

 

public class Student {

 

private String stuId;//BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '学生编号',

private String stuName;//VARCHAR(50) NULL DEFAULT NULL COMMENT '学生名字',

private String stuAge;//INT(11) NULL DEFAULT NULL COMMENT '学生年龄',

private String stuPassword;//VARCHAR(50) NULL DEFAULT NULL COMMENT '密码',

public String getStuId() {

return stuId;

}

public void setStuId(String stuId) {

this.stuId = stuId;

}

public String getStuName() {

return stuName;

}

public void setStuName(String stuName) {

this.stuName = stuName;

}

public String getStuAge() {

return stuAge;

}

public void setStuAge(String stuAge) {

this.stuAge = stuAge;

}

public String getStuPassword() {

return stuPassword;

}

public void setStuPassword(String stuPassword) {

this.stuPassword = stuPassword;

}

 

 

}

 

 

1.2.5. 第五步:创建一个操作接口

package cn.lxm.mapper;

 

import cn.lxm.pojo.Student;

 

public interface StudentMapper {

 

//需求:实现插入数据到student

//注意:如果是增删改操作,返回的类型必须是int类型

//返回的是操作影响的行数。

int insert(Student student);

 

}

1.2.6. 第六步:创建映射文件,StudentMapper.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >

<!-- 注意事项:使用映射接口的配置方式,namespace必须指向接口的类全名 -->

<mapper namespace="cn.lxm.mapper.StudentMapper">

 

    <!--

    useGeneratedKeys:作用打开支持ID回填,设置为true

    keyColumn:设置ID回填,ID对象数据库的字段名

    keyProperty:设置ID回填到JavaBean对应的属性名

    

     -->

    <insert id="insert" useGeneratedKeys="true" keyColumn="stu_id" keyProperty="stuId" >

       <!-- 注意:如果传递过来的屙屎一个JavaBean对象,那么设置的属性名为,set方法对应的属性名。如:setStuName 对应的是 stuName

        

        -->

       INSERT INTO tb_student (stu_name, stu_age, stu_password) VALUES (#{stuName}, #{stuAge}, #{stuPassword})

    </insert>

 

</mapper>

 

 

1.2.7. 第七步:总配置文件设置加载映射文件

  <!-- 加载映射文件 -->

  <mappers>

    <mapper resource="cn/lxm/mapper/xml/StudentMapper.xml"/>

  </mappers>

 

1.2.8. 第八步:测试代码

package cn.lxm.test;

 

import org.apache.ibatis.session.SqlSession;

import org.junit.Test;

 

import cn.lxm.mapper.StudentMapper;

import cn.lxm.pojo.Student;

import cn.lxm.utils.MybatisUtils;

 

public class StudentMapperTest {

 

@Test

public void insert(){

//1.获得操作对象,session

SqlSession session = MybatisUtils.getSqlSession();

//2.获得操作接口的动态对象

StudentMapper studentMapper = session.getMapper(StudentMapper.class);

Student student=new Student();

student.setStuName("陈七");

    //3.插入对象

int count = studentMapper.insert(student);

//4.提交事务

session.commit();

//5.关闭

session.close();

System.out.println("返回值:"+count);

//需求:实现ID回填,就是插入数据后要将数据库的ID设置在实体类对象里面

System.out.println("ID"+student.getStuId());

}

 

}