初試MyBatis
Posted on 2012-07-22 12:48 ZhouFeng 閱讀(427) 評(píng)論(0) 編輯 收藏 所屬分類: 原創(chuàng) 、Web開(kāi)發(fā) 、DataBase雖然MyBatis發(fā)布已經(jīng)有一段時(shí)間了,一直想試試,可總是被中斷,這次總算是跑了一下,對(duì)MyBatis有所了解。
在www.mybatis.org上可以找到下載鏈接,我下載的是mybatis-3.1.1這個(gè)版本,下載一個(gè)zip包,里面包含有主要的庫(kù)文件mybatis-3.1.1.jar,還有一些引用的jar,一個(gè)PDF說(shuō)明文檔,這個(gè)說(shuō)明文檔提供的是E文版,可以在網(wǎng)上找到相應(yīng)的中文版,下載完成后,就開(kāi)始我的操作了。
在MyEclipse里創(chuàng)建了一個(gè)java工程,本來(lái)是打算在Web中使用的,沒(méi)有創(chuàng)建Web工程,只是想試一下MyBatis這東東,java工程就可以了。
創(chuàng)建時(shí)引入MyBatis庫(kù)和數(shù)據(jù)庫(kù)驅(qū)動(dòng)庫(kù),創(chuàng)建一個(gè)空的工程
準(zhǔn)備好數(shù)據(jù)庫(kù),此處用MySQL做練習(xí),創(chuàng)建一個(gè)bbs數(shù)據(jù)庫(kù),創(chuàng)建一個(gè)tb_users表,結(jié)構(gòu)如下
創(chuàng)建一個(gè)User類,與數(shù)據(jù)表對(duì)應(yīng)
接下來(lái)就可以運(yùn)行看看結(jié)果了。輸出如下:
在www.mybatis.org上可以找到下載鏈接,我下載的是mybatis-3.1.1這個(gè)版本,下載一個(gè)zip包,里面包含有主要的庫(kù)文件mybatis-3.1.1.jar,還有一些引用的jar,一個(gè)PDF說(shuō)明文檔,這個(gè)說(shuō)明文檔提供的是E文版,可以在網(wǎng)上找到相應(yīng)的中文版,下載完成后,就開(kāi)始我的操作了。
在MyEclipse里創(chuàng)建了一個(gè)java工程,本來(lái)是打算在Web中使用的,沒(méi)有創(chuàng)建Web工程,只是想試一下MyBatis這東東,java工程就可以了。
創(chuàng)建時(shí)引入MyBatis庫(kù)和數(shù)據(jù)庫(kù)驅(qū)動(dòng)庫(kù),創(chuàng)建一個(gè)空的工程
準(zhǔn)備好數(shù)據(jù)庫(kù),此處用MySQL做練習(xí),創(chuàng)建一個(gè)bbs數(shù)據(jù)庫(kù),創(chuàng)建一個(gè)tb_users表,結(jié)構(gòu)如下
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| userid | int(11) | NO | PRI | | |
| username | char(20) | NO | | | |
+----------+----------+------+-----+---------+-------+
創(chuàng)建一個(gè)User類,與數(shù)據(jù)表對(duì)應(yīng)
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;
}
}
再創(chuàng)建一個(gè)UserMapper接口,里面提供了對(duì)User的相關(guān)操作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);
}
再創(chuàng)建一個(gè)UserMapper.xml,與UserMapper.java對(duì)應(yīng)的一個(gè)配置文件,經(jīng)本例測(cè)試,其中的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下面創(chuàng)建MyBatis配置文件mybatis-conf.xml,配置文件名沒(méi)有特殊規(guī)定,因?yàn)樵诤竺娴拇a里需要指定文件名
創(chuàng)建一個(gè)獲取連接的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;
}
}
做好上述準(zhǔn)備后,寫一個(gè)主方法調(diào)用測(cè)試,如下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();
}
}
}
在數(shù)據(jù)庫(kù)中添加兩條記錄,并提交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
終于跑起來(lái)了,在處理了一系列的Exception之后看到的結(jié)果,上面的測(cè)試只是做了一個(gè)讀取數(shù)據(jù)的操作,如果有新增或修改數(shù)據(jù),需要調(diào)用session.commit()操作。
大概小結(jié)一下,用了MyBatis感覺(jué)還是很不錯(cuò)的,把SQL語(yǔ)句和JAVA代碼分離開(kāi),喜歡自己掌控SQL語(yǔ)句的人們可能會(huì)喜歡MyBatis一些,不像Hibernate那樣可以完全不用寫SQL語(yǔ)句。只是配置文件和接口寫起來(lái)還是有些麻煩,還有POJO類的生成,工作量還是不小哇,網(wǎng)上找到一個(gè)生成工具,下次研究一下再補(bǔ)充上來(lái)。
大概小結(jié)一下,用了MyBatis感覺(jué)還是很不錯(cuò)的,把SQL語(yǔ)句和JAVA代碼分離開(kāi),喜歡自己掌控SQL語(yǔ)句的人們可能會(huì)喜歡MyBatis一些,不像Hibernate那樣可以完全不用寫SQL語(yǔ)句。只是配置文件和接口寫起來(lái)還是有些麻煩,還有POJO類的生成,工作量還是不小哇,網(wǎng)上找到一個(gè)生成工具,下次研究一下再補(bǔ)充上來(lái)。