MyBatis筆記(一) 最簡單的select


 

  小白學習MyBatis的第一天,學習資料包括MyBatis3的官方文檔,以及孤傲蒼狼大佬的博客。這里先致敬大佬。

· 首先,什么是MyBatis?

  引用官網的一段話,“MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。”

  MyBatis的一個強大之處在於,“避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集”。舉個栗子,傳統的JDBC在拼接SQL語句的過程中,經常會出現少加空格、多個逗號、多個AND/OR之類的錯誤,不勝其煩;MyBatis的動態SQL中的<if>,<choose>,<where>等語法很好的解決了這一問題。這段在后面動態SQL部分細說。

  好了,閑話少說,進入正題。

· 建立Java項目,導入Jar包

  首先展示一下工程目錄。在classpath目錄下,建立一個lib文件夾,導入以下三個jar包

  

  mybatis-3.4.6.jar即是MyBatis的jar包,要使用MyBatis, 只需將mybatis-x.x.x.jar文件置於 classpath 中即可;

  mysql-connector-java即數據庫驅動;

  log4j用於顯示日志,可以在調試過程中打印出SQL語句,便於學習。

  【挖個坑:log4j的jar包和log4j.properties共同用於輸出日志,至於原理……我也沒搞懂】

——————————————————————————————————————————————————————————

  數據庫方面,建立一張user表,插入張三和李四兩個用戶。

  

· 先實現一個最簡單的查詢

  先看一眼工程目錄,建立如下的文件:

  

  目前src下需要bean,dao,config和util四個包,分別存放JavaBean,配置文件,客戶端代碼(使用MyBatis執行各種操作),以及工具類(封裝了獲取SqlSession的方法)。

  首先在src下的config文件下,寫一個總的配置文件MyBatisConfiguration.xml。

<?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="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="UNPOOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="Danny2036"/>
      </dataSource>
    </environment>
  </environments>

</configuration>

  這里先只需要環境配置,即environments中的driver,url,username和password四項。

  driver為驅動,在mysql-connector-java 5中,值為"com.mysql.jdbc.Driver"; mysql-connector-java 6中,值為"com.mysql.cj.jdbc.Driver"。其他項包括url,username,password,根據自己的數據庫進行配置。

  在bean目錄下建立JavaBean。(這里先不要管那個UID)

package com.alleymeowy.bean;

import java.io.Serializable;

public class User implements Serializable {
    
    private static final long serialVersionUID = 3305858088000394142L;
    private Integer id;
    private String name;
    private Integer age;

    // 快速生成構造函數 toString方法 以及get&set方法的快捷鍵  alt+insert
    public User() {
    }

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public User(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age='" + 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 Integer getage() {
        return age;
    }

    public void setage(Integer age) {
        this.age = age;
    }
}

  在util包里添加一個獲取SqlSession的方法。

package com.alleymeowy.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;

public class DBUtil {

    public static SqlSession getSqlSession() throws IOException {

        // 1.reader
        Reader reader = Resources.getResourceAsReader("com/alleymeowy/config/MyBatisConfiguration.xml");
        // 2.SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // 3.SqlSession
        return sqlSessionFactory.openSession();

    }
}

  在config包下建一個sql包,添加Users.xml文件,實現selectOne和selectAll方法。

<?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" >
<mapper namespace="com.alleymeowy.config.sql.Users">

  <select id="selectOne" parameterType="int" resultType="com.alleymeowy.bean.User">
    select id, name, age from user where id = #{id}
  </select>

  <select id="selectAll" resultType="com.alleymeowy.bean.User">
    select id, name, age from user
  </select>

</mapper>

  【注意:這里需要在總配置文件里加上mappers的聲明,放在<environments>標簽之后。總配置文件的標簽需要按順序擺放,詳見官方文檔。】

 <mappers>
    <mapper resource="com/alleymeowy/config/sql/Users.xml"/>
    <!--<mapper class="com.alleymeowy.annotation.UserMapper"/>-->
    <!--<mapper class="com.alleymeowy.mapper.BlogMapper"/>-->
  </mappers>

  在dao包里寫一個實現類。先實現一個最簡單的selectOne和selectAll方法。

package com.alleymeowy.dao;

import com.alleymeowy.bean.User;
import com.alleymeowy.util.DBUtil;
import org.apache.ibatis.session.SqlSession;

import java.io.IOException;
import java.util.List;

public class UserDAO {

    /**
     * 根據id查詢一條記錄
     * @param id
     * @throws IOException
     */
    public static User selectOne(int id) throws IOException {

        SqlSession sqlSession = null;
        User user;
        try {
            sqlSession = DBUtil.getSqlSession();
            user = sqlSession.selectOne("com.alleymeowy.config.sql.Users.selectOne", id);
        } finally {
            sqlSession.close();
        }
        return user;

    }

    /**
     * 查詢多條記錄
     * @throws IOException
     */
    public static List<User> selectAll() throws IOException {

        SqlSession sqlSession = null;
        List<User> users;
        try {
            sqlSession = DBUtil.getSqlSession();
            users = sqlSession.selectList("com.alleymeowy.config.sql.Users.selectAll");
        } finally {
            sqlSession.close();
        }
        return users;

    }
    
    public static void main(String[] args) throws IOException {

        System.out.println(selectOne(1));
        System.out.println("************");
        System.out.println(selectAll());
    }
}

  最后給出查詢結果(只給出查詢結果,不顯示日志等)

User{id=1, name='Zhang3', age='10'}
************[User{id=1, name='Zhang3', age='10'}, User{id=2, name='Li4', age='20'}, User{id=3, name='erha', age='10'}, User{id=4, name='NotUser', age='21'}, User{id=5, name='NotUser2', age='22'}]

Process finished with exit code 0

  完畢。

 

  

  

 

  

 

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM