1. 程式人生 > >Mybatis基本配置和搭建

Mybatis基本配置和搭建

今天,主要向大家分享下如何從頭搭建一個最簡單的mybatis專案

下載地址

一, 建立配置檔案

在新建的project的src目錄下,新建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>

    <settings
>
<setting name="mapUnderscoreToCamelCase" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> </settings> <typeAliases> <typeAlias type="com.test.entity.Employee" alias="Employee"/> <typeAlias type="com.test.entity.Customer"
alias="Customer"/>
</typeAliases> <environments default="local"> <environment id="local"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"
/>
<property name="url" value="jdbc:mysql://localhost:3306/orcl"/> <property name="username" value="username"/> <property name="password" value="password"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/test/data/employee-mapper.xml"/> <mapper resource="com/test/data/customer-mapper.xml"/> </mappers> </configuration>

接下來為大家解釋下該配置檔案中的內容

1. settings
定義mybatis的一些全域性設定,這裡 配置的兩個屬性

mapUnderscoreToCamelCase: 在對映database column名字和entity屬性名時,自動將帶下劃線column名轉化為常見的java駝峰形式屬性名
lazyLoadingEnabled: 延遲載入entity的關聯屬性

2. typeAlias
定義java型別的別名,比如這裡分別將com.yun.entity.Employee和com.yun.entity.Customer設定別名為Employee,Customer。這樣在別處配置檔案中使用 它們時,就不必再指明帶package全名。

3. environments
主要用於配置資料來源
可以配置多個environment,以用於不同的產品環境,這裡只配置一個用於測試,並定義id為“local”

transactionManager: 有兩種型別
1, JDBC : 使用從資料來源返回的連線管理commit和rollback
2, MANAGED : 依靠容器來管理transaction

dataSource: 有3種類型
1, UNPOOLED :每次請求新開啟連線,用完後關閉連線
2, POOLED : 使用連線池管理連線
3, JNDI :使用容器管理datasource時使用

4. mappers
簡而言之,mapper檔案用於定義sql語句,以及與其對應的entity
以employee-mapper.xml為例,以下是其簡單實現:

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.data.EmployeeMapper">
    <select id="selectAllEmployee" resultType="Employee">
        select * from employee
    </select>

    <select id="selectEmployeeById" parameterType="long" resultType="Employee">
        select * from employee where employee_id=#{id}
    </select>

</mapper>

這裡,我們定義了2句sql statement,分別是

selectAllEmployee: 查詢所有employee
selectEmployeeById:根據id查詢特定employee

返回結果型別均為Employee(看!這裡typeAlias就起到作用了,不需要指明class全名),區別在於前者是個List。

這裡大家可能會對selectEmployeeById 中的#{id}感到疑惑,別急,下面會為您介紹。

NOTE:配置檔案中的順序不能亂來,對於例子中的幾個配置,要按照順序來定義:settings -> typeAliases -> environments -> mappers.因為mybatis是按照一個固定順序來解析這個配置檔案的,如果順序不對,載入時會報錯。

二,獲得SqlSession

不贅述,直接上程式碼

public class MySqlSession {
    private static String mybatisResource = "mybatis-config.xml";

    private static SqlSessionFactory sqlSessionFactory;

    public static SqlSessionFactory getSqlSessionFactory() {
        try {
            if (sqlSessionFactory == null) {
                InputStream inputStream = Resources.getResourceAsStream(mybatisResource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            }

            return sqlSessionFactory;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public static SqlSession newSqlSession() {
        SqlSession session = getSqlSessionFactory().openSession();
        return session;
    }
}

通過呼叫MySqlSession.newSqlSession()即可獲得一個SQLSession物件,這也是mybatis中最核心的類了,負責各種select,update,delete介面等,這裡就不詳細解釋了。

三,DAO

馬上就到最後一步啦!
還是直接上程式碼~

public class BatisEmployeeDao {
    public List<Employee> getAllEmployees() {
        SqlSession session = MySqlSession.newSqlSession();
        try {
            List<Employee> ret = session.selectList("selectAllEmployee");
            return ret;
        } finally {
            session.close();
        }
    }

    public Employee getEmployeeById(Long id) {
        SqlSession session = MySqlSession.newSqlSession();
        try {
            Employee employee = session.selectOne("selectEmployeeById", id);
            return employee;
        } finally {
            session.close();
        }
    }
}

看到這裡,想必各位看官也知道前面#{id}的value是哪裡來的了,是的,它就是 getEmployeeById(Long id)中的引數,但兩者名字不要求一致哦。

好了,到這裡,一個最簡單的mybatis配置和實現已經結束了,希望對您有所幫助。
更多細節參看mybatis官方文件:http://mybatis.github.io/mybatis-3/