mybatis学习3

mybatis注解方式:

1、@Select注解、@Update注解、@Delete注解、@Insert注解。

数据表结构可查看mybatis学习2
以Role角色为例:

RoleMapper:

package cn.linst.mapper;


import cn.linst.model.SysRole;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface RoleMapper {

    // @Select注解
    @Select({"select id, role_name roleName, enabled, create_by createBy, create_time createTime from sys_role where id = #{id}"})
    SysRole selectById(Long id);


    @Results(id="roleResultMap", value = {
            @Result(property = "id", column = "id", id = true),
            @Result(property = "roleName", column = "role_name"),
            @Result(property = "enabled", column = "enabled"),
            @Result(property = "createBy", column = "create_by"),
            @Result(property = "createTime", column = "create_time")
    })
    @Select ("select id, role_name, enabled, create_by, create_time from sys_role where id = #{id}")
    SysRole selectById2(Long id);

    // 使用@ResultMap 注解引用即可,注解的参数值就是上面代码中设置的 id 的值。 // Mybatis3.3.1及以上版本才支持id。
    // 当配合使用 XML 方式的时候,还可以是 XML <resultMap> 元素的 id 属性值。
   
    @ResultMap("roleResultMap")
    @Select("select * from sys_role")
    List<SysRole> selectAll();


    // @Insert 注解. 1.不需要返回主键
    @Insert({"insert into sys_role (id, role_name, enabled, create_by, create_time )",
            "values(#{id}, #{roleName}, #{enabled}, #{createBy},",
            "#{createTime, jdbcType=TIMESTAMP })"})
    int insert(SysRole sysRole);

    // @Insert 注解. 2.返回自增主键
    @Insert({"insert into sys_role (role_name, enabled, create_by, create_time)",
            "values(#{roleName}, #{enabled}, #{createBy},",
            "#{createTime, jdbcType=TIMESTAMP })"})
    @Options(useGeneratedKeys =true, keyProperty ="id")
    int insert2(SysRole sysRole);


    //  @Insert 注解. 3.返回非自增主键
    // 配置属性基本上都是相同的,其中 before为false时功能等同于
    // order="AFTER", before为true 时功能等同于order="BEFORE"
    @Insert({"insert into sys_role (role_name, enabled, create_by, create_time)",
            "values(#{roleName}, #{enabled}, #{createBy},",
            "#{createTime, jdbcType=TIMESTAMP })"})
    @SelectKey(statement ="SELECT LAST_INSERT_ID()",
               keyProperty="id",
               resultType = Long.class,
               before = false)
    int insert3(SysRole sysRole);


    // @Update注解
    @Update ({"update sys_role",
                "set role_name = #{roleName},",
                "enabled = #{enabled},",
                "create_by = #{createBy},",
                "create_time = #{createTime, jdbcType=TIMESTAMP }",
                "where id = #{id}"})
    int updateById(SysRole sysRole);


    // @Delete注解
    @Delete("delete from sys_role where id = #{id}")
    int deleteById(Long id);
}

role表结构:

CREATE TABLE `sys_role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色ID',
  `role_name` varchar(50) DEFAULT NULL COMMENT '角色名',
  `enabled` int(11) DEFAULT NULL COMMENT '有效标志',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色表';

RoleMapperTest:

package cn.linst;

import cn.linst.mapper.RoleMapper;
import cn.linst.model.SysRole;
import org.apache.ibatis.session.SqlSession;
import org.junit.Assert;
import org.junit.Test;
import java.util.List;

public class RoleMapperTest extends BaseMapperTest{

    @Test
    public void testSelectById() {
        //获取 sqlSession
        SqlSession sqlSession= getSqlSession();
        try {
            //获取 RoleMapper
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class) ;
            //调selectById 方法,查询 id =1 的角色
            SysRole role = roleMapper.selectById(1l);
            // role 不为空
            Assert.assertNotNull(role);
            //roleName =管理员
            Assert.assertEquals("管理员", role.getRoleName());
        } finally {
            //不要忘记关 sqlSession
            sqlSession.close();
        }
    }

    @Test
    public void selectAll() {
        //获取 sqlSession
        SqlSession sqlSession= getSqlSession();
        try {
            //获取 RoleMapper
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class) ;
            //调selectById 方法,查询 id =1 的角色
            List<SysRole> sysRoleList = roleMapper.selectAll();
            // role 不为空
            Assert.assertNotNull(sysRoleList);
        } finally {
            //不要忘记关 sqlSession
            sqlSession.close();
        }
    }

    @Test
    public void selectById2() {
        //获取 sqlSession
        SqlSession sqlSession = getSqlSession();
        try {
            //获取 RoleMapper
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class) ;
            //调selectById 方法,查询 id =1 的角色
            SysRole role = roleMapper.selectById2(1l);
            // role 不为空
            Assert.assertNotNull(role);
        } finally {
            //不要忘记关 sqlSession
            sqlSession.close();
        }
    }

    @Test
    public void insert() {
        //获取 sqlSession
        SqlSession sqlSession = getSqlSession();
        try {
            //获取 RoleMapper
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class) ;
            SysRole sysRole = new SysRole();
            sysRole.setRoleName("测试角色");
            Assert.assertEquals(1, roleMapper.insert(sysRole));
        } finally {
            sqlSession.commit();
            //不要忘记关 sqlSession
            sqlSession.close();
        }
    }

    @Test
    public void insert2() {
        //获取 sqlSession
        SqlSession sqlSession = getSqlSession();
        try {
            //获取 RoleMapper
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class) ;
            SysRole sysRole = new SysRole();
            sysRole.setRoleName("测试角色2");
            Assert.assertEquals(1, roleMapper.insert2(sysRole));
        } finally {
            sqlSession.commit();
            //不要忘记关 sqlSession
            sqlSession.close();
        }
    }

    @Test
    public void insert3() {
        //获取 sqlSession
        SqlSession sqlSession = getSqlSession();
        try {
            //获取 RoleMapper
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class) ;
            SysRole sysRole = new SysRole();
            sysRole.setRoleName("测试角色3");
            Assert.assertEquals(1, roleMapper.insert3(sysRole));
        } finally {
            sqlSession.commit();
            //不要忘记关 sqlSession
            sqlSession.close();
        }
    }

    @Test
    public void updateById() {
        //获取 sqlSession
        SqlSession sqlSession = getSqlSession();
        try {
            //获取 RoleMapper
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class) ;
            SysRole sysRole = new SysRole();
            sysRole.setId(3l);
            sysRole.setRoleName("测试角色。。。。");
            Assert.assertEquals(1, roleMapper.updateById(sysRole));
        } finally {
            sqlSession.commit();
            //不要忘记关 sqlSession
            sqlSession.close();
        }
    }

    @Test
    public void deleteById() {
        //获取 sqlSession
        SqlSession sqlSession = getSqlSession();
        try {
            //获取 RoleMapper
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class) ;
            Assert.assertEquals(1, roleMapper.deleteById(4l));
        } finally {
            sqlSession.commit();
            //不要忘记关 sqlSession
            sqlSession.close();
        }
    }
}

2、Provider 注解

分别是@SelectProvider、@InsertProvider、@UpdateProvider 和@DeleteProvider。实现查询、插入、更新、删除操作。

PrivilegeMapper:

package cn.linst.mapper;


import cn.linst.PrivilegeProvider;
import cn.linst.model.SysPrivilege;
import org.apache.ibatis.annotations.SelectProvider;

public interface PrivilegeMapper {

    @SelectProvider(type = PrivilegeProvider.class, method = "selectById")
    SysPrivilege selectById(Long id);
}

PrivilegeProvider:

package cn.linst;

import org.apache.ibatis.jdbc.SQL;

public class PrivilegeProvider {

    public String selectById(final Long id) {
        return new SQL() {
            {
                SELECT("id, privilege_name, privilege_url");
                FROM("sys_privilege");
                WHERE("id = #{id}");
            }
        }.toString();
    }
}

PrivilegeMapperTest:

package cn.linst;

import cn.linst.mapper.PrivilegeMapper;
import cn.linst.model.SysPrivilege;
import org.apache.ibatis.session.SqlSession;
import org.junit.Assert;
import org.junit.Test;

public class PrivilegeMapperTest extends BaseMapperTest {

    @Test
    public void testSelectById() {
        //获取 sqlSession
        SqlSession sqlSession = getSqlSession();
        try {
            //获取 PrivilegeMapper
            PrivilegeMapper privilegeMapper = sqlSession.getMapper(PrivilegeMapper.class) ;
            //调用 selectById 方法,查询 id = 1 的权限
            SysPrivilege privilege = privilegeMapper.selectById(1l);
            //privilege 不为空
            Assert.assertNotNull(privilege);
            //privilegeName = 用户管理
            Assert.assertEquals("用户管理", privilege.getPrivilegeName()) ;
        } finally {
            //不要忘记关闭 sqlSession
            sqlSession.close();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一个开源的持久层框架,它可以帮助开发人员简化数据库操作。如果你想学习MyBatis,下面是一个学习路线的建议: 1. 数据库基础:在学习MyBatis之前,建议先掌握数据库的基本概念和SQL语言。了解关系型数据库的原理、表设计和常用的SQL语句会对学习MyBatis有很大帮助。 2. MyBatis入门:开始学习MyBatis之前,可以先了解一下MyBatis的基本概念和核心特性。阅读官方文档或者参考一些入门教程可以帮助你快速上手。 3. 配置文件:学习如何配置MyBatis的核心配置文件,包括数据源、映射文件、类型处理器等。了解不同配置项的作用和常用配置方式。 4. 映射文件:深入学习MyBatis的映射文件,了解如何使用SQL语句进行数据库操作,并学习动态SQL的使用技巧。掌握映射文件中各种标签的含义和用法。 5. 注解方式:学习使用注解方式来配置和使用MyBatis。了解常用的注解和使用方式,与映射文件相比,注解方式更加简洁和灵活。 6. 缓存机制:了解MyBatis的缓存机制,包括一级缓存和二级缓存的原理和使用方式。了解如何配置和优化缓存,提高系统的性能。 7. 整合框架:学习如何将MyBatis与其他框架进行整合,如Spring和Spring Boot。掌握整合的配置方式和常见问题的解决方法。 8. 实践项目:通过实践项目来巩固所学的知识,可以自己动手搭建一个简单的Web应用或者实现一些常见的数据库操作。在实践中不断提升自己的技能。 以上是一个大致的学习路线,你可以根据自己的实际情况和学习进度进行调整。希望对你有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值