条条|MyBatis学习笔记2——第一个MyBatis程序

2.1使用MyBatis

我们在使用和学习MyBatis时最好去下载官方的文件,里面包含了所需要的依赖和官方文档https://github.com/mybatis/mybatis-3/releases

我在这里放出官方的中文网站,里面都是关于MyBatis的使用介绍:https://mybatis.org/mybatis-3/zh/getting-started.html

2.1.1具体步骤:
  1. 在数据库建好目标表
  2. 在idea(pom文件)加入maven的mybatis坐标,mysql驱动坐标
    
    
      org.mybatis
      mybatis
      3.5.1
    
    
    
      mysql
      mysql-connector-java
      5.1.9
    
    
  1. 创建实体类(保存表中一行数据)

    public class Student {//推荐和表名一致,方便记忆
        //定义属性,和列名一致
    
        private Integer id;
        private String name;
        private String email;
        private int age;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "student{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", email='" + email + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
  2. 创建持久层的dao接口,定义操作数据库的方法

    import java.util.List;
    
    //接口,操作student表
    public interface StudentDao {
    
    public List selectStudents();//查询student表的所有数据
    }
    
  3. 创建mybatis使用的配置文件(sql映射文件,是个xml文件)
    用于写sql语句,一般一个表一个sql映射文件;文件名和目标接口同名且位于同一个目录下
    id:是该sql语句的唯一表示,mybatis会根据这个id来找到对应的sql语句可自定义,但最好是和接口中的方法保持一致
    resultType:表示结果类型,是sql语句执行后得到的ResultSet,遍历这个ResultSet得到的java对象类型
    操作标签:要什么操作,就把对应的sql语句放到下面对应的标签中要填类型的全限定名称 select id,name,email,age from student order by id

    我们要确保src/main/resources下的主配置文件在target/classes/com下也有,所以我们在pom中加入以下代码,这样主配置文件在编译时就会被copy到target目录下了
    
    
      
        src/main/java
        
          **/*.properties
          **/*.xml
        
        false
      
    
    
    

    然后在idea右侧的maven/项目名/Lifecycle点击compile,这样项目会进行编译,编译完后我们就可以看到多出个target文件

  4. 创建mybatis的主配置文件(放在resource目录下,名称自定义)
    提供了数据库的连接信息和sql映射文件的位置信息,一个项目一个主配置文件

    各个标签的功能和用法在下面都有说明
    
    
    
    
    
    
    
        
        
    
            
            
    
            
            
                
                
                
                
            
        
    
    
    
        
        
    
      
    
    
  5. 创建使用mybatis类
    通过mybatis访问数据库

    注意getResourceAsStream()要选择InputStream类的
    public class MyApp {
    public static void main(String[] args) throws IOException {
        //访问mybatis获取student数据
        //1.定义mybatis主配置文件的名称,从类路径的根开始(target/class)
        String con="mybatis.xml";
        //2.读取上面的con文件
        InputStream in = Resources.getResourceAsStream(con);
        //3.创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        //4.创建SqlSessionFactory对象
        SqlSessionFactory factory = builder.build(in);
        //5.从SqlSessionFactory中获取和创建SqlSession对象
        SqlSession sqlSession = factory.openSession();
        //6.执行目标sql语句标识;sql映射文件中的namespace + "." + 标签id
        String sqlId="com.mybatis.dao.StudentDao"+"."+"selectStudents";
        //7.执行sql语句,通过sqlId找到语句
        List studentList = sqlSession.selectList(sqlId);
        //8.输出结果
        for (Student student : studentList){
            System.out.println(student);
        }
        //9.关闭SqlSession对象
        sqlSession.close();
            }
     }
    

    进行insert操作的代码:

    public class Test01 {
    @Test
    public void t1() throws IOException {
        //访问mybatis获取student数据
        //1.定义mybatis主配置文件的名称,从类路径的根开始(target/class)
        String con="mybatis.xml";
        //2.读取上面的con文件
        InputStream in = Resources.getResourceAsStream(con);
        //3.创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        //4.创建SqlSessionFactory对象
        SqlSessionFactory factory = builder.build(in);
        //5.从SqlSessionFactory中获取和创建SqlSession对象
        SqlSession sqlSession = factory.openSession();
        //6.执行目标sql语句标识;sql映射文件中的namespace + "." + 标签id
        String sqlId="com.mybatis.dao.StudentDao.insertStudent";
        //7.执行sql语句,通过sqlId找到语句
        Student student=new Student();
        student.setId(1006);
        student.setName("中文");
        student.setEmail("[email protected]");
        student.setAge(6);
        int nums = sqlSession.insert(sqlId, student);
    
        //MyBatis默认不提供事务提交,当我们进行insert、update和delete操作后要手动提交事务
        sqlSession.commit();
        //8.输出结果
        System.out.println("插入所影响的行数="+nums);
        //9.关闭SqlSession对象
        sqlSession.close();
        }
    }
    
2.1.2连接MyBatis类介绍
  • Resources:负责读取主配置文件
  • SqlSessionFactoryBuilder:创建SqlSessionFactory对象
  • SqlSessionFactory:重量级对象,该对象的创建耗时耗资源较多,一个项目中有一个就够了
    SqlSessionFactory是一个接口,实现类为DefaultSqlSessionFactory
    作用是获取SqlSession对象
    openSession():参数默认是false,获取的是非自动提交事务的SqlSession对象;
  • SqlSession:定义了操作数据的方法 例如 selectOne()selectList()insert()update()delete()commit()rollback()
    使用要求: SqlSession对象不是线程安全的,需要在方法内部使用
    在执行sql语句之前,使用openSession()获取SqlSession对象
    在执行完sql语句后,需要关闭它,执行SqlSession.close()
    这样能保证他的使用是线程安全的
注:如果我们插入数据后,发现数据库显示的新的数据的中文都是问号的话,一个要检查idea本身的编码是否都是utf-8,一个检查数据库的创建是否是utf-8

如果以上都没问题,我们可以在主配置文件中的后加入?useUnicode=true&characterEncoding=UTF-8

条条:该学习笔记是记录了我的学习过程,学习自动力节点和c语言中文网,有不对的地方欢迎指出

你可能感兴趣的:(条条|MyBatis学习笔记2——第一个MyBatis程序)