1. 程式人生 > >用JavaSE簡單入門MyBatis連線MySQL…

用JavaSE簡單入門MyBatis連線MySQL…

在Netbeans中新建一個  Java——Java應用程式  專案,其目錄結構如下: 用JavaSE簡單入門MyBatis連線MySQL,使用Netbeans並配置成功

需要準備和下載的jar庫: 2、mysql-connector-java-5.1.39-bin.jar(安裝MySQL的時候,勾選安裝Connector.J後會附帶有,在MySQL       安裝目錄/Connector.J 5.1  裡面) 新增好庫後,就可以開始幹活了。 首先得在MySQL裡面建立資料庫和表格: 檔案student.sql——不過這個檔案並不參與MyBatis。我單獨登入MySQL Client然後在命令列輸入SQL語句建立的表格
CREATE DATABASE STUDENT_MANAGER; USE STUDENT_MANAGER; CREATE TABLE STUDENT_TBL
(    STUDENT_ID         VARCHAR(255) PRIMARY KEY,    STUDENT_NAME       VARCHAR(10) NOT NULL,    STUDENT_SEX        VARCHAR(10),    STUDENT_BIRTHDAY   DATE,    CLASS_ID           VARCHAR(255) ); INSERT INTO STUDENT_TBL (STUDENT_ID,                          STUDENT_NAME,                          STUDENT_SEX,
                         STUDENT_BIRTHDAY,                          CLASS_ID)   VALUES   (123456,             '某某某',             '女',             '1980-08-01',             121546             )
建立完後資料庫裡面的內容,用MySQL Workbench檢視: 用JavaSE簡單入門MyBatis連線MySQL,使用Netbeans並配置成功

然後我們開始編寫類: 首先,我們把這個STUDENT_TBL表的表頭編寫成一個POJO類(只含有成員變數,setter和getter的簡單Java物件“Plain Ordinary Java Object”) 檔案StudentEntity.Java
package mybatishelloworld; import java.io.Serializable; import java.util.Date; public class StudentEntity implements Serializable { private static final long serialVersionUID = 3096154202413606831L; private Date studentBirthday; private String studentID; private String studentName; private String studentSex; public Date getStudentBirthday() { return studentBirthday; } public String getStudentID() { return studentID; } public String getStudentName() { return studentName; } public String getStudentSex() { return studentSex; }         // Setter …… …… …… …… public void setStudentBirthday(Date studentBirthday) { this.studentBirthday = studentBirthday; } public void setStudentID(String studentID) { this.studentID = studentID; } public void setStudentName(String studentName) { this.studentName = studentName; } public void setStudentSex(String studentSex) { this.studentSex = studentSex; }         public void println(){             System.out.print(this.studentID+" ");             System.out.print(this.studentName+" ");             System.out.print(this.studentSex+" ");             System.out.println(this.studentBirthday);         } }
其實為了方便演示,這個Java類並不純粹,而是添加了個println方法便於列印SQL後的結果 接著我們建立一個Mapper介面——於是,我們為什麼需要一個對映(Mapper)介面呢? 原因我們看看程式碼就懂了: 檔案StudentMapper.java
package mybatishelloworld;
import java.util.List;
public interface StudentMapper {
public StudentEntity getStudent(String studentID); public StudentEntity getStudentAndClass(String studentID); public List getStudentAll(); public void insertStudent(StudentEntity entity); public void deleteStudent(StudentEntity entity); public void updateStudent(StudentEntity entity); }
我們發現,這個接口裡面都是方法名。按照常規的Java思維,要真正用介面,必須有方法的實現才行: public class StudentMapperImpl implements StudentMapper{     @Override     public StudentEntity getStudent(String studentID) { StudentEntity se=SQL.get(studentID);   //那個頭疼啊,還像JDBC一樣把SQL語句寫到字串裡面?     }     …………………… } 但是!但是的但是!這個具體的實現,在Mybatis裡面,不需要我們寫Java了。你可以把怎麼用SQL語句get這個StudentEntity,寫到一個xml檔案裡面。所以,這個介面Interface,就是用來對映XML檔案裡面的SQL查詢語句的,如何把xml裡的sql轉換為java語句裡的jdbc,交由MyBatis來完成。下面就是與之相對應的XML檔案: 檔案StudentMapper.xml
<?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="mybatishelloworld.StudentMapper">     <!--         Student類的sql語句檔案StudentMapper.xml         resultMap標籤:表字段與屬性的對映。         Select標籤:查詢sql。             由於StudentEntity已經在mybatis-config.xml裡面         對映成了mybatishelloworld.StudentEntity,即         mybatishelloworld目錄下的StudentEntity.java類         所以這裡的type後面直接跟著StudentEntity,MyBatis就知道如何尋找使用         StudentEntity類了。     --> <resultMap type="StudentEntity" id="studentResultMap"> <id property="studentID" column="STUDENT_ID"/> <result property="studentName" column="STUDENT_NAME"/> <result property="studentSex" column="STUDENT_SEX"/> <result property="studentBirthday" column="STUDENT_BIRTHDAY"/> </resultMap> <!-- 查詢學生,根據id --> <select id="getStudent" parameterType="String" resultType="StudentEntity" resultMap="studentResultMap"> <![CDATA[ SELECT * from STUDENT_TBL ST WHERE ST.STUDENT_ID = #{studentID}  ]]>  </select> <!-- 查詢學生列表 --> <select id="getStudentAll"  resultType="StudentEntity" resultMap="studentResultMap"> <![CDATA[ SELECT * from STUDENT_TBL ]]>  </select> </mapper>
為了使用Mybatis,我們還得個它一個配置檔案,配置所使用的資料庫型別,資料庫連線地址,使用者名稱和密碼等等,這個檔案的配置如下: 檔案mybatis-config.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>     <!--         typeAliases這玩意兒一定要放在environment的開頭,可以參照報錯的順序設定:         順序同錯誤提示資訊一致:         元素型別為 "configuration" 的內容必須匹配 "(properties?,settings?,         typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,         reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)         —————by http://blog.csdn.net/liu578182160/article/details/50747390     -->     <typeAliases>         <typeAlias alias="StudentEntity" type="mybatishelloworld.StudentEntity" />     </typeAliases>     <environments default="development">         <environment id="development">             <transactionManager type="JDBC"/>             <dataSource type="POOLED">                 <property name="driver" value="com.mysql.jdbc.Driver"/>                 <property name="url" value="jdbc:mysql://localhost:3306/student_manager?useSSL=true"/>                 <property name="username" value="root"/>                 <property name="password" value="rootOfPasswd"/>             </dataSource>         </environment>     </environments>     <!--         建立MyBatis的mapper配置檔案         建立MyBatis配置檔案:mybatis-config.xml。         Mappers標籤:載入MyBatis中實體類的SQL對映語句檔案。     -->     <mappers>         <mapper resource="mybatishelloworld/StudentMapper.xml" />     </mappers> </configuration>
資料庫驅動跟Hibernate裡面一樣,連線MySQL的話,用的是value=com.mysql.jdbc.Driver 最後我們在MainClass的main函式裡面,測試我們的整個配置 檔案MainClass.java
package mybatishelloworld; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MainClass {     public static void main(String[] args) {         String resource = "mybatishelloworld/mybatis-config.xml";  //告訴MyBatis核心配置檔案在哪裡         InputStream inputStream = null;         try {             inputStream = Resources.getResourceAsStream(resource);         }catch(IOException ex){Logger.getLogger(MainClass.class.getName()).log(Level.SEVERE, null, ex);}        //開啟SQL對話工廠         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);         try (SqlSession session = sqlSessionFactory.openSession()) {  //用工廠生成一個對話            //這裡是精華,session用getMapper方法從xml裡面生成了StudentMapper介面的實現類             StudentMapper mapper = (StudentMapper) session.getMapper(StudentMapper.class);             StudentEntity se = mapper.getStudent("123456");  //於是這個類就有了具體的getStudent方法             se.println();             List list=mapper.getStudentAll();             list.forEach((s)->{                 s.println();             });         }     }//End-Of-Main }
在Netbeans編譯執行後的結果: 用JavaSE簡單入門MyBatis連線MySQL,使用Netbeans並配置成功