雖然MyBatis發布已經有一段時間了,一直想試試,可總是被中斷,這次總算是跑了一下,對MyBatis有所了解。
在www.mybatis.org上可以找到下載鏈接,我下載的是mybatis-3.1.1這個版本,下載一個zip包,里面包含有主要的庫文件mybatis-3.1.1.jar,還有一些引用的jar,一個PDF說明文檔,這個說明文檔提供的是E文版,可以在網上找到相應的中文版,下載完成后,就開始我的操作了。
在MyEclipse里創建了一個java工程,本來是打算在Web中使用的,沒有創建Web工程,只是想試一下MyBatis這東東,java工程就可以了。
創建時引入MyBatis庫和數據庫驅動庫,創建一個空的工程
準備好數據庫,此處用MySQL做練習,創建一個bbs數據庫,創建一個tb_users表,結構如下
創建一個User類,與數據表對應
接下來就可以運行看看結果了。輸出如下:
在www.mybatis.org上可以找到下載鏈接,我下載的是mybatis-3.1.1這個版本,下載一個zip包,里面包含有主要的庫文件mybatis-3.1.1.jar,還有一些引用的jar,一個PDF說明文檔,這個說明文檔提供的是E文版,可以在網上找到相應的中文版,下載完成后,就開始我的操作了。
在MyEclipse里創建了一個java工程,本來是打算在Web中使用的,沒有創建Web工程,只是想試一下MyBatis這東東,java工程就可以了。
創建時引入MyBatis庫和數據庫驅動庫,創建一個空的工程
準備好數據庫,此處用MySQL做練習,創建一個bbs數據庫,創建一個tb_users表,結構如下
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| userid | int(11) | NO | PRI | | |
| username | char(20) | NO | | | |
+----------+----------+------+-----+---------+-------+
創建一個User類,與數據表對應
package com.cuit.prj.domain;
public class User {
private int userid;
private String userName;
public User() {
super();
}
public User(int userid, String userName) {
super();
this.userid = userid;
this.userName = userName;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
再創建一個UserMapper接口,里面提供了對User的相關操作public class User {
private int userid;
private String userName;
public User() {
super();
}
public User(int userid, String userName) {
super();
this.userid = userid;
this.userName = userName;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
package com.cuit.prj.presistence;
import com.cuit.prj.domain.User;
public interface UserMapper {
User selectUser(int userid);
void insertUser(User user);
void updateUser(User user);
void deleteUser(int userid);
}
再創建一個UserMapper.xml,與UserMapper.java對應的一個配置文件,經本例測試,其中的id要和接口中的方法名一致import com.cuit.prj.domain.User;
public interface UserMapper {
User selectUser(int userid);
void insertUser(User user);
void updateUser(User user);
void deleteUser(int userid);
}
<?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.cuit.prj.presistence.UserMapper">
<select id="selectUser" parameterType="int" resultType="com.cuit.prj.domain.User">
select *
from tb_users where userid = #{userid}
</select>
<insert id="insertUser" parameterType="com.cuit.prj.domain.User">
insert into tb_users(userid,username) values (#{userid},#{userName})
</insert>
<update id="updateUser" parameterType="com.cuit.prj.domain.User">
update tb_users set username = #{userName} where userid = #{userid}
</update>
<delete id="deleteUser" parameterType="int">
delete from tb_users where userid = #{userid}
</delete>
</mapper>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cuit.prj.presistence.UserMapper">
<select id="selectUser" parameterType="int" resultType="com.cuit.prj.domain.User">
select *
from tb_users where userid = #{userid}
</select>
<insert id="insertUser" parameterType="com.cuit.prj.domain.User">
insert into tb_users(userid,username) values (#{userid},#{userName})
</insert>
<update id="updateUser" parameterType="com.cuit.prj.domain.User">
update tb_users set username = #{userName} where userid = #{userid}
</update>
<delete id="deleteUser" parameterType="int">
delete from tb_users where userid = #{userid}
</delete>
</mapper>
在src下面創建MyBatis配置文件mybatis-conf.xml,配置文件名沒有特殊規定,因為在后面的代碼里需要指定文件名
創建一個獲取連接的SessionFactory的類<?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">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/bbs" />
<property name="username" value="root" />
<property name="password" value="1233" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/cuit/prj/presistence/UserMapper.xml" />
</mappers>
</configuration>
<!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">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/bbs" />
<property name="username" value="root" />
<property name="password" value="1233" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/cuit/prj/presistence/UserMapper.xml" />
</mappers>
</configuration>
package com.cuit.prj.sessionfactory;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SessionFactory {
public static SqlSession getSession(){
SqlSession session = null;
String resource = "mybatis-conf.xml";
try {
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
session = sqlMapper.openSession();
} catch (IOException e) {
e.printStackTrace();
}
return session;
}
}
做好上述準備后,寫一個主方法調用測試,如下import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SessionFactory {
public static SqlSession getSession(){
SqlSession session = null;
String resource = "mybatis-conf.xml";
try {
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
session = sqlMapper.openSession();
} catch (IOException e) {
e.printStackTrace();
}
return session;
}
}
package com.cuit.prj;
import org.apache.ibatis.session.SqlSession;
import com.cuit.prj.domain.User;
import com.cuit.prj.presistence.UserMapper;
import com.cuit.prj.sessionfactory.SessionFactory;
public class AppTest {
public static void main(String[] args) {
System.out.println("Hello");
SqlSession session = SessionFactory.getSession();
try {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUser(2);
System.out.println(user.getUserName());
} finally {
session.close();
}
}
}
在數據庫中添加兩條記錄,并提交import org.apache.ibatis.session.SqlSession;
import com.cuit.prj.domain.User;
import com.cuit.prj.presistence.UserMapper;
import com.cuit.prj.sessionfactory.SessionFactory;
public class AppTest {
public static void main(String[] args) {
System.out.println("Hello");
SqlSession session = SessionFactory.getSession();
try {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUser(2);
System.out.println(user.getUserName());
} finally {
session.close();
}
}
}
+--------+----------+
| userid | username |
+--------+----------+
| 1 | user1 |
| 2 | user2 |
+--------+----------+
Hello
user2
終于跑起來了,在處理了一系列的Exception之后看到的結果,上面的測試只是做了一個讀取數據的操作,如果有新增或修改數據,需要調用session.commit()操作。
大概小結一下,用了MyBatis感覺還是很不錯的,把SQL語句和JAVA代碼分離開,喜歡自己掌控SQL語句的人們可能會喜歡MyBatis一些,不像Hibernate那樣可以完全不用寫SQL語句。只是配置文件和接口寫起來還是有些麻煩,還有POJO類的生成,工作量還是不小哇,網上找到一個生成工具,下次研究一下再補充上來。
大概小結一下,用了MyBatis感覺還是很不錯的,把SQL語句和JAVA代碼分離開,喜歡自己掌控SQL語句的人們可能會喜歡MyBatis一些,不像Hibernate那樣可以完全不用寫SQL語句。只是配置文件和接口寫起來還是有些麻煩,還有POJO類的生成,工作量還是不小哇,網上找到一個生成工具,下次研究一下再補充上來。