zoukankan      html  css  js  c++  java
  • 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();

  • 相关阅读:
    枚举类
    泛型数组列表
    方法参数
    给一个数字和列表,判断列表中是否存在两个元素之和等于这个数字,并好之两个数的坐标
    selenium.common.exceptions.ElementNotVisibleException: Message: element not interactable报错
    python-selenium提供的execute_script调用js操作
    xlrd读取excel数据封装
    0531-练习题 os.system
    0528 文件操作习题
    05/17
  • 原文地址:https://www.cnblogs.com/zhangyu0217----/p/7098479.html
Copyright © 2011-2022 走看看