无法创建接口的实例_Java基础篇:开源框架Mybatis创建流程入门实践

认真写文章,用心做分享。公众号:Java耕耘者 (整套Java资料)
a6797c6eebcec3d136252a64cec21055.png

开始安装

如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:

org.mybatis  mybatis  x.x.x

配置文件

XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务范围和控制方式的事务管理器(TransactionManager)
示例(mybatisConfig.xml):

<?xml version="1.0" encoding="UTF-8" ?>

关于更多配置及用法,详见官方文档(翻译中文版的)XML映射配置文件

Mapper映射器

创建一个user表
CREATE TABLE `users` (  `id` int(3) NOT NULL AUTO_INCREMENT,  `username` varchar(20) DEFAULT NULL,  `birthday` datetime DEFAULT NULL,  `sex` char(2) DEFAULT NULL,  `address` varchar(20) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

创建一个实体类Users

public class Users {    private Integer id;    private String username;    private Date birthday;    private String sex;    private String address;    // 这里省略了Getter/Setter方法    @Override    public String toString() {        return super.toString() + "users = " + this.id + " | "+ this.username + " | "                + this.birthday + " | " + this.sex + " | " + this.address;    }}

写一个接口来描述方法的接口

最后SQL语句的执行也是通过调用这个方法,再通过代理执行。

package com.ncusoft.mybatisdemos.mapper;public interface UserMapper {    /**     * 根据用户id获取数据     * @param id 用户id     * @return Users     */    Users findById(Integer id);}
编写XML映射文件(UsersMapper.xml)

它能直接映射到刚刚定义的接口中的方法,并在XML中定义要执行的SQL语句(有个要注意的是,Mapper接口和XML映射文件的路径一定要一模一样,不然就无法映射了)。
更多详细用法见Mapper XML 文件

<?xml version="1.0" encoding="UTF-8" ?>        select * from users where id = #{id}    

使用

执行流程:

408b90caf24c99466766968ade9e11c2.png

下面是一个使用示例,把这个代码放在测试代码中执行。

// 从配置文件中获取字节流(通过类加载器的方法) 配置文件应该放在项目资源的根路径下InputStream in = Resources.getResourceAsStream("mybatisConfig.xml");// 创建一个工厂的构建器SqlSessionFactoryBuilder bulider = new SqlSessionFactoryBuilder();// 构建器通过传入字节流来构建一个SqlSessionFactory,SqlSessionFactory factory = bulider.build(in);// 通过工厂来创建一个SqlSession实例SqlSession session = factory.openSession();// 通过SqlSession对象来获取Mapper接口的代理对象,用来实现Mapper接口的操作UserMapper userMapper = session.getMapper(UserMapper.class);// 通过刚刚创建的代理对象来执行Mapper接口中的方法Users users = userMapper.findById(1);System.out.println(users);

来看一下执行的结果日志并分析一下:

// 打开一个数据库连接16:35:24.478 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Opening JDBC Connection// 连接池中没有空闲连接,于是新建了一个连接16:35:25.197 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - Created connection 1832532108.// 由于factory.openSession()使用的是默认方法,所以autocommit的值将会被设置为false,也就是关闭了数据库的自动事务提交16:35:25.197 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6d3a388c]// 要执行的语句,这里使用了SQL预处理,用?做占位符16:35:25.204 [main] DEBUG com.ncusoft.mybatisdemos.mapper.UserMapper.findById - ==>  Preparing: select * from users where id = ? // 传入的参数, Integer类型的116:35:25.263 [main] DEBUG com.ncusoft.mybatisdemos.mapper.UserMapper.findById - ==> Parameters: 1(Integer)// 查询到的结果总数为116:35:25.348 [main] DEBUG com.ncusoft.mybatisdemos.mapper.UserMapper.findById - <==      Total: 1// 打印查出来的结果com.ncusoft.mybatisdemos.entity.Users@5ba3f27ausers = 1 | 小熊 | Mon Dec 16 08:00:00 GMT+08:00 2019 | 男 | 江西九江// SQL操作完毕,将autocommit重置为true16:35:25.382 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6d3a388c]// 关闭当前数据库连接16:35:25.382 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6d3a388c]// 连接空闲,则放回连接池中16:35:25.383 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - Returned connection 1832532108 to pool.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值