用JavaSE簡單入門MyBatis連線MySQL…
阿新 • • 發佈:2019-01-11
在Netbeans中新建一個 Java——Java應用程式
專案,其目錄結構如下:
需要準備和下載的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語句建立的表格
建立完後資料庫裡面的內容,用MySQL Workbench檢視:
然後我們開始編寫類: 首先,我們把這個STUDENT_TBL表的表頭編寫成一個POJO類(只含有成員變數,setter和getter的簡單Java物件“Plain Ordinary Java Object”) 檔案StudentEntity.Java
其實為了方便演示,這個Java類並不純粹,而是添加了個println方法便於列印SQL後的結果
接著我們建立一個Mapper介面——於是,我們為什麼需要一個對映(Mapper)介面呢?
原因我們看看程式碼就懂了:
檔案StudentMapper.java
我們發現,這個接口裡面都是方法名。按照常規的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
為了使用Mybatis,我們還得個它一個配置檔案,配置所使用的資料庫型別,資料庫連線地址,使用者名稱和密碼等等,這個檔案的配置如下:
檔案mybatis-config.xml
資料庫驅動跟Hibernate裡面一樣,連線MySQL的話,用的是value=com.mysql.jdbc.Driver
最後我們在MainClass的main函式裡面,測試我們的整個配置
檔案MainClass.java
在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_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); } } |
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); } |
<?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> |
<?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> |
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 } |