zoukankan      html  css  js  c++  java
  • MyBatis

    一.MyBatis简介

    MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层(Dao层)框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    二.MyBatis入门配门

        入门的几个基本注意点:

          1.因为映射资源文件中可能会出现多个数据库的操作,所以可以定义访问资源文件的父路径,<mapper namespace="定义父路径的名称">

            2.在测试类中,访问此映射资源文件,需要父路径.操作文件的id名

      因为项目在maven中完成,此处添加几点maven的配置详解

        

        1.将本地的Maven配置到myEclipse中-->window-->prefenerces-->MyEclipse-->Maven4MyEclipse-->Maven-->Installations-->选择本  地Maven路径下的路径

        2.配置成功

      1.创建web Project

      2.配置maven项目下的pom.xml(配置自动联网下载jar包)

        注(因为是连接数据库的操作,所以要导入连接数据的jar包)

        下载网址:maven.aliyun.com

    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

      3.在src(可自定义包)下创建注mybatis.xml文件

      参考网址:http://mybatis.github.io/mybatis-3/zh/getting-started.html

    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- 说明mybatis的根节点 -->
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <!--mybatis的根标签configuration -->
    <configuration>
        <!-- 资源文件的路径配置  注:cn前面不能用/否则会抛出异常-->
        <properties resource="cn/et/mybatis/lesson01/jdbc.properties">
        </properties>
        <!-- 配置连接数据库的环境,(开发环境) -->
      <environments default="development">
        <environment id="development">
        <!-- 事务交给jdbc管理,Conection(事务) commit(提交) rollback(回滚)  -->
          <transactionManager type="JDBC"/>
          <!-- 数据源 用来连接数据库(包含四要素,driver,url,username,password) -->
          <dataSource type="POOLED">
            <property name="driver" value="${driverClass}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${userAccount}"/>
            <property name="password" value="${password}"/>
          </dataSource>
        </environment>
      </environments>
      <!-- 包含隐射文件主要用于编写sql语句 -->
      <mappers>
          <!-- 隐射的资源文件  隐射文件主要编写sql语句 -->
        <mapper resource="cn/et/mybatis/lesson01/emp_mapper.xml"/>
        <!-- 此映射文件直接映射一个接口隐射下的资源文件 -->
        <mapper resource="cn/et/mybatis/lesson01/inter/dept_mapper.xml"/>
        <!-- 此映射文件直接映射一个接口,接口直接定义注解,无需定义资源映射文件 -->
        <mapper class="cn.et.mybatis.lesson01.inter.MassMapper"/>
      </mappers>
    </configuration>

      4.在src(可定义包)创建测试文件

    package cn.et.mybatis.lesson01;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    public class TestMybatis {
        public static void main(String[] args) throws IOException {
            //此处表示可从src下查找
            //String resource = "org/mybatis/example/mybatis-config.xml";
            SqlSession session = getSession();
            List<Map> list = session.selectList("helloworld.select");
            System.out.println(list.size());
        }
        //此处单独定义一个方法,因为所有的增删改查都会用到该方法,所以直接调用
        private static SqlSession getSession() {
            String resource="mybatis.xml";
            //InputStream inputStream = Resources.getResourceAsStream(resource);
            //我们可以通过反射来加载配置文件
            InputStream inputStream = TestMybatis.class.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //打开一个新的session对象,操作数据库的类就是SqlSession。
            SqlSession session = sqlSessionFactory.openSession();
            return session;
        }
    //    @Test
        //修改的方法
        public void update(){
            //事物管理
            SqlSession session=getSession();
            //调用修改的方法
            session.update("updateEmp");
            //事物的提交
            session.commit();
        }
    //    @Test
      //定义删除的方法
    public void delete(){ SqlSession session = getSession(); session.delete("deleteEmp"); session.commit(); } @Test
      //定义插入的方法
    public void insert(){ SqlSession session =getSession(); session.insert("insertEmp"); session.commit(); } }

      5.在src下(可自定义包)下创建映射资源文件

      

    <?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">
      <!-- 此文件主要用于编写sql语句
          namespace是为了解决相同名字的sql操作问题
       -->
    <mapper namespace="helloworld">
        <!-- id是唯一表示符,用来表示唯一的一条sql语句 
        resultType用于表示单行数据的数据类型,如数据库单行记录为map类型,所有类型可以指定map 也可是map的全路径名
        -->
      <select id="select" resultType="map">
          <!-- select为数据库的查询标签,注意查询语句结束后不能用分号结尾 -->
               select * from emp
      </select>
      <update id="updateEmp">
          update emp set sal=sal+1000 where ename=''
      </update>
      <delete id="deleteEmp">
          delete from emp where ename=''
      </delete>
      <insert id="insertEmp">
          insert into emp(ename,empno,sal)values('',(select max(empno)from emp)+1,1234)
      </insert>
    </mapper>

      6.定义数据库连接的资源文件jdbd.properties(连接四要素)

    url=jdbc:oracle:thin:@localhost:1521:orcl
    driverClass=oracle.jdbc.OracleDriver
    userAccount=scott
    password=tiger

    以上为MyBatis连接数据库操作的简单入门练习

      三.通过接口直接映射Sql

      接口映射的几个注意点:

        1.定义的接口名必须和映射文件的<mapper namespace="cn.et.mybatis.lesson01.inter.DeptMapper">namepace的文件名一致(namespace名为接口的全路径名)

            注意:数据库的返回值类型,resultType的返回值类型(可以是直接返回值得类型,也可以是返回值类型的全路径名)

        2. 接口内定义的方法名,必须和映射资源文件中的操作数据库标签的的id名一致,主要有一下几个标签(select<查询标签>,insert<插入标签>,delete<删除标签>,update<修改标签>)

        3.  在主xml文件中的mappers<标签中必须引入接口的全路径,(因为用到了接口映射,所以不需要再隐射资源文件的全路径)>

        4.在映射文件中的传参问题,可以在查询语句中通过#{0,1}的方式进行传参,若要自定义名称,则需要在接口的方法中定义注解@Param("自定义名"),那么在映射文件中则获取参数要使用自定的名字

    1.创建测试类文件

      

    package cn.et.mybatis.lesson01.inter;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    public class TestMybatis {
        //此处单独定义一个方法,因为所有的增删改查都会用到该方法,所以直接调用
        private static SqlSession getSession() {
            String resource="mybatis.xml";
            //InputStream inputStream = Resources.getResourceAsStream(resource);
            //我们可以通过反射来加载配置文件
            InputStream inputStream = cn.et.mybatis.lesson01.TestMybatis.class.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //打开一个新的session对象,操作数据库的类就是SqlSession。
            SqlSession session = sqlSessionFactory.openSession();
            return session;
        }
        public static void main(String[] args) throws IOException {
            SqlSession session = getSession();
            //通过动态代理 创建一个实现类  自动调用配置文件
             DeptMapper dm = session.getMapper(DeptMapper.class);
             List<Map> list = dm.selectEmp();
            System.out.println(list.size());
        }
        @Test
        public void mass(){
            SqlSession session = getSession();
            MassMapper mm = session.getMapper(MassMapper.class);
            List<Map> sm = mm.selectMass();
            System.out.println(sm.size());
        }
    }    

      2.在src下(可自定义包)下创建映射资源文件(mass_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">
      <!-- 此文件主要用于编写sql语句
          此处的namespace的路径为接口映射的接口路径的全路径    
       -->
    <mapper namespace="cn.et.mybatis.lesson01.inter.DeptMapper">
        <!-- 
       select的id 必须接口的方法名一致
       resultType 和接口的返回值的泛型一致
      -->
      <select id="selectEmp" resultType="map">
          <!-- select为数据库的查询标签,注意查询语句结束后不能用分号结尾 -->
               select * from dept
      </select>
    </mapper>

      3.创建mybatis文件(同上基础学习的3文件)

      4.定义接口

      

    package cn.et.mybatis.lesson01.inter;
    
    import java.util.List;
    import java.util.Map;
    
    public interface DeptMapper {
    //此处的方法名,必须和资源映射文件中的id名一样,否则会报错(
    <select id="selectEmp" resultType="map">
    public List<Map> selectEmp(); }

      四.通过接口直接映射Sql(通过注解)

      接口映射通过注解

        1.定义接口,定义接口内要操作数据库的方法,在方法上直接加对应注解(@Select(values="select * from mass"))    (@select<查询注解>,@insert<插入注解>,@delete<删除注解>,@update<修改注解>)

        2.定义主mybatis.xml文件,其中在<mappers>标签中添加注册的类<mapper class="cn.et.接口名"/>  注:此处若是注册的是文件,则是用cn/et/mybatis/dao/emp_mapper.xml  若注册的是个类文件,则使用cn.et.mybatis.dao.emp_mapper.xml

        3.定义测试类

        

    1.定义接口

      

    package cn.et.mybatis.lesson01.inter;
    
    import java.util.List;
    import java.util.Map;
    
    import org.apache.ibatis.annotations.Select;
    
    public interface MassMapper {
        //此接口用注解实现
        @Select(value = { "select * from mass"})
        public List<Map> selectMass();
    }

      2.定义mybatis.xml文件

      

    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- 说明mybatis的根节点 -->
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <!--mybatis的根标签configuration -->
    <configuration>
        <!-- 资源文件的路径配置  注:cn前面不能用/否则会抛出异常-->
        <properties resource="cn/et/mybatis/lesson01/jdbc.properties">
        </properties>
        <!-- 配置连接数据库的环境,(开发环境) -->
      <environments default="development">
        <environment id="development">
        <!-- 事务交给jdbc管理,Conection(事务) commit(提交) rollback(回滚)  -->
          <transactionManager type="JDBC"/>
          <!-- 数据源 用来连接数据库(包含四要素,driver,url,username,password) -->
          <dataSource type="POOLED">
            <property name="driver" value="${driverClass}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${userAccount}"/>
            <property name="password" value="${password}"/>
          </dataSource>
        </environment>
      </environments>
      <!-- 包含隐射文件主要用于编写sql语句 -->
      <mappers>
          <!-- 隐射的资源文件  隐射文件主要编写sql语句 -->
        <!-- 此映射文件直接映射一个接口,接口直接定义注解,无需定义资源映射文件 -->
        <mapper class="cn.et.mybatis.lesson01.inter.MassMapper"/>
      </mappers>
    </configuration>

      3.定义测试类

      

    package cn.et.mybatis.lesson01.inter;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    public class TestMybatis {
        //此处单独定义一个方法,因为所有的增删改查都会用到该方法,所以直接调用
        private static SqlSession getSession() {
            String resource="mybatis.xml";
            //InputStream inputStream = Resources.getResourceAsStream(resource);
            //我们可以通过反射来加载配置文件
            InputStream inputStream = cn.et.mybatis.lesson01.TestMybatis.class.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //打开一个新的session对象,操作数据库的类就是SqlSession。
            SqlSession session = sqlSessionFactory.openSession();
            return session;
        }
    
        @Test
        public void mass(){
            SqlSession session = getSession();
            MassMapper mm = session.getMapper(MassMapper.class);
            List<Map> sm = mm.selectMass();
            System.out.println(sm.size());
        }
    }    
  • 相关阅读:
    spring的断言工具类Assert的基本使用
    开发工具推荐
    IDEA 接口调试插件 HTTP Client
    【笔记0-开篇】面试官系统精讲Java源码及大厂真题
    面试题:HashSet、TreeSet 和HashMap 的实现与原理
    Mybatis面试问题集锦
    分组拼接字符串,GROUP_CONCAT
    跨表更新,Mysql Update Join
    【设计模式】UML类图及Java的类之间的关系
    Sql性能优化梳理
  • 原文地址:https://www.cnblogs.com/xushirong/p/6974128.html
Copyright © 2011-2022 走看看