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

Mybatis

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

Mybatis

mybatis官方文档

什么是Mybatis

Mybatis是常说的SSM框架中的M,它是一款持久层框架。Mybatis支持自定义SQl,存储过程和高级映射,免除了大量的JDBC代码操作。其主要是通过简单的xml文件或注解来配置和映射原始类型、接口和Java pojo中的对象

Mybatis框架基本代码 1.导入Mybatis(Maven)

   org.mybatis
   mybatis
   3.5.2

2.构建一个MybatisUtil.java
public class MybatisUtil {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
    		//读取核心配置文件
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            //通过SqlSessionFactoryBuilder构建SqlSessionFactory对象
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSession(){
    	//通过SqlSessionFactory对象创建SqlSession对象
        return sqlSessionFactory.openSession(true);
    }
}
2. 创建Mybatis-config.xml(核心配置文件)

一些常用的设置(smbms_项目),具体的可参照Mybatis中文文档进行设置




    
    
    
        
        
        
        
    
    
        
        
        
        
        
        
    
    
    
        
            
            
                
                
                
                
            
        
    
    
    
        
        
        
        
    

3.写自己的pojo类

注:为了使用写pojo类更加简洁,可以使用lombok插件,用注解实现setter/getter方法和构造方法等等.
步骤:

  1. 下载lombok插件
  2. 导入lombok的maven依赖

        
            org.projectlombok
            lombok
            1.18.24
            provided
        
  1. 在pojo类上使用注解开发
//加上空参构造,getter/setter方法,重写toString(),hashcode()和equals()
@Data
//加上全参构造
@AllArgsConstructor
//由于上一个注解加上了全参构造给空参构造弄没了,所以需要再加上空参构造
@NoArgsConstructor
public class User {
    private Integer id;
    private String userCode;
    private String userName;
    private String userPassword;
    private Integer gender;
    private Date birthday;
    private String phone;
    private String address;
    private Integer userRole;
    private Integer createdBy;
    private Date creationDate;
    private Date modifyDate;
    private Integer modifyBy;
}
4.写pojo类对应的接口

没啥需要注意的,唯一一点就是在传参的时候可以使用注解@Param(“XXX”),如果有多个的话,等会就不需要在.xml对应的方法中写parameterType

public interface UserMapper {
    //通过UserCode获取USer
    User getLoginUser(@Param("userCode") String userCode) ;
    //增加用户信息
    int addUser(User user);
    //通过条件查询UserList
    List getUserList(@Param("userName") String userName, @Param("userRole") Integer userRole, @Param("from") Integer currentPageNo, @Param("pageSize") Integer pageSize);
    //通过条件查询--用户表记录数
    int getUserCount(@Param("userName") String userName,@Param("userRole") Integer userRole);
    //通过UserID删除User
    int deleteUserId(@Param("id") Integer id);
    //通过UserID获取user
    User getUserID(@Param("id") Integer id);
    //修改用户信息
    int modifyUser(User user);
    //修改当前用户的密码
    int updatePwd(@Param("id")Integer id,@Param("userPassword") String pwd);
}

注:一些简单的sql语句也可以使用注解开发,即将查询语句直接通过注解写在接口方法的上方就可

5.写接口对应的.xml文件(接口和xml尽量在同一个包下,且名字同名)–>核心

注意:

  • 一个接口对应一个.xml,同时需要在namespace中与其接口对应上
  • 每一个.xml都需要在核心配置文件中进行mapper
  • 写返回值是int或者参数是int时应该写成_int(别名),Integer对应的是int(别名)
  • 比较重要的是要会写sql,其他的应该没有什么问题



    
    
        select * from smbms.smbms_user
        
            
                userName=#{userName}
            
            
                and userRole=#{userRole}
            
        
        limit #{from},#{pageSize}
    
    
    
        select * from smbms.smbms_user where id=#{id}
    
    
    
        update smbms.smbms_user
        
            userName=#{userName},
            gender=#{gender},
            birthday=#{birthday},
            phone=#{phone},
            address=#{address}
        
        where id=#{id}
    
    
    
        update smbms.smbms_user
        set userPassword=#{userPassword}
        where id=#{id}
    

6.测试

步骤:

  • 获取SqlSession对象
  • 获取mapper
  • 调用mapper的方法
  • 关闭SqlSession对象
public class TestUser {
    @Test
    //通过UserCode查询用户
     public void userTest01(){
        SqlSession sqlSession= MybatisUtil.getSession();
        UserMapper mapper=sqlSession.getMapper(UserMapper.class);
        User user=mapper.getLoginUser("admin");
        System.out.println(user);
        sqlSession.close();
    }
    @Test
    //添加用户
    public void userTest02(){
        SqlSession sqlSession= MybatisUtil.getSession();
        UserMapper mapper=sqlSession.getMapper(UserMapper.class);
        User user=new User();
        user.setId(19);
        user.setUserCode("xiaoliu");
        user.setUserName("小刘");
        user.setAddress("长安");
        user.setBirthday(new Date());
        user.setUserRole(3);
        user.setUserPassword("1234567");
        user.setGender(1);
        user.setPhone("135123456789");
        int i=mapper.addUser(user);
        if(i>0){
            System.out.println("插入成功");
        }
        sqlSession.close();
    }
    @Test
    //查询指定条件的用户
    public void userTest03(){
        SqlSession sqlSession= MybatisUtil.getSession();
        UserMapper mapper=sqlSession.getMapper(UserMapper.class);
        List users=mapper.getUserList(null,3,0,5);
        for (User user : users) {
            System.out.println(user);
        }
        sqlSession.close();
    }
    @Test
    //查询指定条件的用户个数
    public void userTest04(){
        SqlSession sqlSession= MybatisUtil.getSession();
        UserMapper mapper=sqlSession.getMapper(UserMapper.class);
        int count= mapper.getUserCount("小刘",null);
        System.out.println(count);
        sqlSession.close();
    }
    @Test
    //按照用户ID删除用户
    public void userTest05(){
        SqlSession sqlSession= MybatisUtil.getSession();
        UserMapper mapper=sqlSession.getMapper(UserMapper.class);
        int i=mapper.deleteUserId(99);
        if(i>0){
            System.out.println("删除成功");
        }
        sqlSession.close();
    }
    @Test
    //按照用户ID查找用户
    public void userTest06(){
        SqlSession sqlSession= MybatisUtil.getSession();
        UserMapper mapper=sqlSession.getMapper(UserMapper.class);
        User user=mapper.getUserID(10);
        System.out.println(user);
        sqlSession.close();
    }
    @Test
    //修改用户
    public void userTest07(){
        SqlSession sqlSession= MybatisUtil.getSession();
        UserMapper mapper=sqlSession.getMapper(UserMapper.class);
        User user=new User();
        user.setId(1);
        user.setUserName("孙悟空");
        user.setGender(1);
        user.setBirthday(new Date());
        user.setPhone("136123456789");
        user.setAddress("北京市西城区");
        int i=mapper.modifyUser(user);
        if(i>0){
            System.out.println("修改成功");
        }
        sqlSession.close();
    }
    @Test
    //修改用户密码
    public void userTest08(){
        SqlSession sqlSession= MybatisUtil.getSession();
        UserMapper mapper=sqlSession.getMapper(UserMapper.class);
        int i=mapper.updatePwd(1,"0000000");
        if(i>0){
            System.out.println("修改成功");
        }
        sqlSession.close();
    }
}

动态sql

根据Mybatis文档了解一些标签的使用即可

缓存

mybatis缓存主要包括

  • 一级缓存
    在sqlSession中有用,当sqlSession关闭的时候缓存就释放

  • 二级缓存
    比一级缓存的作用域高,缓存在一个namespace中有效,当对应的一级缓存关闭(即会话关闭),一级缓存的数据就保存在了二级缓存

查找步骤:

  • 先到二级缓存中找
  • 二级缓存没有到一级缓存找
  • 一级缓存没有到数据库中找
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839550.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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