MyBatis介紹
框架技術
是一個應用程序的半成品
提供可重用的公共結構
按一定規則組織的一組組件
例如寫簡歷:使用模板不用考慮佈局、排版等,提高效率,可專心在簡歷內容上,結構統一,便於人事閱讀,新手也可以作出專業的簡歷。
使用框架的好處
不用再考慮公共問題
專心在業務實現上
結構統一,易於學習、維護
新手也可寫出好程序
主流框架:
Strucs2 Hibernate Spring Spring MVC Mybatis
ORM(Object Relational Mapping)
編寫程序的時候,以面向對象的方式處理數據
保存數據的時候,卻以關係型數據庫的方式存儲
MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名爲MyBatis 。MyBatis是一個優秀的持久層框架,它對jdbc的操作數據庫的過程進行封裝,使開發者只需要關注 SQL 本身,而不需要花費精力去處理例如註冊驅動、創建connection、創建statement、手動設置參數、結果集檢索等jdbc繁雜的過程代碼。它是一個半自動化的orm框架.
Jdbc的問題:
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//加載數據庫驅動
Class.forName("com.mysql.jdbc.Driver");
//通過驅動管理類獲取數據庫鏈接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
//定義sql語句 ?表示佔位符
String sql = "select * from user where username = ?";
//獲取預處理statement
preparedStatement = connection.prepareStatement(sql);
//設置參數,第一個參數爲sql語句中參數的序號(從1開始),第二個參數爲設置的參數值
preparedStatement.setString(1, "王五");
//向數據庫發出sql執行查詢,查詢出結果集
resultSet = preparedStatement.executeQuery();
//遍歷查詢結果集
while(resultSet.next()){
System.out.println(resultSet.getString("id")+" "+resultSet.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//釋放資源
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Sql語句在代碼中硬編碼,造成代碼不易維護,實際應用sql變化的可能較大,sql變動需要改變java代碼。
第一個mybatis程序
Mybatis架構
查詢用戶表記錄數
使用MyBatis的開發步驟
第一步:創建java工程
使用myeclipse創建java工程
第二步:加入jar包
第三步:log4j.properties
在resources下創建log4j.properties如下:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
mybatis默認使用log4j作爲輸出日誌信息
第四步:創建MyBatis核心配置文件:mybatisConfig.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>
<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/mybatisdemo" />
<property name="username" value="root" />
<property name="password" value="12345678" />
</dataSource>
</environment>
</environments>
</configuration>
第五步:創建pojo類
public class user {
private int id;
private String userName;
private int age;
get set…..
}
第六步:創建sql映射文件
創建sql映射文件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="cn.sns.dao">
<select id="getCount" resultType="int">
select count(*) from user
</select>
</mapper>
namespace :命名空間,用於隔離sql語句
第七步:加載映射文件
mybatis框架需要加載映射文件,將UserMapper.xml添加在mybatis-config.xml,如下
<mappers><mapper resource="cn/ssm/mapper/UserMapper.xml"/></mappers>
第八步:測試
public class test {
@Test
public void doTest() throws IOException
{
String resource = "mybatisConfig.xml";
//創建一個文件流
InputStream in = Resources.getResourceAsStream(resource);
//創建回話工廠
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
//創建回話
SqlSession sql = factory.openSession();
//執行sql語句
int count = sql.selectOne("cn.sns.dao.getCount");
//打印輸出共有多少條記錄
System.out.println(count);
}
}