栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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、在核心配置文件中加载配置关系
  
        
    


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

3.2 在Mapper接口写对应sql语句
public interface TeacherMapper {
    //查询所有的教师
    @Select("select  * from teacher ")
    ArrayList 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 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 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 {
        
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        
        sqlSession = sqlSessionFactory.openSession(true);
        mapper = sqlSession.getMapper(TeacherMapper.class);
    }
    
    @After
    public void after ()throws IOException {
        sqlSession.close();
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/874336.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号