zoukankan      html  css  js  c++  java
  • mybetis d11

    1.什么是mybatis,为什么要引入,优点在哪

      MyBatis实际上是Ibatis3.0版本以后的持久化层框架【也就是和数据库打交道的框架】!  

      如果使用原生的jdbc操作数据库需要经过多个步骤,这样就会出现许多繁琐的操作,还是机械的操作,一点也不智能,通过数据库连接池可以解决这个问题,但是这样前后端绑定在一起了,没有实现分层开发,不利于实际操作。

      他的优点 :1.功能简单,sql语句编写在java代码,这属于硬编码高耦合。2.希望编写sql语句与java代码编写,将sql语句编写在xml配置文件中,实现数据表中记录到对象之间的映射!

      sql和java编码分开,功能边界清晰,一个专注于业务,一个专注于数据,可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO映射成数据库中的记录,完成业务+底层数据库的媒介!

      

    MyBatis是一个半自动化的轻量级的持久化层框架。
    JDBC
    – SQL夹在Java代码块里,耦合度高导致硬编码内伤
    – 维护不易且实际开发需求中sql是有变化,频繁修改的情况多见

    Hibernate和JPA
    – 长难复杂SQL,对于Hibernate而言处理也不容易
    – 内部自动生产的SQL,不容易做特殊优化。
    – 基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难。 导致数据库性能下降。

    对开发人员而言,核心sql还是需要自己优化,sql和java编码分开,功能边界清晰,一个专注业务、 一个专注数据。

    二。具体的myBatis的编写。

      1.创建一个数据库和表

    CREATE DATABASE mytabis;
            CREATE TABLE tbl_employee(
              id INT(11) PRIMARY KEY AUTO_INCREMENT,
              last_name VARCHAR(255),
              gender CHAR(1),
              email VARCHAR(255)
            )

      2.创建一个动态web工程,创建与上述数据表对应的实体类

    package com.neuedu.bean;
    
    public class Employee {
        int id;
        @Override
        public String toString() {
            StringBuilder builder = new StringBuilder();
            builder.append("Employee [id=");
            builder.append(id);
            builder.append(", ");
            
                builder.append("lastName=");
                builder.append(lastname);
                builder.append(", ");
            
                builder.append("gender=");
                builder.append(gender);
                builder.append(", ");
        
                builder.append("email=");
                builder.append(email);
            
            builder.append("]");
            return builder.toString();
        }
        public Employee() {
            super();
        }
        public Employee(int id, String lastname, int gender, String email) {
            super();
            this.id = id;
            this.lastname = lastname;
            this.gender = gender;
            this.email = email;
        }
        String lastname;
        int gender;
        String email;
        /**
         * @return the id
         */
        public int getId() {
            return id;
        }
        /**
         * @param id the id to set
         */
        public void setId(int id) {
            this.id = id;
        }
        /**
         * @return the last_name
         */
        public String getLast_name() {
            return lastname;
        }
        /**
         * @param last_name the last_name to set
         */
        public void setLast_name(String lastname) {
            this.lastname = lastname;
        }
        /**
         * @return the gender
         */
        public int getGender() {
            return gender;
        }
        /**
         * @param gender the gender to set
         */
        public void setGender(int gender) {
            this.gender = gender;
        }
        /**
         * @return the email
         */
        public String getEmail() {
            return email;
        }
        /**
         * @param email the email to set
         */
        public void setEmail(String email) {
            this.email = email;
        }
    }

       3.[参考mybatis官方文档]加入需要的jar包

     log4j-1.2.17.jar //当然需要注意的是:log4j的jar包是需要log4j.xml文件的
      mybatis-3.4.1.jar
      mysql-connector-java-5.1.37-bin.jar

      还要加在对应的驱动 

    4.创建mytabis-config.xml文件并将mybatis文档中的内容复制过来,并将数据库配置信息换成自己的:

    <?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>
    <environments default="development">
    <environment id="development">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mytabis"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
    </dataSource>
    </environment>
    </environments>
    <!-- 将我们写好的sql映射文件一定要注册到全局配置文件中 -->
    <mappers>
    <mapper resource="EmployeeMapper.xml"/>
    </mappers>
    </configuration>

    5.创建测试用例,.复制mybatis官方文档代码,代码如下:

    public class MyBatisTest {
    @Test
    public void test() throws IOException {
    String resource = "mytabis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
    SqlSession sqlSession =null;
    try{
    //2.获取sqlSession实例,能直接执行已经映射的SQL语句
    sqlSession= sqlSessionFactory.openSession();
    //需要两个参数,第一个参数是sql语句的唯一标识,
    //第二个参数是执行sql要用的参数
    Employee employee = sqlSession.selectOne("com.neuedu.mybatis.EmployeeMapper.selectEmp",1);
    System.out.println(employee);
    }catch(Exception e){
    
    }finally{
    sqlSession.close();
    }
    
    }
    
    }


    6. 创建sql语句的映射文件EmployeeMapper.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.neuedu.mybatis.EmployeeMapper">
    <!-- 
    namespace:名称空间
    id:sql语句的唯一标识
    resultType:返回值类型
    #{id}:接收参数传递过来的id值
    -->
    <select id="selectEmp" resultType="com.neuedu.mybatis.bean.Employee">
    select id,last_name lastName,gender,email from tbl_employee where id = #{id}
    </select>
    </mapper>

    这样就配置好了,需要注意的是数据库的参数得使用自己的还要一一对应。数据表中也需要插入一些数据。

    三.关键标签

     1.mybatis.xml中存在一些属性

      configuration 配置
      properties 属性:可以加载properties配置文件的信息
      settings 设置:可以设置mybatis的全局属性
      typeAliases 类型命名
      typeHandlers 类型处理器
      objectFactory 对象工厂
      plugins 插件
      environments 环境
      environment 环境变量
      transactionManager 事务管理器
      dataSource 数据源
      databaseIdProvider 数据库厂商标识
      mappers 映射器

    <?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>
            <!-- properties用于加载
                    url本地磁盘
                    resource是类路径
             -->
             <!--     environments可以配置数据库的环境
                  这里有一个子标签:environment,,有一个default属性,他指定的是jabc或者test,他决定了你所使用的数据库是哪个,该标签一定要包含tracnsactionManager和dataSoure
            setting设置驼峰式命名,他可以将数据库中last_name转化成lastName,自动去掉了_和n的大写。
            typeAliases是用来设置别名的,type指定要起类型全类名,默认别名就是类名小写。不建议使用,使用全类名更加规范。规范书写会减少许多不必要的麻烦。
    --> <properties resource="jdbc.properties"> </properties> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings> <typeAliases> <package name="com.neuedu.bean" /> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClass}"/> <property name="url" value="${jdbc.jdbcUrl}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> <!-- 将我们写好的sql映射文件一定要注册到全局配置文件中 --> <environment id="test" > <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${test.driverClass}"/> <property name="url" value="${test.jdbcUrl}"/> <property name="username" value="${test.user}"/> <property name="password" value="${test.password}"/> </dataSource> </environment> </environments> <mappers> <mapper class="com.neuedu.mapper=.EmployeeMapper"/> </mappers> </configuration>

    四。配置一个第三方数据连接池

      1.需要自定义一个类继承UnpooledDataSourceFactory类,然后在构造器中初始化该对应的dataSource属性

    public class C3P0DataSource  extends UnpooledDataSourceFactory{
                    public C3P0DataSource() {
                        this.dataSource = new ComboPooledDataSource(); 
                    }
                }

      2.配置mybatis的全局配置文件,导入c3p0-0.9.2.1.jar和mchange-commons-java-0.2.3.4.jar

        <environments default="development">
                            <environment id="development">
                                <transactionManager type="JDBC"/>
                    
                                <!-- 配置使用第三方的数据源。属性需要配置为第三方数据源的属性 -->
                                <dataSource type="com.neuedu.mapper.C3P0DataSource">
                                    <property name="driverClass" value="${jdbc.driver}"/>
                                    <property name="jdbcUrl" value="${jdbc.url}"/>
                                    <property name="user" value="${jdbc.username}"/>
                                    <property name="password" value="${jdbc.password}"/>
                                </dataSource>
                            </environment>

    五.增删改查:他是写在具体的xml中,而不是配置文件中

    <select></select>
    <insert></insert>
    <update></update>
    <delete></delete> 

    <?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.neuedu.mapper.EmployeeMapper">
                 <!-- 
                    namespace:名称空间
                    id:sql语句的唯一标识
                    resultType:返回值类型
                    #{id}:接收参数传递过来的id值
                  -->
                 
                    <select id="selectEmp" resultType="com.neuedu.bean.Employee" >
                        select * from tbl_employee where id =#{id}
                    </select>
                    <insert id="insert" >
                        insert into tbl_employee values(null,#{lastname},#{gender},#{email})
                    </insert>
                    
                </mapper>

    六。具体的databaseIdProvider环境

    <databaseIdProvider type="DB_VENDOR">
                <property name="SQL Server" value="sqlserver"/>
                <property name="DB2" value="db2"/>
                <property name="Oracle" value="oralce" />
                <property name="MySQL" value="mysql" />
            </databaseIdProvider>

    用他的value属性可以获得不同数据库连接,放在mybatis。当然连接数据库还需要配置数据库地址驱动和姓名密码,才可以进入使用。

    不同数据库sql的执行

    MySQL:INSERT INTO tbl_employee(user_name,email,gender) VALUES(#{userName},#{email},#{gender})
    ORACLE:INSERT INTO employee(id,user_name,email) VALUES(test.seq.nextval,#{userName},#{email})

    还需要注意的是经常查询出来的结果有的有属性,有的却没有,这可能和sql里面每一列的标题和创建的类的名字不是一一对应的,即使使用驼峰命名也不行。

    比如说其中有一行是username,而employee的类中只有name,这样就不会匹配了。需要执行sql:select username name from tbl_employee。这样才可以,还需要注意的是查询不需要数据的提交,而增删改就需要sqlSession.commit();事务的提交。

        

  • 相关阅读:
    【CF1027C】Minimum Value Rectangle(贪心,数学)
    【CF1027B】Numbers on the Chessboard(数学)
    【CF1027A】Palindromic Twist(模拟)
    【CF1023C】Bracket Subsequence(模拟)
    【CF1023B】Pair of Toys(解方程)
    【CF1023A】Single Wildcard Pattern Matching(模拟)
    【CF1020C】Elections(贪心)
    【CF1020B】Badge(模拟)
    【CF1020A】New Building for SIS(签到)
    【CF1017D】The Wu(状压前缀和)
  • 原文地址:https://www.cnblogs.com/guomingyt/p/8075564.html
Copyright © 2011-2022 走看看