使用MyBatis框架的注解代替映射文件

一、MyBatis 介绍

MyBatis 是一个优秀的基于 Java 的持久层框架(是一个DAO层的框架),它内部封装了 JDBC,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。

MyBatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 Java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句。最后 MyBatis 框架执行 sql 并将结果映射为 Java 对象并返回。

MyBatis 的过去: MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code ,并且改名为MyBatis。2013年11月迁移到Github

名字由来:iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。

当前,最新版本是MyBatis 3.5.9,其发布时间是2021年12月26日。

优点: 采用 ORM 思想解决了实体和数据库映射的问题,对 JDBC 进行了封装,屏蔽了 JDBC API 底层访问细节,使我们不用与 JDBC API 打交道,就可以完成对数据库的持久化操作。

二、入门 MyBatis

前面的介绍我们提到了DAO层、JDBC、sql语句本身、映射等。下面来简单说说使用 MyBatis 的六大步骤:

① 添加 MyBatis 的坐标

② 创建 user 数据表

③ 编写 User 实体类

④ 编写核心配置文件 mybatis-config.xml

⑤ 编写 DAO 层接口,使用注解进行开发

第①步中的“坐标”就相当于是在引入jar包,假设我们是用 Maven 进行的开发,那么可以在 pox.xml 文件中写你需要的 MyBatis 依赖,示例如下:

<dependencies>
    ……
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>
    ……
</dependencies>

第②、③步创建数据表和实体类不用多说。

第④步是编写核心配置文件:mybatis-config.xml ,里面是数据库连接的四要素、事务管理器等。它直接放在resource目录下即可。

第⑤步编写DAO层接口,并使用注解进行开发,有几点需要注意:1、核心配置文件中不再是“加载映射文件”,而是加载映射关系;2、常被使用的注解有:@Select@Insert@Update@Delete@Results@Result@Many;3、注解中输入参数 #{参数} 参数名应和实体类的属性名一致。

三、源码示例

项目结构如下图:

mybatis_demo项目结构如图

源码只举例第④、⑥步的代码,其他几步就不多说了!

第④步 核心配置文件 mybatis-config.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标签加载外部properties文件 -->
    <properties resource="jdbc.properties"></properties>
    <!--别名-->
    <typeAliases>
        <package name="org.example.domain"/>
    </typeAliases>
    <!-- 配置数据源信息 -->
    <environments default="developement">
        <environment id="developement">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--加载映射关系-->
    <mappers>
        <!--指定接口所在的包/类-->
        <package name="org.example.dao"></package>
    </mappers>
</configuration>

jdbc.properties 源码:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/你的数据库名
jdbc.username=登录名
jdbc.password=登录密码

dao层接口类 org.example.dao.UserMapper.java 中的注解如下:

@Select("select * from sys_user")
List<User> getUserList();

@Insert("insert into sys_user values(null,#{username},#{email},#{password},#{phoneNum})")
void addOneUser(User u);

@Update("update sys_user set username=#{username},phoneNum=#{phoneNum} where id=#{id}")
void updateOneUser(User u);

@Delete("delete from sys_user where id=#{id}")
void deleteOneUser(int id);

编写测试代码 org.example.test.Mybatis.java

private UserMapper mapper;
@Before
public void before() throws IOException {
    InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    SqlSession sqlSession = sqlSessionFactory.openSession(true);
    mapper = sqlSession.getMapper(UserMapper.class);
}
@Test
public void show() throws IOException {//查
    List<User> userList = mapper.getUserList();
    for (User user : userList) {
        System.out.println(user);
    }
}
@Test
public void add() throws IOException {//增
    User u = new User();//模拟数据
    u.setUsername("张三");
    u.setEmail("xxx@xx.com");
    u.setPassword("123");
    u.setPhoneNum("13899990000");
    mapper.addOneUser(u);
    show();
}
@Test
public void update() throws IOException {//改
    User u = new User();//模拟数据
    u.setId(1L);
    u.setUsername("张三");
    u.setPhoneNum("13866660000");
    mapper.updateOneUser(u);
    show();
}
@Test
public void delete() throws IOException {//删
    mapper.deleteOneUser(3);
    show();
}

🍉csdn机制真

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值