spring datasource和mybatis的datasource来源在哪里

配置一个数据源 
    spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0。可以在Spring配置文件中利用这两者中任何一个配置数据源。 

 

配置一个数据源 
    spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0。可以在Spring配置文件中利用这两者中任何一个配置数据源。 

配置一个数据源 
    spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0。可以在Spring配置文件中利用这两者中任何一个配置数据源。 

(1) 读取xml文件构造方式

 

String resource = "org/mybatis/example/mybatis-config.xml";
  InputStream inputStream = Resources.getResourceAsStream(resource);
  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream) ;

 

(2) 编程构造方式

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration) ;

 

 

 

下面先来分析XML文件构造方式的build方法的源码:

 

复制代码
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
    try {
      XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
      return build(parser.parse());
    } catch (Exception e) {
      throw ExceptionFactory.wrapException("Error building SqlSession.", e);
    } finally {
      ErrorContext.instance().reset();
      try {
        inputStream.close();
      } catch (IOException e) {
        // Intentionally ignore. Prefer previous error.
      }
    }
  }
复制代码

 

通过上面这几行代码,就能看出基于XML文件的这种构造方式,通过从XML中读取信息的工作之后,也是构造出Configuration对象之后再继续进行SqlSessionFactory的构建工作的,只是多了些XML的解析工作,所以我们只需单刀直入,直按分析编程构造方式的代码就可以了,或者是直接分析 build(parser.parse())这句代码(参数产生过程先跳过)

编程构造方式的build方法源码如下(基于xml的构造方式的build(parser.parse())最终也是调了这个代码): 

  

  public SqlSessionFactory build(Configuration config) {
                return new DefaultSqlSessionFactory(config);
    }

 

其实这么看来SqlSessionFactory在mybatis的默认实现类为org.apache.ibatis.session.defaults.DefaultSqlSessionFactory , 其构造过程主要是注入了Configuration的实例对象,Configuration的实例对象即可通过解析xml配置文件产生,也可能通过代码直接构造。以上代码使用了一个设计模式:建设者模式(Builder),SqlSessionFactoryBuilder扮演具体的建造者,Configuration类则负责建造的细节工作,SqlSession则是建造出来的产品。

以下是类图和建造者模式的基本形态图,读者自行对照阅读。

    

构造者模式是一种对象的创建模式。它可以将一个复杂对象的内部构成特征与对象的构建过程完全分开。

转载于:https://www.cnblogs.com/panxuejun/p/6770432.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 创建Spring项目 在IntelliJ IDEA中创建一个新的Spring项目,选择Maven项目,然后选择Spring Web和Spring JDBC作为依赖项。 2. 配置数据库连接 在pom.xml文件中添加MyBatis和MySQL驱动程序的依赖项: ``` <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency> ``` 在src/main/resources目录下创建一个名为application.properties的文件,配置数据库连接信息: ``` spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 3. 创建数据库表 在MySQL中创建一个名为user的表,用于存储用户信息: ``` CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) NOT NULL, `password` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; ``` 4. 创建数据访问对象 创建一个名为UserMapper的Java接口,用于定义数据访问对象的方法: ``` public interface UserMapper { User findByUsername(String username); } ``` 创建一个名为UserMapper.xml的MyBatis映射文件,用于将SQL语句映射到接口的方法: ``` <?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.example.mapper.UserMapper"> <select id="findByUsername" parameterType="String" resultType="com.example.entity.User"> SELECT * FROM user WHERE username = #{username} </select> </mapper> ``` 5. 创建实体类 创建一个名为User的Java类,用于表示用户对象: ``` public class User { private int id; private String username; private String password; // 构造方法、getter和setter省略 } ``` 6. 创建服务类 创建一个名为UserService的Java类,用于处理用户登录操作: ``` @Service public class UserService { @Autowired private UserMapper userMapper; public boolean login(String username, String password) { User user = userMapper.findByUsername(username); if (user != null && user.getPassword().equals(password)) { return true; } return false; } } ``` 7. 创建控制器类 创建一个名为UserController的Java类,用于处理用户登录请求: ``` @Controller public class UserController { @Autowired private UserService userService; @PostMapping("/login") @ResponseBody public String login(String username, String password) { if (userService.login(username, password)) { return "登录成功"; } else { return "登录失败"; } } } ``` 8. 创建视图文件 在src/main/resources/templates目录下创建一个名为index.html的Thymeleaf视图文件,用于显示登录表单: ``` <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> <form method="post" action="/login"> <label>用户名:<input type="text" name="username" /></label><br /> <label>密码:<input type="password" name="password" /></label><br /> <input type="submit" value="登录" /> </form> </body> </html> ``` 9. 运行项目 运行Spring Boot应用程序,访问http://localhost:8080/即可看到登录表单。输入正确的用户名和密码后,将显示“登录成功”消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值