MyBatis 使用筆記(1) 簡介、安裝、配置
之前做專案的時候,接觸到伺服器端開發,當時伺服器是用SpringMVC做後臺服務 MyBatis做資料庫連線 Mysql資料庫 在那之前 我只接觸過JavaWeb的簡單的Servlet的基本用法,在邊學邊開發的過程中學了一部分SpringMVC和MyBatis的技術 SpringMVC做介面 用到的東西比較少,主要是資料庫處理操作用MyBatis的時候遇到各種問題。現在終於有時間來系統化一些的學習MyBatis。
一:MyBatis 是什麼?
關於這個問題,我想你能看到我這個筆記 你就應該能知道他是什麼。這裡我借用百度百科的一句話來描述 MyBatis是什麼
MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。
二:MyBatis 能幹什麼?
簡單來說,MyBatis能幫助我們快速開發基於Java + 資料庫的程式,能幫助我們快速對映POJO物件和資料庫中的資料 同時支援普通 SQL查詢,儲存過程和高階對映的優秀持久層框架。
三:安裝MyBatis
安裝MyBatis 就是在我們的專案中配置 新增MyBatis 讓我們可以在專案中使用它。
下載後 我們得到一個 mybatis-3.4.2.zip 解壓之後找到 mybatis-3.4.2.jar 這個jar檔案。然後把它新增到我們的Java專案中的lib目錄下再新增一下專案依賴。我們的專案就可以使用MyBatis了。
<注意>
為了能夠讓我們的專案正常連線到資料。我們還需要下載我們所使用的資料庫的連線驅動 比如我使用的是mysql資料庫 我就下載了 mysql-connector-java:5.1.41的驅動新增到專案的依賴庫中。
四:配置MyBatis
MyBatis的配置 相對於其他框架來說應該算是比較簡單的。下面我們就來看看MyBatis的基本配置
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>
<!-- JavaBean型別自動對映掃描包配置 Java類型別名 -->
<typeAliases>
<package name="com.brok1n.web.java.springmvcdemo1.bean"/>
<!--<typeAlias alias="User" type="com.brok1n.web.java.springmvcdemo1.bean.User" />-->
</typeAliases>
<environments default="development">
<!-- 資料庫環境 -->
<environment id="development">
<!-- 使用JDBC使用管理 -->
<transactionManager type="JDBC"/>
<!-- 資料來源配置 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 對映器 -->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
這就是一個基本的一個檔案的的配置MyBatis的方式,配置了包級別的別名定義,配置了一個MySQL資料庫連線 還配置了一個對映器,我們先了解一下上面的內容。我們下面來看看兩個檔案的方式 具體的配置資訊後面會做詳細介紹
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>
<properties resource="jdbc.properties" />
<!-- JavaBean型別自動對映掃描包配置 Java類型別名 -->
<typeAliases>
<package name="com.brok1n.web.java.springmvcdemo1.bean"/>
<!--<typeAlias alias="User" type="com.brok1n.web.java.springmvcdemo1.bean.User" />-->
</typeAliases>
<environments default="development">
<!-- 資料庫環境 -->
<environment id="development">
<!-- 使用JDBC使用管理 -->
<transactionManager type="JDBC"/>
<!-- 資料來源配置 -->
<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>
<!-- 對映器 -->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
username=root
password=jacklist
好了。這裡是兩個配置檔案來配置MyBatis的方式。可以看到 兩個檔案的這種方式 我們把資料庫連線相關的資訊都配置到了properties檔案中 方便後期配置、維護等工作。 我們現在就用第二種 兩個檔案的這種方式來配置 MyBatis。
我們先來寫一個簡單的例子。讓我們的MyBatis展現一下它的能力。
這是我們的基本的專案結構資訊。
我們來看看我們的程式碼。
UserMapper.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="com.brok1n.web.java.springmvcdemo1.mapper.UserMapper">
<select id="selectUser" resultType="user">
select * from user where id = #{id}
</select>
</mapper>
資料庫
id username password sex age qq weichart email
10000 brok1n 123456 女 18 452700765 452700765@qq.com
10004 brok3n 123123 女 18 245586408 245586408@qq.com
10005 brok3n 123123 男 18 245586408 245586408@qq.com
10007 brok3n 123123 男 18 245586408 245586408@qq.com
10008 brok3n 123123 女 18 245586408 245586408@qq.com
DbUtils.java
public class DbUtils {
private static volatile SqlSessionFactory sqlSessionFactory;
public static SqlSessionFactory obtionSqlSessionFactory()
{
if( sqlSessionFactory == null )
{
synchronized (DbUtils.class)
{
if(sqlSessionFactory == null )
{
sqlSessionFactory = getSqlSessionFactory();
}
}
}
return sqlSessionFactory;
}
private static SqlSessionFactory getSqlSessionFactory()
{
String resource = "mybatis-config.xml";
SqlSessionFactory sqlSessionFactory = null;
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build( inputStream );
} catch (IOException e) {
e.printStackTrace();
}
return sqlSessionFactory;
}
}
來看看我們的UserMapper.java
public interface UserMapper {
User selectUser(String id);
}
User.java
public class User {
private int id;
private String username;
private String password;
private String sex;
private int age;
private String qq;
private String weichart;
private String email;
getter and setter...
}
來看看我們的HelloController.java
@Controller
public class HelloController {
@RequestMapping( value = "selectUser.do", method = RequestMethod.POST)
@ResponseBody
public String selectUser(HttpServletRequest request, String uid )
{
SqlSessionFactory factory = DbUtils.obtionSqlSessionFactory();
SqlSession sqlSession = null;
try {
sqlSession = factory.openSession();
UserMapper userMapper = sqlSession.getMapper( UserMapper.class );
User user = userMapper.selectUser(uid);
if( user != null )
{
System.out.println("" + user.toString());
}
return JSON.toJSONString( user );
}
catch (Exception e )
{
e.printStackTrace();
sqlSession.rollback();
}
finally {
if( sqlSession != null )
{
sqlSession.close();
}
}
return "操作失敗";
}
}
然後我們看看請求結果:
我們來看看我們程式裡關鍵性程式碼:
SqlSessionFactory factory = DbUtils.obtionSqlSessionFactory();
SqlSession sqlSession = factory.openSession();
UserMapper userMapper = sqlSession.getMapper( UserMapper.class );
User user = userMapper.selectUser(uid);
首先 我們獲取了全域性的SqlSessionFactory 用它來建立了一個SqlSession物件,之後呼叫getMapper方法獲得了傳入的UserMapper類型別的物件 然後直接呼叫它的方法 來操作資料庫。 UserMapper是一個介面 用來宣告要對資料庫做的sql操作。
這一篇 我們來基本的瞭解MyBatis的簡介、安裝、基礎配置、簡單用法。後面的文章 我會陸續的介紹MyBatis的更詳細的東西。
2017/3/27
by brok1n