【Mybaits】1初始Mybaits

一:工具版本

MySQL驱动:5.1.48
MySQL:5
Mybatis:3.4.6

二:Mybatis开发回顾


1:Mybatis概念


Mybatis是一个半自动的ORM框架,解决的数据库的访问问题,是JDBC技术的封装

2:Mybatis搭建开发环境


1):引入依赖


     <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
     </dependency>
     <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.48</version>
     </dependency>



2):核心配置文件


准备核心配置文件都需要进行如下操作:
1. 数据源的设置 environments

创建  mybatis-config.xml文件
配置 environment
缩略版如下:

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

主要含有以下几个标签

  1. <configuration>:是 MyBatis 配置文件的根元素,用于包含各个配置项。

  2. <typeAliases>:用于设置类型别名,将 Java 类型映射到 MyBatis 的 SQL 映射文件中的类型。这使得在 XML 文件中可以使用较简短的别名来引用 Java 类型。

  3. <plugins>:用于配置 MyBatis 的插件,插件可以在 MyBatis 的执行过程中拦截某些操作,进行自定义的处理。例如,可以编写插件来实现日志记录、性能监控等功能。

  4. <environments>:用于配置数据库环境。在该元素内配置 <environment> 元素,可以设置一个或多个用于操作数据库的环境。

  5. <mappers>:用于配置映射器(Mapper)。在该元素内可以配置一个或多个使用 SQL 映射文件的 Mapper 接口或者使用注解的 Mapper 接口。

详细版如下:

<?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>
    <typeAliases>
        <typeAlias type="com.baizhiedu.entity.User" alias="User"/>
        <typeAlias type="com.baizhiedu.entity.Account" alias="Account"/>
    </typeAliases>
    <plugins>
        <plugin interceptor="com.baizhiedu.plugins.LockInterceptor"/>
    </plugins>
    <environments default="default">
        <environment id="default">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/suns?useSSL=false"></property>
                <property name="username" value="root"></property>
                <property name="password" value="123456"></property>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--<package name=""-->
        <mapper resource="UserDAOMapper.xml"/>
        <mapper resource="AccountDAOMapper.xml"/>
    </mappers>
</configuration>


3):开发步骤


entity
类型别名
table
DAO接口
Mapper文件
Mapper文件的注册
API编程


三:一些细节说明
1:如何访问指定数据库

在 MyBatis 中实现多数据源,可以通过以下步骤进行配置:

1. 配置数据源:
   首先,需要在配置文件中配置多个数据源。可以使用不同的数据库连接池或直接指定不同的数据库连接信息,如驱动类、连接 URL、用户名和密码等。

2. 配置 SqlSessionFactory:
   针对每个数据源,需要为其配置对应的 SqlSessionFactory。每个 SqlSessionFactory 使用特定的数据源配置,即指定对应的数据源。

3. 配置 Mapper 接口和映射文件:
   对于每个数据源,需要为其配置对应的 Mapper 接口和映射文件。可以将 Mapper 接口和映射文件分组放置,方便对应每个数据源。

4. 注册 SqlSessionFactory:
   在使用 MyBatis 的框架中,需要将每个 SqlSessionFactory 注册到对应的数据源中,以便在代码中使用。

5. 在代码中选择使用特定数据源:
   在代码中使用特定数据源的过程是通过获取对应数据源的 SqlSessionFactory,然后从中获取 SqlSession 来操作数据库。可以使用 Spring 等框架的注入机制来自动处理 SqlSessionFactory 的注册和使用。

需要注意,上述步骤中的配置和使用可能因具体的框架和环境有所差异。可以根据具体的需求和情况,参考 MyBatis 和框架的官方文档来进行配置和使用多数据源。

希望以上信息能对你有所帮助,如还有其他问题,请随时提问。

我们不指定的话,访问的就是默认数据库,指定databaseId就会访问指定数据源库

我们调用dao层中的方法执行对应的SQL语句的时候,到底会访问哪个数据库呢?这个是由决定的,我们把那个搞成默认的,他就访问的是哪个数据库。

    <insert id="save" parameterType="Account" databaseId="default">
        insert into t_account (accountNo,balance) values(#{accountNo},#{balance})
    </insert>

如果在Mybatis当中涉及到多数据源
事务不好控制了。
XXXservice当中涉及到了ADAO.m1() 使用的default数据源,BDAO.m2中使用的是oRABLE数据源,怎么办

2:配置别名的作用
<typeAliases>
    <typeAlias type="com.baizhiedu.entity.User" alias="User"/>
    <typeAlias type="com.baizhiedu.entity.Account" alias="Account"/>
</typeAliases>

配置别名的作用就是在Mapper文件当中无需再写全限定名

3:Mapper.xml注册
    <mappers>
        <!--<package name=""-->
        <mapper resource="UserDAOMapper.xml"/>
        <mapper resource="AccountDAOMapper.xml"/>
    </mappers>

4:API编写
    @Test
    public void test1() throws IOException {
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
        List<User> users = userDAO.queryAllUsersByPage();
        for (User user : users) {
            System.out.println("user = " + user);
        }
    }

或者像接下来这么写

    @Test
    public void test2() throws IOException {
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //namespace+id
        List<User> users = sqlSession.selectList("com.baizhiedu.dao.UserDAO.queryAllUsers");
                      /*   sqlSession.selectOne()
                           sqlSession.insert()
                           sqlSession.delete()
                           sqlSession.update()*/
       //这些方法是重载的,多个参数的是因为SQL当中需要传参。                
        for (User user : users) {
            System.out.println("user = " + user);
        }
    }


四:核心代码分析
核心代码实例:

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();

两种方式功能等价 
实现效果 区别 
  
那种方式好?第一种方式好 表达概念更清晰 
第一种开发,本质上就是对第二种开发的封装。(代理设计模式)
  
UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
List<User> users = userDAO.queryAllUsers();

List<User> users = sqlSession.selectList("com.baizhiedu.dao.UserDAO.queryAllUsers");

String name = "huxz";

public class User{
  private String name = "huxz";
}

Mybatis刚刚诞生的时候,对于数据库的操作都是第二种,没有第一种,在后续版本更迭的时候,
才有的第一种。第二种,本质上就是将第二种的实现方式进行了封装。通过代理设计模式进行封装的。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值