java连接数据库(4.2):Mybatis框架注解的简单使用

Mybatis的两种映射方式

MyBatis 有两种 SQL 语句映射模式,一种是基于注解,一种是基于XML。

Mybatis应该选择哪种映射方式呢?MyBatis 项目开发中是基于 XML 还是注解?

注解模式与 XML 模式对比
注解模式
优势:开发速度快,开发量小
劣势:难以线上维护(每次修改 SQL 语句都需要重新打包)

XML 模式
优势:便于线上维护(每次修改 SQL 语句不需要重新打包)
劣势:开发速度慢,开发量大

另外,注解模式开发速度快仅限于简单 SQL 语句处理,比如单表 CURD 操作之类。对于复杂的 SQL 语句处理,注解模式就显得有点力不从心,而且会带来混乱。

总结:实际项目开发中,用哪种实现方式取决于团队,因此两种都需要了解。
自己开发时,简单 SQL 语句可以采用注解模式,复杂 SQL 语句采用 XML 模式。(个人认为对Mybatis来说,XML是核心)

1、使用注解的目的:

减少编写Mapper映射文件

2、Mybatis的常用注解

@lnsert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result一起使用,封装多个结果集
@One:实现一对一结果集封装
@Many:实现一对多结果集封装

3、快速入门:

3.1、在核心配置文件中加载配置关系

  <mappers>
        <package name="mapper"/>
    </mappers>

在这里插入图片描述

说明1:该路径是相对与root文件路径下的
说明2:等价于加载映射文件,都是告知mapper接口映射的sql语句的路径

3.2 在Mapper接口写对应sql语句

public interface TeacherMapper {
    //查询所有的教师
    @Select("select  * from teacher ")
    ArrayList<Teacher> findAll();

    //根据ID查询单个教师
    @Select("select  * from teacher where id = #{id}")
    Teacher getTeacherById(int id);

    //插入一个教师对象
    @Insert("insert into test.teacher (id, name) value (#{id},#{name})")
    void addTeacher(Teacher teacher);

    @Insert("insert into test.teacher(id, name) value (#{id},#{name})")
    void addTeacher2(Map<String, Object> map);

    //根据id更新一个对象
    @Update("update test.teacher set name = #{name} where id = #{id}")
    void updateTeacher(Teacher teacher);
    @Delete("delete from test.teacher where id = #{id}")
            
    //根据id删除一个对象
    void deleteTeacher(int id);

//    void updateTeacher2(Map<String,Object> map);
}

对比(XML方式和注解方式)
在这里插入图片描述

3.3 开始测试

备注:下面的代码已经抽取出重复获取mapper对象的操作

@Test
    public void selectAll() throws IOException {
        mapper.findAll();
    }

    @Test
    public void selectbyId() throws IOException {
        mapper.getTeacherById(5);
    }

    //
    @Test
    public void deletebyId() throws IOException {
        mapper.deleteTeacher(5);
    }

    @Test
    public void updateTeacher() throws IOException {
        Teacher t5 = new Teacher(5, "令狐冲");
        mapper.updateTeacher(t5);
    }

    @Test
    public void insert() throws IOException {
        Teacher t5 = new Teacher(4, "东方不败");
        mapper.addTeacher(t5);
        mapper.findAll();
    }

附:用@Before等抽取出获取session会话对象的固定模板

每次测试代码时,都得重复获取mapper,可以使用@before、@After抽取出重复性的操作

public class MybatisTest {
    private TeacherMapper mapper;
    private SqlSession sqlSession;
    @Before
    public void before()throws IOException {
        /**
         * 获取核心配置文件* Resources :import org.apache.ibatis.io.Resources;*/
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        /**获取工厂对象*/
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        /**获取session会话对象——工厂打开一个会话*/
        sqlSession = sqlSessionFactory.openSession(true);
        mapper = sqlSession.getMapper(TeacherMapper.class);
    }
    
    @After
    public void after ()throws IOException {
        sqlSession.close();
    }
}


java连接数据库专栏文章:

java连接数据库(一):JDBC

Java连接数据库(二):数据库连接池(druid)

java连接数据库(三):Spring JDBC/JDBC Template

java连接数据库(4.1):Mybatis框架快速入门

java连接数据库(4.2):Mybatis框架注解的简单使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值