多环境切换&&注解方式&&增删改返回值问题

1.数据库环境切换(驱动jar)

  a.切换environment(指定实际使用的数据库)

srcdb.properties

#oracle
oracle.driver=oracle.jdbc.OracleDriver
oracle.url=jdbc:oracle:thin:@127.0.0.1:1521:mldn
oracle.username=scott
oracle.password=tiger

#mysql
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://127.0.0.1:3306/myy
mysql.username=root
mysql.password=root

  b. Provider别名

srcconf.xml

<?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 resource="db.properties"/>
    <!--环境配置,连接的数据库-->
    <!--通过environments的default值和environment的id来指定MyBatis运行时的数据库环境  -->
    <environments default="devMysql">
    <!--开发环境(自己的计算机)  -->
        <environment id="devOracle">
           
            <!--事务提交方式:
                  JDBC:利用JDBC方式处理事务(commit rollback close)
                  MANAGED:将事务交由其他组件去托管(spring,jobss)    默认会关闭连接
                  -->
           <!--  <transactionManager type="MANAGED"></transactionManager>
            <property name="closeConnection" value="false"></property> -->
            <transactionManager type="JDBC"/>
            <!--dataSource 指连接源配置,POOLED是JDBC连接对象的数据源连接池的实现-->
            <!--数据源类型;
                UNPOOLED:传统的JDBC模式(每次访问数据库,均需要打开关闭数据库,但是打开关闭数据库是比较消耗性能的)
                POOLED:使用数据库连接池
                JNDI:从tomcat中获取一个内置的数据库连接池(数据库连接池-数据源)
              -->
            <dataSource type="POOLED">
               <property name="driver" value="${oracle.driver}"></property>
                <property name="url" value="${oracle.url}"></property>
                <property name="username" value="${oracle.username}"></property>
                <property name="password" value="${oracle.password}"></property>
            </dataSource>
        </environment>
        <!--mysql-->
        <environment id="devMysql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"></property>
                <property name="url" value="${mysql.url}"></property>
                <property name="username" value="${mysql.username}"></property>
                <property name="password" value="${mysql.password}"></property>
            </dataSource>
        </environment>
    </environments>

    <!--配置数据库支持类-->
    <databaseIdProvider type="DB_VENDOR">
        <property name="MySQL" value="mysql"/>
        <property name="Oracle" value="oracle"/>

    </databaseIdProvider>
<mappers>
    <!--<mapper resource="org/myy/mapper/studentMapper.xml"/>-->
    <!--<mapper class="org.myy.mapper.StudentMapper"/>-->
    <!--以下语句可以将com.myy.mapper包中的注解接口和xml全部一次性引入-->
    <package name="org.myy.mapper"/>
</mappers>

</configuration>

  c.写不同数据库的SQL语句

  d.在mapper.xml中配置databaseId="Provider别名"

如果mapper.xml的sql标签仅有一个不带databaseId的标签,则该标签会自动适应当前数据库

如果既有不带databaseId的标签,又有带databaseId的标签,则程序会优先使用带databaseId的标签

2.注解方式

  推荐使用xml

  a.将sql语句写在接口的方法上

srcorgmyymapperStudentMapper.java

    @Select("select * from student1 where stuno=#{stuno}")
    Student queryStudentByStuno(int stuno);

  b.将接口的全类名写入<mapper>,让mybits知道sql语句此时是存储在接口中

srcconf.xml

<mappers>
    <mapper class="org.myy.mapper.StudentMapper"/>
</mappers>

注解/xml都支持批量引入

<mappers>
    <!--<mapper resource="org/myy/mapper/studentMapper.xml"/>-->
    <!--<mapper class="org.myy.mapper.StudentMapper"/>-->
    <!--以下语句可以将com.myy.mapper包中的注解接口和xml全部一次性引入-->
    <package name="org.myy.mapper"/>
</mappers>

3.增删改的返回值问题

  返回值可以是void,Integer、Long、Boolean

  如何操作:只需要在接口中修改返回值即可

srcorgmyymapperStudentMapper.java

int addStudent(Student student);

srcorgmyy estTest.java

       //Connection - SqlSession操作Mybatis
        //conf.xml->reader
        Reader reader = Resources.getResourceAsReader("conf.xml");
        //reader->sqlSession

        //可以通过build的第二参数 指定数据库环境
        SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(reader,"devOracle");
        SqlSession session = sessionFactory.openSession(true);//设置自动提交

        StudentMapper studentMapper=session.getMapper(StudentMapper.class);
        Student student=new Student(1,"xx006",105,"xx");

        int result=studentMapper.addStudent(student);
        System.out.println("增加了"+result+"个学生");
     session.commit();
     
session.close();

结果:增加了1个学生
原文地址:https://www.cnblogs.com/mayouyou/p/13260478.html