一、Mybatis優缺點 mysql
優勢: Mybatis實現了對Dao層的封裝,隔離了SQL語句,便於管理,避免了像JDBC那樣操做數據集,便於擴展等等。 sql
缺點: Mybatis屬於半自動「ORM」,比Hibernate的工做作得要多不少,對象參數傳遞比較麻煩,沒有Hibernate對象操做的概念。 apache
二、Mybatis的實現方式 mybatis
Mybatis提供兩種應用實現:XML配置和註解。 app
2.1配置主要依賴實體對象的xml文件,將對象以<resultMap>形式注入,並提供給<insert > <delete > <select> <update> 語句引用。 字體
2.2使用註解來的比配置XML文件要簡單得多。只須要在接口上添加相應的註解並附上SQL語句就好了,如: google
插入語句:@insert(" insert into table_user ..") url
修改語句: @update(" update table_user set ....") spa
刪除語句:@delete(" delete from table_user .....") code
查詢語句:@select(" select * from table_user .....")
三、下載mybatis的jar包:mybatis-3.1.1-bundle.zip,網址:http://code.google.com/p/mybatis/
四、構建本身的mybatis項目,如圖所示:
五、mybatis-config.xml:配置數據源和隱射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<environments default="environment">
<environment id="environment">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding =UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- <mappers>
<mapper resource="mybatis/User.xml"/>
</mappers> -->
</configuration>
注:紅色部分字體是使用實體配置的實現,若是使用註解則不須要添加。
六、使用註解實現CRUD操做-此處以實現用戶管理爲例
6.1---編寫接口(interface):實際上就是官方文檔所述的Mapper
public interface UserService {
//註解
@Insert(" insert into users (id,username,password) values (#{id},#{username},#{password})")
void add(@Param("id")String id,@Param("username") String username,@Param("password")String password);
@Delete(" delete from users where id=#{id}")
void delete(String id);
@Update(" update users set username=#{username},password=#{password} where id=#{id}")
int update(@Param("username") String username,@Param("password")String password,@Param("id")String id);
@Select(" select * from users where id=#{id}")
User getUser(String id);
@Select(" select * from users order by id asc ")
List<User> getUsers();
@Select(" select * from users order by id asc limit #{pageSize} offset #{offset} ")
List<User> getUsersByPage(@Param("offset")int offset,@Param("pageSize") int pageSize);//offset=pageSize*(page-1)
}
注:使用註解時接口的方法不能重載,否者會產生Mapped Statements collection does not contain value for 異常,另外還應儘可能避免配置和註解混合使用的狀況。
6.2獲取數據源
public class GetSqlSessionFactory {