Mybatis的基本配置以及简单使用

Mybatis的基本配置以及使用

mybatis是什么?

mybatis是优秀的Java持久层框架,支持定制SQL和存储过程存储过程以及高级映射,可以通过xml配置或者注解方式来进行映射原始类型接口和java pojo(简单的Java对象 仅用来进行数据的传递而没有逻辑方法)到数据库中的对象

mybatis的优点

  1. mybatis中使用了dao层来放置持久层代码,将持久层代码与业务逻辑层代码分开,进行了解耦便于了代码的维护
  2. mybatis是半自动化的持久层框架,相比使用JDBC来操作数据库简单了很多几乎避免了所有的JDBC代码
  3. mybatis支持定制化的sql由程序员来编写sql代码,更加的灵活。

mybatis的使用

  1. mybatis资源的获取:mybatis官方网址

  2. 使用maven进行项目的管理我们只需要在pom.xml文件中导入mybatis的依赖座标
    maven依赖座标获取以及jar包下载网站:maven repository
    因为使用maven管理项目因此获取mybatis依赖座标即可 一般下载使用人数较多的版本

    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
    </dependency>
    

1. 使用xml文件方式从数据库查询表中数据

  1. 首先在数据库创建一个数据库表user并且插入数据(要连接数据库别忘了在pom.xml中加入MySQL的依赖座标和单元测试junit依赖座标用于测试)
     	create database mybatis_demo;
    	use mybatis_demo;
    	create table user(
    	                    eno int primary key auto_increment,
    	                    ename varchar(50) not null,
    	                    email varchar(50),
    	                    salary double,
    	                    dno int
    	);
    	insert into user(ename,email,salary,dno)
    	    value('fff','[email protected]',19000,1),
    	    ('ggg','[email protected]',15000,2),
    	    ('hhh','[email protected]',13000,3),
    	    ('jjj','[email protected]',16000,4);
    
  2. 创建一个包名为entiyt的包来存放实体类,实体类成员属性必须要对应表中的字段(因为mybatis要将出数据库中查询出来的数据进行映射到实体类对象中然后返回)
public class User {
   
    
    private int eno;
    private String ename;
    private String email;
    private double salary;
    private int dno;

    public User(){
   
    

    }

    public User(int eno, String ename, String email, double salary, int dno) {
   
    
        this.eno = eno;
        this.ename = ename;
        this.email = email;
        this.salary = salary;
        this.dno = dno;
    }

    public int getEno() {
   
    
        return eno;
    }

    public void setEno(int eno) {
   
    
        this.eno = eno;
    }

    public String getEname() {
   
    
        return ename;
    }

    public void setEname(String ename) {
   
    
        this.ename = ename;
    }

    public String getEmail() {
   
    
        return email;
    }

    public void setEmail(String email) {
   
    
        this.email = email;
    }

    public double getSalary() {
   
    
        return salary;
    }

    public void setSalary(double salary) {
   
    
        this.salary = salary;
    }

    public int getDno() {
   
    
        return dno;
    }

    public void setDno(int dno) {
   
    
        this.dno = dno;
    }

    @Override
    public String toString() {
   
    
        return "User{" +
                "eno=" + eno +
                ", ename='" + ename + '\'' +
                ", email='" + email + '\'' +
                ", salary=" + salary +
                ", dno=" + dno +
                '}';
    }
}
  1. 在源码部分新建一个包,包名叫做dao 用来存放持久层代码
    在dao包下面创建一个接口里面声明操作数据库的方法,接口中的方法不能重载
public interface UserDao {
   
    
//    查询数据库中所有的user
   List<User> queryAllUsers();
}
  1. 在resources目录下编写一个接口的映射文件userDaoMapper.xml(相当于接口UserDao的实现类)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        <!--namespace:对应的是dao层中的接口
                   id:必须与接口中的方法的名称一致
           resultType:方法返回值的类型
           持久层dao接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字
           符串作为 key 值,可唯一定位一个 MapperStatement。在 Mybatis 中,每一个
           <select>、<insert>、<update>、<delete>标签,都会被解析为一个
           MapperStatement 对象
           -->
<mapper namespace="org.xupt.dao.UserDao">
<select id="queryAllUsers" resultType="org.xupt.entity.User">
        select * from mybatis_demo.user;
    </select>
</mapper>
  1. 编写mybatis的配置文件mybatis-config.xml,将mybatis与数据库连接(数据库的配置信息可以抽取出来成一个db.properties文件然后在configuration标签下面使用properties标签引入)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration
       PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
   <environments default="mysql">
       <environment id="mysql">
           <transactionManager type="JDBC"/>
           <dataSource type="POOLED">
               <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
               <property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo?serverTimezone=UTC"/>
               <property name="username" value="root"/>
               <property name="password" value="123456"/>
           </dataSource>
       </environment>
   </environments>
   <mappers>
       <!--mybatis sql映射⽂件的位置-->
       <mapper resource="UserDaoMapper.xml"/>
   </mappers>
</configuration>
  1. 进行测试
	public class test {
   
    
    @Test
    public void testF() throws IOException {
   
    
//        读取mybatis的全局配置文件
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
//        创建sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//         使用sqlSessionFactory生产sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
//        创建代理对象 面向接口编程
        UserDao mapper = sqlSession.getMapper(UserDao.class);
//        使用代理对象 调用接口中的方法
        List<User>res =  mapper.queryAllUsers();
        for (User user:res){
   
    
            System.out.println(user.toString());
        }
    }
}

测试结果:
运行结果
2. 使用注解的方式从数据库查询表中数据
注解方式与xml方式区别:
注解方式不需要xml映射文件 sql语句写在接口中的方法上的注解里
mybatis的配置文件中sql映射要换成接口所在位置




public interface UserDao {
   
    
//    查询数据库中所有的user
   @Select("select * from user")
   List<User> queryAllUsers();
}

修改sql映射位置

    <mappers>
        <!--mybatis sql映射⽂件的位置-->
        <mapper class="org.xupt.dao.UserDao"/>
    </mappers>

测试结果(测试方法和xml方式一样)
测试结果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章