MyBatis的環境搭建以及簡單案例
阿新 • • 發佈:2019-01-05
MyBatis的環境搭建以及簡單案例
MyBatis框架簡介
MyBatis的前身是iBatis,是一個開源的資料持久層(Dao)框架,在實體類和SQL語句之間建立對映關係,是一種半自動化的ORM實現。
MyBatis內部封裝了通過JDBC訪問資料庫的操作,支援普通的SQL查詢、儲存過程和高階對映,幾乎消除了所有的JDBC程式碼和引數的手工設定以及結果集的檢索。
資料持久化(概念)
資料持久化是將記憶體中的資料模型轉換為儲存模型,已將儲存模型轉換為記憶體中的資料模型的統稱。 例如:檔案的儲存、資料的讀取等都是資料持久化操作。資料模型可以是任何資料結構或物件模型,儲存模型可以是關係模型、XML、二進位制流等。
ORM(資料持久化技術)
ORM(Object/RelationaI Mapping)及物件/關係對映,是一種資料持久化技術。它在物件模型和關係型資料庫之間建立起對應關係,並且提供了一種機制,通過JavaBean物件去操作資料庫表中的資料。
MyBatis環境搭建
這裡我們使用mybatis-3.2.2版本、MyEclipse、mysql資料庫演示
-
下載需要的jar檔案
jar包以及原始碼包地址:http://github.com/mybatis/mybatis-3/releases
-
部署jar檔案
將mybatis-3.2.2.jar 檔案以及jdbc驅動檔案複製到lib目錄中,並新增到Libraries中。
-
建立MyBatis核心配置檔案mybatis-config.xml
PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 引入 database.propertiesMySql檔案 --> <properties resource="database.properties"> <!-- 先讀取內部配置,外部會覆蓋內部配置,resource中是引入外部的database檔案,也可以不設定,直接在內部設定 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://laptop-4p6qt61b:3306/smbms?useUnicode=true&characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </properties> <settings> <!-- 配置mybatis的log實現為LOG4J --> <setting name="logImpl" value="LOG4J"></setting> <!-- 設定resultMap的自動對映級別為Full(自動匹配所有) --> <setting name="autoMappingBehavior" value="FULL"/> </settings> <!-- 配置類型別名(pojo) --> <typeAliases> <package name="cn.smbms.pojo"/> <!-- 2.通過pojo包來自動掃描類名生成類型別名 --> </typeAliases> <!-- 配置mybatis多套執行環境 --> <environments default="development"> <environment id="development"> <!-- 配置事物管理,採用JDBC的事物管理 MANAGED(託管)--> <transactionManager type="JDBC"></transactionManager> <!-- POOLED:mybatis自帶的資料來源,JNDI:基於tomcat的資料來源 UNPOOLED:--> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 將mapper對映檔案加入到配置檔案中 --> <mappers> <mapper resource="cn/smbms/dao/user/UserMapper.xml"/> <!-- 方式1:使用類資源路徑獲取資源 --> </mappers> </configuration>
-
建立持久化類POJO
持久化類是指其例項狀態需要被MyBatis持久化到資料庫中的類。在應用的設計中,持久化類通常對應需求中的業務實體。MyBatis一般採用POJO程式設計模型來實現持久化類,與POJO類配合完成持久化工作是MyBatis最常用的工作模式。
javascrip package cn.smbms.pojo;
import java.util.Date;
import java.util.List;
public class User {
/*欄位*/
private Integer id ; //id
private String userCode; //使用者編碼
private String userName; //使用者名稱稱
private String userPassword; //使用者密碼
private Integer gender; //性別
private Date birthday; //出生日期
private String phone; //電話
private String address; //地址
private Integer userRole; //使用者角色
private String userRoleName; //使用者角色名稱
private Integer createdBy; //建立者
private Date creationDate; //建立時間
private Integer modifyBy; //更新者
private Date modifyDate; //更新時間
private Role role; //使用者角色
private List<Address> addressList; //使用者地址列表
}
- 建立SQL對映檔案與User介面類(為了方便暫時把它們放在dao.user包下)
SQL對映檔案一般對應於相應的POJO,所以一般都是採用POJO的名稱+Mapper的規則來進行命名。
SQL對映檔案
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mapper.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.smbms.dao.user.UserMapper">
<!-- 根據使用者名稱稱查詢使用者列表 -->
<select id="getUserListByUserName" resultType="User" parameterType="string">
select * from smbms_user where userName like CONCAT('%',#{userName},'%')
</select>
</mapper>
User介面類
package cn.smbms.dao.user;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import cn.smbms.pojo.User;
/**
* 繫結對映語句的介面(User對映器)
* @author 一支菸
*
*/
public interface UserMapper {
/**
* 根據使用者名稱稱查詢使用者列表(方法名名稱與對映檔案的select中id一致)
* @param userName
* @return
*/
public List<User> getUserListByUserName(String userName);
}
-
建立測試類(可以使用JUnit或者main方法)
public class UserMapperTest { private Logger logger = Logger.getLogger(UserMapperTest.class); @Test public void test() { String resource = "mybatis-config.xml"; SqlSession sqlSession = null; List<User> userList = null; try { //1.讀取全域性配置檔案:mybatis-config.xml //獲取mybatis-config.xml檔案的輸入流 InputStream is = Resources.getResourceAsStream(resource); //2.建立SqlSessionFactory物件,此物件可以完成對配置檔案的讀取 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); //3.建立SqlSession物件,此物件的作用是呼叫mapper檔案進行資料操作 sqlSession = factory.openSession(); //4.通過getMapper方法獲取UserMapper介面物件 (官方推薦使用方式) UserMapper mapper = sqlSession.getMapper(UserMapper.class); //5.呼叫UserMapper中的方法 userList = mapper.getUserListByUserName("張"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //4.關閉SqlSession物件 if(null != sqlSession){ sqlSession.close(); } } if(null != userList){ for (User user:userList) { //使用Log4j輸出也可使用System輸出 logger.debug("testGetUserList userCode:"+user.getUserCode()+ " and userName:"+user.getUserName()+ " and userRole:"+user.getUserRole()+ " and userRoleName:"+user.getUserRoleName()+ /* " and age:"+user.getAge()+*/ " and address:"+user.getAddress()); } } } }