(有小案例)初始Mybatis框架及使用
框架
框架(Framework)是一種編程模型,是一組相互協作的類和工具集合,它們一起提供了一種通用的方法來解決特定領域中的問題。框架一般會提供一些預定義的解決方案和編程范例,開發人員可以基于這些方案和范例來快速構建自己的應用程序,同時還可以減少重復代碼,提高開發效率和代碼質量。
框架可以是基于某個編程語言或者特定平臺的,比如Java EE、.NET等等。它們可以為開發人員提供一系列的工具和函數庫,幫助他們快速開發、測試和部署應用程序。同時,框架還能提供一些標準化的結構和流程,使得應用程序在不同開發團隊之間能夠更加一致和可維護。
框架的使用可以大大提高開發效率和代碼質量,因為它們能夠解決一些通用性的問題,同時還能使代碼更加易于維護和升級。然而,框架也有一些限制和約束,開發人員需要遵循框架的規范和約定來編寫應用程序。
Mybatis框架背景
MyBatis是一種Java持久化框架,它可以將SQL查詢和結果映射到Java對象中,從而實現Java對象與關系型數據庫的映射。使用MyBatis可以避免手寫JDBC代碼,簡化數據訪問層的開發。
MyBatis最初是由Apache軟件基金會下的iBATIS項目發展而來的。后來,iBATIS更名為MyBatis,并于2010年成為一個獨立的開源項目,現在由MyBatis團隊維護和開發。
MyBatis提供了許多高級特性,包括動態SQL,緩存機制,延遲加載等等。它也支持多種數據源,包括關系型數據庫和NoSQL數據庫等。 MyBatis被廣泛應用于Java項目中,是Java持久化框架中的一員,并被認為是一個簡單易用的ORM框架。
使用Mybatis框架的原因
使用MyBatis框架的主要原因包括:
簡化開發:MyBatis可以大大簡化數據訪問層(DAO)的開發,避免了手寫JDBC代碼的繁瑣,同時也減少了出錯的可能性。
靈活性:MyBatis提供了許多高級特性,包括動態SQL、緩存機制、延遲加載等等。它允許開發人員根據具體的需求進行自定義配置,從而使得開發過程更加靈活。
易于維護:MyBatis的數據訪問層代碼通常比較簡潔明了,易于閱讀和維護。同時,MyBatis也提供了一些工具來簡化開發、調試和測試的過程,如MyBatis Generator等。
性能優越:MyBatis的SQL語句是預編譯的,可以提高數據庫的執行效率。同時,MyBatis也支持緩存機制,可以避免頻繁的數據庫訪問,提高應用程序的性能。
多數據源支持:MyBatis支持多種數據源,包括關系型數據庫和NoSQL數據庫等。這使得開發人員可以更加方便地切換不同的數據源,同時也降低了應用程序的耦合性。
綜上所述,MyBatis框架具有簡化開發、靈活性、易于維護、性能優越以及多數據源支持等優點,因此在Java應用程序中得到了廣泛的應用。
使用Mybatis框架技術需要配置Mybatis環境和配置文件,那么我們只要配置好環境和文件就可以使用Mybatis框架。
下面我們用案例來演示如何使用配置Mybatis.
創建MySQL數據庫
drop database if exists mydb; create database mydb; use mydb; create table emp ( eid int primary key AUTO_INCREMENT, #員工工號 ename varchar(20), #員工姓名 dept varchar(20), #員工部門 job varchar(20),#職位 sal double,#薪資 phone varchar(11),#電話 address varchar(100)#地址 ); insert into emp(ename,dept,job,sal,phone,address) values('張翠萍','測試部','測試工程 師',5800,'15821563548','鄭州'); insert into emp(ename,dept,job,sal,phone,address) values('李耀菲','測試部','測試經 理',9800,'13658942168','許昌'); insert into emp(ename,dept,job,sal,phone,address) values('王長林','研發部','開發工程 師',8800,'13954865721','南陽'); insert into emp(ename,dept,job,sal,phone,address) values('陳清泰','研發部','開發經 理',14900,'13785463249','洛陽'); insert into emp(ename,dept,job,sal,phone,address) values('趙德保','運維部','運維工程 師',5200,'15785642139','信陽'); insert into emp(ename,dept,job,sal,phone,address) values('劉瑞琳','運維部','產品經 理',12600,'17956248563','商丘');表如下圖?
使用IDEA創建一個項目使用mybatis框架完成如下功能
//1.查詢所有的員工信息 List<Emp> selectAll(); //2.根據員工id查詢員工信息 Emp selectById(int eid); //3.添加員工信息 int addEmp(Emp emp); //4.修改員工信息 int reviseEmp(Emp emp); //5.刪除員工信息 int delEmp(int eid);?在bean中我們跟數據庫表創建了Emp實體類
package com.wang.bean;public class Emp {private Integer eid;private String ename;private String dept;private String job;private Double sal;private String phone;private String address;@Overridepublic String toString() {return "Emp{" +"eid=" + eid +", ename='" + ename + '\'' +", dept='" + dept + '\'' +", job='" + job + '\'' +", sal=" + sal +", phone='" + phone + '\'' +", address='" + address + '\'' +'}';}public Integer getEid() {return eid;}public void setEid(Integer eid) {this.eid = eid;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public String getDept() {return dept;}public void setDept(String dept) {this.dept = dept;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}public Double getSal() {return sal;}public void setSal(Double sal) {this.sal = sal;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;} }在dao層創建EmpDao接口放入我們的功能方法
package com.wang.dao;import com.wang.bean.Emp;import java.util.List;public interface EmpDao {// 1.查詢所有的員工信息List<Emp> selectAll();//2.根據員工id查詢員工信息Emp selectById(int eid);//3.添加員工信息int addEmp(Emp emp);//4.修改員工信息int reviseEmp(Emp emp);//5.刪除員工信息int delEmp(int eid); }下面是我們真正的配置Mybatis
1.需要導入Mybatis運行環境也就是Mybatis的jar文件,放入lib包中
?
2.在src包下創建配置文件,包含了 MyBatis 數據庫連接和映射器的相關配置信息,取名為Mybatis.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- MyBatis 配置文件根元素 --><!-- 環境配置,指定默認數據源環境為 mysql --><environments default="mysql"><environment id="mysql"><!-- 事務管理器配置,指定使用 JDBC 事務管理器 --><transactionManager type="jdbc"></transactionManager><!-- 數據源配置,指定使用連接池數據源 --><dataSource type="pooled"><!-- 數據源屬性,指定連接 MySQL 數據庫的相關信息 --><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!-- 映射器配置,指定使用的映射器類 --><mappers><mapper class="com.wang.dao.EmpDao"></mapper></mappers></configuration>3.在dao層里創建映射文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.wang.dao.EmpDao"> <!-- 映射器命名空間,指定映射器接口的完整限定名 --><!-- 查詢所有員工信息的 SQL 語句定義,指定結果類型為 com.wang.bean.Emp --><select id="selectAll" resultType="com.wang.bean.Emp">select * from emp</select><!-- 根據員工編號查詢員工信息的 SQL 語句定義,指定參數類型為 int,結果類型為 com.wang.bean.Emp --><select id="selectById" resultType="com.wang.bean.Emp">select * from emp where eid = #{eid}</select><!-- 添加新員工信息的 SQL 語句定義,指定參數類型為 com.wang.bean.Emp --><insert id="addEmp" parameterType="com.wang.bean.Emp">insert into emp(ename,dept,job,sal,phone,address) values(#{ename},#{dept},#{job},#{sal},#{phone},#{address});</insert><!-- 修改員工信息的 SQL 語句定義,指定參數類型為 com.wang.bean.Emp --><update id="reviseEmp" parameterType="com.wang.bean.Emp">update emp set ename=#{ename},dept=#{dept},job=#{job},sal=#{sal},phone=#{phone},address=#{address} where eid=#{eid}</update><!-- 刪除員工信息的 SQL 語句定義,指定參數類型為 int --><delete id="delEmp">delete from emp where eid=#{eid}</delete></mapper>id:方法名?
resultType/parameterType:返回結果類型
這里要注意的是用#{}包裹起來的參數是從Emp存在的屬性。
4.最后創建一個MyBatis測試類,具體解釋在代碼注釋里
package com.wang.Test;import com.wang.bean.Emp; import com.wang.dao.EmpDao; 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 org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List;public class Test01 { //定義Test01類InputStream stream = null; //定義輸入流變量并賦值為nullSqlSessionFactoryBuilder builder = null; //定義會話工廠構建器變量并賦值為nullSqlSessionFactory factory = null; //定義會話工廠變量并賦值為nullSqlSession sqlSession = null;//定義會話變量并賦值為nullEmpDao empDao = null;//定義EmpDao接口變量并賦值為nullList<Emp> empList = null;//定義Emp列表變量并賦值為null@Beforepublic void innt() throws IOException { //定義innt方法并拋出IO異常stream = Resources.getResourceAsStream("Mybatis.xml"); //從Mybatis.xml文件獲取輸入流builder = new SqlSessionFactoryBuilder(); //創建會話工廠構建器對象factory = builder.build(stream); //使用輸入流構建會話工廠對象sqlSession = factory.openSession(); //從會話工廠對象獲取會話對象empDao = sqlSession.getMapper(EmpDao.class); //從會話對象獲取EmpDao接口的代理實現類對象}@Testpublic void selectAll() { //定義selectAll測試方法List<Emp> emps = empDao.selectAll(); //調用EmpDao接口的selectAll方法查詢所有員工信息并返回一個列表for (Emp emp : emps) { //遍歷員工列表System.out.println(emp); //打印每個員工對象的信息}}@Testpublic void selectByuid() { //定義selectByuid測試方法Emp emp = empDao.selectById(1); //調用EmpDao接口的selectById方法根據id查詢一個員工信息并返回一個對象System.out.println(emp); //打印員工對象的信息}@Testpublic void addEmp(){ //定義addEmp測試方法Emp emp = new Emp(); //創建一個新的員工對象emp.setEname("高啟強"); //設置員工姓名為高啟強emp.setDept("強盛部"); //設置員工部門為強盛部emp.setJob("執行董事"); //設置員工職位為執行董事emp.setSal(100000d); //設置員工薪水為100000元emp.setPhone("12345678909"); //設置員工電話為12345678909emp.setAddress("京海"); //設置員工地址為京海int i = empDao.addEmp(emp); //調用EmpDao接口的addEmp方法添加新的員工信息并返回受影響的行數if (i>0){ //判斷是否添加成功System.out.println("add succeed"); //打印添加成功的提示信息}}@Testpublic void uptest(){ //定義uptest測試方法Emp emp = new Emp(); //創建一個新的員工對象emp.setEid(7); //設置員工id為7emp.setEname("靜云"); //設置員工姓名為靜云emp.setDept("財務部"); //設置員工部門為財務部emp.setJob("財務經理"); //設置員工職位為財務經理emp.setSal(10000d); //設置員工薪水為10000元emp.setPhone("12345678909"); //設置員工電話為12345678909emp.setAddress("安陽"); //設置員工地址為安陽int i = empDao.reviseEmp(emp); //調用EmpDao接口的reviseEmp方法修改員工信息并返回受影響的行數if (i>0){ //判斷是否修改成功System.out.println("update succeed"); //打印修改成功的提示信息}}@Testpublic void deltest(){ //定義deltest測試方法int i = empDao.delEmp(9); //調用EmpDao接口的delEmp方法根據id刪除一個員工信息并返回受影響的行數if (i>0){ //判斷是否刪除成功System.out.println("del succeed"); //打印刪除成功的提示信息}}@Afterpublic void distory() throws IOException { //定義distory方法并拋出IO異常,該方法在每個測試方法執行后運行sqlSession.commit();//提交會話對象中的事務,使數據庫中的數據變化生效sqlSession.close(); //關閉會話對象,釋放資源stream.close(); //關閉輸入流對象,釋放資源} }?此項目只是簡單演示Mybatis的配置簡單用法,項目結構如下圖
?演示效果(動圖時間有點長...)
總結
以上是生活随笔為你收集整理的(有小案例)初始Mybatis框架及使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel php 数字科学计数_PHP
- 下一篇: ERP系统-库存子系统-申购单