MyBatis入门一

一.MyBatis

MyBatis是一个开源的数据持久层框架,其主要思想是将程序中的大量sql语句剥离出来,配置在配置文件中,实现SQL的灵活配置。并且可以在不修改程序代码的情况下

,直接在配置文件中修改SQL。

二.什么事ORM?

 orm(object/Relation Mapping)对象/关系映射。是一种数据持久化技术,在对象模型和关系型数据库之间建立对应关系,通过javaBean对象去操作数据库表中的数据。

三.创建MyBatis核心配置文件configureation.xml

    

----案例配置

     xml节点作用:https://www.geeksss.com/article-298-1.html

完整的configure配置

<?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>

    <!--  设置mtbatis的一些运行参数:日志,是直接输出到控制台上还是输出到log4j文件中 -->
    <settings>
        <!-- name不可以随便写,只能叫这个名字;value有好几个选项这里选择向控制台输出 -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
     
    <!--设置类型别名:在执行sql语句的时候,如果不设置别名。每次在指定的时候都需要包名+类名,写的长 -->
    <typeAliases>
        <!-- type就是完整实体类名, -->
        <tapeAlias type="entity.student" alias="User"/>
    </typeAliases>
     
    <!--数据库连接的属性,不同的开发阶段连接不同的数据库
     
    开发阶段——开发环境:连接程序员自己的数据库
    测试阶段——测试环境:连接测试数据库
    上线运行——生产环境:连接正式数据库
     
    里边可以写多个environment
    -->
    <environments default="dev">
        <!-- 开发环境 -->
        <environment id="dev">
        <!-- 通过JDBC管理事务 -->
        <transactionManager type="JDBC"/>
        <!--不使用连接池  -->
        <dataSource type="UNPOOLED">             
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306:myschool"/>
            <property name="username" value="root"/>
            <property name="password" value="0217"/>
        </dataSource>
        </environment>
    </environments>
     
    <!--sql映射文件的路径-->
    <mappers>
        <!-- 引入要加载的sql文件 -->
        <mapper resource="studentDao.xml"/>
    </mappers>
 
</configuration>

mapper映射配置

<?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="dao.studentDao">
    <!--resultMap-->    
    <resultMap id="studentMap" type="entity.student">
        <id property="stuId" column="stuId"></id>
        <result property="stuName" column="stuName"></result>
    </resultMap>




    <!--查询所有-->
    <select id="getAllStudent" resultMap="studentMap">    <!--resultMap对应 resultMap下的id值-->
        select * from student
    </select>



    <!--根据id值查询-->
    <select id="getStudentById" parameterType="int" resultType="stu">
        select * from student where stuId = #{stuId}
    </select>

</mapper>

四:编写工具类

public class MyBatis {

    private static final String RESOURCE = "mybatis-config.xml";
    private static SqlSessionFactory sqlSessionFactory = null;
    private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();


    //关闭sqlsession
    public static void closeSession(){
        SqlSession session = (SqlSession) threadLocal.get(); // 2
        threadLocal.set(null);
        if (session !=null){
            session.close();
        }
    }
    public  static SqlSession getSessionTwo(){
        //读取配置文件
        try {
            InputStream stream = Resources.getResourceAsStream(RESOURCE);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
            return sqlSessionFactory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  null;
    }
}

 五:接口层

public interface studentDao {

    /**
     * 查询所有学生
     * @return
     */
    public List<student> getAllStudent();

    /**
     * 根据id查学生
     * @param
     * @return
     */
    public  student getStudentById(int id);

    /**
     * 添加学生
     * @return
     */
    public int addStudent(student  stu);

    /**
     * 删除 学生根据id
     * @param id
     * @return
     */
    public int deleStudent(int id);

}

   六:                 测试类

 @Test
    public  void TestDele() throws IOException {

        //找到大配置
        // String path = "mybatis-config.xml";
        //读取配置文件
        //InputStream is = Resources.getResourceAsStream(path);
        //拿到sqlsession工厂
        //SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        //SqlSession session = sqlSessionFactory.openSession();
        studentDao dao = MyBatis.getSessionTwo().getMapper(studentDao.class);
        int value = dao.deleStudent(1);      ------修改  ???  下面
        System.out.print(value);
    }

 另外  在删除和添加 的时候,如果 不进行sqlSession提交,所执行的结果是不会影响到数据库的,而且牵扯到Sqlsession的线程问题,

执行方法的sqlsession和执行提交的sqlsession必须一致

        SqlSession sessionTwo = MyBatis.getSessionTwo();
        studentDao dao =sessionTwo.getMapper(studentDao.class);
        int  id = dao.deleStudent(1);
        System.out.print(id);
        sessionTwo.commit();

原文地址:https://www.cnblogs.com/zhangyu0217----/p/7098479.html