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

Mybatis-7-使用注解开发

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

Mybatis-7-使用注解开发

Mybatis --> 7. 使用注解开发 7.1 面向接口编程

解耦,可扩展,提高复用,分层开发中,上层不用管具体的实现,大家都遵守共同的标准,使得开发变得容易,规范性更好;定义与实现的分离;两类接口:抽象体 abstract class 和 抽象面 interface;一个个体可能有很多个抽象面; 7.2 使用注解开发

    注解在接口上实现;

    public interface UserMapper {
        
        @Select("select * from user")
        List getUsers();
    }
    

    需要在核心配置文件mybatis-config.xml中绑定接口;

    
        
    
    

    测试!

7.3 拓展

本质:反射机制实现底层:动态代理Mybatis详细执行流程

    Resources对象获取全局配置文件;实例化SqlSessionFactoryBuilder对象;XMLConfigBuilder解析配置文件流;Configuration所有配置信息;sqlSessionFactory对象实例化;transaction事务管理;创建executor执行器;创建sqlSession;实现CRUD;查看是否执行成功;如果执行成功,提交事务;关闭sqlSession。
7.4 使用注解实现CRUD 7.4.1 在创建工具类的时候实现事务自动提交

MybaitsUtils.java

public static SqlSession getSqlSession() {
    //这里可以设置参数true事务自动提交, 不用再手动写代码sqlSession.commit()
    return sqlSessionFactory.openSession(true);
}
7.4.2 查询: Read

编写接口,添加注解 UserMapper.java

@Select("select * from user where id = #{id}")
User getUserById(@Param("id") int id);

测试程序

@Test
public void testGetUserById() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.getUserById(2);
    System.out.println(user);
    sqlSession.close();
}

结果

注意:这里password为null,是因为数据库表的字段属性名pwd与实体类的属性名称password不一致;但是这里使用注解开发不能使用结果映射集,所以为了简单起见,最好保持属性名称一致。或者将其注解sql语句修改为select id, name, pwd as password from user where id = #{id},修改之后的结果:

7.4.3 添加: Create

编写接口

@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{password})")
int addUser(User user);

编写测试程序

@Test
public void testAddUser() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = new User(1,"ano","123");
    int i = mapper.addUser(user);
    if(i > 0) {
        System.out.println("添加用户成功 " + i);
    }
    sqlSession.close();
}

结果

7.4.4 修改: Update

编写接口

@Update("update user set name = #{name}, pwd = #{password} where id = #{id}")
int updateUser(User user);

编写测试程序

@Test
public void testUpdateUser() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = new User(1, "anobabe","123456");
    int i = mapper.updateUser(user);
    if(i > 0) {
        System.out.println("修改用户成功 " + i);
    }
    sqlSession.close();
}

结果

7.4.5 删除: Delete

编写接口

@Delete("delete from user where id = #{id}")
int deleteUserByID(int id);

编写测试程序

@Test
public void testDeleteUserByID() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    int i = mapper.deleteUserByID(4);
    if(i > 0) {
        System.out.println("删除成功 " + i);
    }
    sqlSession.close();
}

结果

7.4.6 #{} 和 ${}的区别

#{}是预编译处理,${}是字符串替换。MyBatis在处理#{}时,会将SQL中的#{}替换为?号,使用PreparedStatement的set方法来赋值,而在处理 时 , 是 把 {} 时,是把 时,是把{}替换成变量的值。#{}可以有效的防止SQL注入。一些特殊情况必须用 , 如 使 用 o r d e r b y 时 使 用 {},如使用order by时使用 ,如使用orderby时使用{}而不是#{}

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

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

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