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

Mybatis入门案例详细演示

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

Mybatis入门案例详细演示

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。mybatis是一个优秀的基于java的持久层框架,设计目的就是让我们对执行SQL语句时对输入输出的数据管理更加方便。

1.首先在数据库中创建自己所需要的表并添加数据

CREATE TABLE `user` (
`id` INT(20) NOT NULL PRIMARY KEY,
`name` VARCHAr(30) DEFAULT NULL,
`pwd` VARCHAr(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `user`(`id`,`name`,`pwd`) VALUE(1,'zhangsan','l23');
INSERT INTO `user`(`id`,`name`,`pwd`) VALUE(2,'lisi','l23');
INSERT INTO `user`(`id`,`name`,`pwd`) VALUE(3,'wangwu','l23');

SELECt `id`,`name`,`pwd` FROM `user`;

CREATE TABLE `teacher`(
    `id` INT(10) NOT NULL,
    `name` VARCHAr(30) DEFAULT NULL,
    PRIMARY KEY (`id`)
  ) ENGINE=INNODB DEFAULT CHARSET=utf8; 
  
 INSERT INTO teacher(`id`,`name`) VALUE (1,'老师');


CREATE TABLE `student` (
`id` INT(10) NOT NULL,
`name` VARCHAr(30) DEFAULT NULL,
`tid` INT(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fktid` (`tid`),
ConSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

INSERT INTO `student` (`id`,`name`,`tid`) VALUES('1','xiaohong','1');
INSERT INTO `student` (`id`,`name`,`tid`) VALUES('2','xiaoming','1');
INSERT INTO `student` (`id`,`name`,`tid`) VALUES('3','xiaozhang','1');
INSERT INTO `student` (`id`,`name`,`tid`) VALUES('4','xiaoli','1');
INSERT INTO `student` (`id`,`name`,`tid`) VALUES('5','xiaowang','1');

SELECt * FROM student

CREATE TABLE `blog` (
`id` VARCHAr(50) NOT NULL COMMENT '博客id',
`title` VARCHAr(100) NOT NULL COMMENT '博客标题',
`author` VARCHAr(30) NOT NULL COMMENT '博客作者',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`views` INT(30) NOT NULL COMMENT '浏览量'
)ENGINE=INNODB DEFAULT CHARSET=utf8


2.创建一个maven项目,并在pom.xml导入所需要的架包



    
        mysql
        mysql-connector-java
        5.1.46
    
   
    
        org.mybatis
        mybatis
        3.5.2
    

     
    
        log4j
        log4j
        1.2.17
    

    
    
        junit
        junit
        4.12
    

    
    
        org.mybatis.caches
        mybatis-ehcache
        1.2.1
    
    
    
        org.projectlombok
        lombok
        1.18.12
    




    
        
            src/main/resources
            
                ***.xml
            
            false
        
        
            src/main/java
            
                ***.xml
            
            false
        
    

3.创建创建核心配置文件,外部配置文件,工具类

mybatis-config.xml






    
    

    
        
        
        
        
        
        
    

    
   
       
   

    
    
        
            
            
            
                
                
                
                
            
        
    
    
    

        


        
        
        
        

    

dp.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/demo?useSSl=true;useUnicode=true;characterEncoding=UTF-8
name=root
password=root
MybatisUtils
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {

        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlSession(){
    //平常只要对数据库数据有修改需要我们去commit提交事务,在这加上true就需要我们手动提交
        return sqlSessionFactory.openSession(true);
    }
}

4.创建我们对应的实体类及实体类的Mapper文件,及Mapper.xml文件

User实体类

//@Data通过lombok插件实现(里面主要是get,set,tostring方法等:建议还是写方法不要通过注释来实现)
@Data
@AllArgsConstructor  //实现有参构造方法
@NoArgsConstructor  //实现无参构造方法
public class User {

    private int id;
    private String name;
    private String pwd;
}

UserMapper接口

public interface UserMapper {
    //查询所有
    List getUserAll();
    //根据id查询
    User getUserId(int id);
    //模糊查询
    List getUserLike(String values);
    //添加
    int getUserInsert(User user);
    //修改
    int getUserUpdate(User user);
    //删除
    int getUserDelete(int id);
    //万能的Map(用添加的来演示)
    int getUserMap(Map map);


    //为一级缓存和二级缓存演示,看完之后再看这个
    User getUserByIdCache(@Param("id") int id);

    int getUserUpdateCache(User user);
}

UserMapper.xml文件








    
        select * from user where id=#{id}
    


    
        select * from user where id=#{id}
    
    
        update user set name=#{name},pwd=#{pwd} where id=#{id}
    


5.测试(创建一个Test类用来测试)

MybatisTest

/测试查询所有

//测试根据id查询

//测试模糊查询

//测试添加

//测试修改

//测试删除

//万能的Map

    @Test
    public void TestAll(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List userAll = mapper.getUserAll();
        for (User user : userAll) {
            System.out.println(user);
        }
        sqlSession.close();

    }

    @Test
    public void TestId(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User userId = mapper.getUserId(1);
        System.out.println(userId);
        sqlSession.close();
    }
    @Test
    public void TestUserLike(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List userLike = mapper.getUserLike("姜");
        for (User user : userLike) {
            System.out.println(user);
        }

        sqlSession.close();
    }
    @Test
    public void TestInsert(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = new User();
        user.setId(5);
        user.setName("admin");
        user.setPwd("123456");
        int userInsert = mapper.getUserInsert(user);
       if (userInsert>0){
           System.out.println("更新成功");
       }

        sqlSession.close();
    }
    @Test
    public void TestUpdate(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int userUpdate = mapper.getUserUpdate(new User(5, "jw", "jy"));
        if (userUpdate>0){
            System.out.println("更新成功");
        }
        sqlSession.close();
    }
    @Test
    public void TestDelete(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int userDelete = mapper.getUserDelete(5);
        if (userDelete>0){
            System.out.println("删除成功");
        }
        sqlSession.close();
    }
    @Test
    public void TestMap(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        HashMap map = new HashMap<>();
        map.put("uid",5);
        map.put("uname","jw");
        map.put("pwd","jy");
        int userMap = mapper.getUserMap(map);
        if (userMap>0){
            System.out.println("插入成功");
        }
        sqlSession.close();
    }

6.创建Student,Teacher两个实体类(用于一对多和多对一演示)

Student   Teacher

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private int id;
    private String name;
    //多对一
    private Teacher teacher;
    
    
    //一对多
    private int tid;
}

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
    private int id;
    private String name;

    //一对多
    private List students;

}

7.创建StudentMapper,TeacherMapper接口

StudentMapper
public interface StudentMapper {
     //一对多查询所有
     List getStudentName();
}

TeacherMapper

public interface TeacherMapper {

    //一对多
    Teacher getTeacherStudent(int id);
}

8.创建编写StrudentMapper.xml,TeacherMapper.xml文件

StrudentMapper.xml




    
    
    
        select t.id tid,t.name tname,s.id sid,s.name sname  from teacher t,student s where t.id=s.tid and t.id=#{tid}
    

    
    
        
        
        
            
            
            
        
    

9.测试

//测试多个学生对一个老师
@Test
public void TestStudentTeacher(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
    List studentName = mapper.getStudentName();
    for (Student student : studentName) {
        System.out.println(student);
    }
    sqlSession.close();
}
//测试一个老师对应多个学生
@Test
public  void TestTeacherStudent(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
    Teacher teacherStudent = mapper.getTeacherStudent(1);
    System.out.println(teacherStudent);

    sqlSession.close();
}

10.动态sql演示

创建一个Blog实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Blog {
    //改实体类主要用于动态sql演示
    private String id;
    private String title;
    private String author;
    private Date createTime;
    private int views;

}

11.创建对应的BlogMapper接口及BlogMapper.xml文件

BlogMapper

public interface BlogMapper {

    //添加
    int getAddBlog(Blog blog);
    //查询用动态sql的if
    List getBlogIf(Map map);
    //查询用动态sql的Choose
    List getBlogChoose(Map map);
    //更新
    int getBlogUpdate(Map map);
    //查询用动态sql的Foreach
    List getBlogForeach(Map map);

}

BlogMapper.xml






    
        insert into blog (id,title,author,create_time,views)
        values(#{id},#{title},#{author},#{createTime},#{views});
    


    
        
            and  title = #{title}
        
        
            and author =#{author}
        
    

    
        select * from blog
        
            
                
                    title = #{title}
                
                
                    and author=#{author}
                
                
                    views=#{views}
                
            
        
    

    
        update blog
        
            
                title=#{title},
            
            
                author=#{author}
            
            where id=#{id}
        
    

    
    
        select * from blog
        
            
                id=#{id}
            
        
    

12.创建IDutils工具类(主要是随机产生一个id,也可以不用使用,直接设置id)

IDutils

public class IDutils {
    //产生一个随机数
    public  static  String getId(){

        return UUID.randomUUID().toString().replaceAll("-","");
    }
    //测试随机数是否产生
    @Test
    public void test(){

        System.out.println(IDutils.getId());
    }
}

13.测试

 //动态sql测试演示
    @Test
    public void addInitBlog(){
        SqlSession session = MybatisUtils.getSqlSession();
        BlogMapper mapper = session.getMapper(BlogMapper.class);
        //IDutils.getId()利用IDutils工具类调用getId方法产生一个随机id
        Blog blog = new Blog();
        blog.setId(IDutils.getId());
        blog.setTitle("Mybatis好简单");
        blog.setAuthor("jw说");
        blog.setCreateTime(new Date());
        blog.setViews(9999);
        mapper.getAddBlog(blog);


        blog.setId(IDutils.getId());
        blog.setTitle("Java好简单");
        mapper.getAddBlog(blog);

        blog.setId(IDutils.getId());
        blog.setTitle("Spring好简单");
        mapper.getAddBlog(blog);

        blog.setId(IDutils.getId());
        blog.setTitle("SpringBoot好简单");
        mapper.getAddBlog(blog);

        session.close();
    }

    @Test
    public void testIf(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
        HashMap map = new HashMap();
//      map.put("title","java好此简单");
        map.put("author","jw说");
        List blogs = mapper.getBlogIf(map);
        for (Blog blog : blogs) {
            System.out.println(blog);
        }

        sqlSession.close();
    }
    @Test
    public void  testChoose(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
        HashMap map = new HashMap();
        map.put("views",9999);
        List blogs = mapper.getBlogChoose(map);
        for (Blog blog : blogs) {
            System.out.println(blog);
        }
        sqlSession.close();

    }
    @Test
    public void testUpdate(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
        HashMap map = new HashMap();
        map.put("id","9621c42c1d2f4f3cbf1b3a0d47bb2dbb");
        map.put("title","Java好简单");
        map.put("author","jw");
        mapper.getBlogUpdate(map);
        sqlSession.close();
    }
    @Test
    public void testForeach(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
        HashMap map = new HashMap();
        ArrayList list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);

        map.put("list",list);

        List blogForeach = mapper.getBlogForeach(map);
        for (Blog foreach : blogForeach) {
            System.out.println(foreach);
        }
        sqlSession.close();
    }

14.一级缓存二级缓存(一级缓存一般默认开启·)

一级缓存:它指的是Mybatis中sqlSession对象的缓存,当我们执行查询以后,查询的结果会同时存入到SqlSession为我们提供的一块区域中,该区域的结构是一个Map,当我们再次查询同样的数据,mybatis会先去sqlsession中查询是否有,的话直接拿出来用,当SqlSession对象消失时,mybatis的一级缓存也就消失了,同时一级缓存是SqlSession范围的缓存,当调用SqlSession的修改、添加、删除、commit(),close等方法时,就会清空一级缓存。
二级缓存:他指得是Mybatis中SqlSessionFactory对象的缓存,由同一个SqlSessionFactory对象创建的SqlSession共享其缓存,但是其中缓存的是数据而不是对象,所以从二级缓存再次查询出得结果的对象与第一次存入的对象是不一样的。

在mybatis-config.xml文件中(往上看我的mybatis-config.xml文件里面这个,主要为二级缓存准备)


    
    

在UserMapper,UserMapper.xml 分别添加

//为一级缓存和二级缓存演示
User getUserByIdCache(@Param("id") int id);

int getUserUpdateCache(User user);
    
    
    
        update user set name=#{name},pwd=#{pwd} where id=#{id}
    

15.测试演示

//为一级缓存和二级缓存演示

@Test
public void testUserCacheId(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User userById = mapper.getUserByIdCache(1);
    System.out.println(userById);
    mapper.getUserUpdateCache(new User(2,"aaaa","sssss"));

    sqlSession.clearCache();//手动清理缓存
    System.out.println("========================================");
    User userById2 = mapper.getUserByIdCache(1);
    System.out.println(userById2);
    
    System.out.println(userById==userById2);
    sqlSession.close();
}
@Test
public void testUserCache(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    User userById = mapper.getUserByIdCache(1);
    System.out.println(userById);
    sqlSession.close();
    System.out.println("========================================");
    SqlSession sqlSession2 = MybatisUtils.getSqlSession();
    UserMapper mapper2 = sqlSession2.getMapper(UserMapper.class);
    User userById2 = mapper2.getUserByIdCache(1);
    System.out.println(userById2);

    System.out.println(userById==userById2);
    sqlSession2.close();
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458509.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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