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方式一樣)
測試結果

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