近来打算开发一个技术框架,并应用此框架开发出一个论坛,开始打算用sturts2+spring+hibernate+jquery为基础,然后再进行封装,最后形成技术框架,但通过此网站获知mybatis比hibernate更灵活,实用。因此开始逐步接触mybatis。

以下是mybatis3.0的开发实例,使用的java环境jdk5.0,ide为eclipse3.7,数据库是oracle11g。

1.数据环境配置

Xml代码

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd">


<configuration>

<!-- - - - - - - 数据库环境配置- - - - - - - - - -->

<environmentsdefault="environments">

<environmentid="eassen">

<transactionManagertype="JDBC"/>

<dataSourcetype="POOLED">

<propertyname="driver"value="oracle.jdbc.driver.OracleDriver"/>

<propertyname="url"value="jdbc:oracle:thin:@127.0.0.1:1521:eassen"/>

<propertyname="username"value="eassen"/>

<propertyname="password"value="oracle"/>

</dataSource>

</environment>

</environments>

<!-- - - - - - - -映射文件路径- - - - - - -->

<mappers>

<mapperresource="com/pojo/sql/DmMydwtMapper.xml"/>

</mappers>

</configuration>

Xml代码

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""mybatis-3-config.dtd">

<configuration>

<!--------数据库环境配置----------->

<environmentsdefault="environments">

<environmentid="eassen">

<transactionManagertype="JDBC"/>

<dataSourcetype="POOLED">

<propertyname="driver"value="oracle.jdbc.driver.OracleDriver"/>

<propertyname="url"value="jdbc:oracle:thin:@127.0.0.1:1521:eassen"/>

<propertyname="username"value="eassen"/>

<propertyname="password"value="oracle"/>

</dataSource>

</environment>

</environments>

<!---------映射文件路径-------->

<mappers>

<mapperresource="com/pojo/sql/DmMydwtMapper.xml"/>

</mappers>

</configuration>

2.数据库表映射(DM_MYDWT)XML文件

Xml代码

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mappernamespace="com.dao.DmMydwtMapper">

<resultMapid="BaseResultMap"type="com.pojo.DmMydwt">

<idcolumn="MYDWT_DM"property="mydwtDm"jdbcType="CHAR"javaType="String"/>

<resultcolumn="MYDWT_MC"property="mydwtMc"jdbcType="VARCHAR"

javaType="String"/>

<resultcolumn="YXBZ"property="yxbz"jdbcType="CHAR"javaType="String"/>

<resultcolumn="XYBZ"property="xybz"jdbcType="CHAR"javaType="String"/>

</resultMap>

<sqlid="Base_Column_List">

MYDWT_DM, MYDWT_MC, YXBZ, XYBZ

</sql>

<selectid="selectByPrimaryKey"resultMap="BaseResultMap"

parameterType="java.lang.String">

select

<includerefid="Base_Column_List"/>

from EASSEN.DM_MYDWT

whereMYDWT_DM= #{mydwtDm,jdbcType=CHAR}

</select>

<deleteid="deleteByPrimaryKey"parameterType="java.lang.String"

flushCache="true">

delete from EASSEN.DM_MYDWT

whereMYDWT_DM=

#{mydwtDm,jdbcType=CHAR}

</delete>

<insertid="insert"parameterType="com.pojo.DmMydwt"flushCache="true">

insert into EASSEN.DM_MYDWT (MYDWT_DM, MYDWT_MC, YXBZ,

XYBZ)

values

(#{mydwtDm,jdbcType=CHAR}, #{mydwtMc,jdbcType=VARCHAR},

#{yxbz,jdbcType=CHAR},

#{xybz,jdbcType=CHAR})

</insert>

<insertid="insertSelective"parameterType="com.pojo.DmMydwt"

flushCache="true">

insert into EASSEN.DM_MYDWT

<trimprefix="("suffix=")"suffixOverrides=",">

MYDWT_DM,

MYDWT_MC,

YXBZ,

XYBZ,

</trim>

<trimprefix="values ("suffix=")"suffixOverrides=",">

#{mydwtDm,jdbcType=CHAR},

#{mydwtMc},

#{yxbz,jdbcType=CHAR},

#{xybz,jdbcType=CHAR},

</trim>

</insert>

<updateid="updateByPrimaryKeySelective"parameterType="com.pojo.DmMydwt"

flushCache="true">

update EASSEN.DM_MYDWT

<set>

<iftest="mydwtMc != null">

MYDWT_MC= #{mydwtMc,jdbcType=VARCHAR},

</if>

<iftest="yxbz != null">

YXBZ= #{yxbz,jdbcType=CHAR},

</if>

<iftest="xybz != null">

XYBZ= #{xybz,jdbcType=CHAR},

</if>

</set>

whereMYDWT_DM= #{mydwtDm,jdbcType=CHAR}

</update>

<updateid="updateByPrimaryKey"parameterType="com.pojo.DmMydwt"

flushCache="true">

update EASSEN.DM_MYDWT

setMYDWT_MC=

#{mydwtMc,jdbcType=VARCHAR},

YXBZ= #{yxbz,jdbcType=CHAR},

XYBZ=

#{xybz,jdbcType=CHAR}

whereMYDWT_DM= #{mydwtDm,jdbcType=CHAR}

</update>

</mapper>

Xml代码

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mappernamespace="com.dao.DmMydwtMapper">

<resultMapid="BaseResultMap"type="com.pojo.DmMydwt">

<idcolumn="MYDWT_DM"property="mydwtDm"jdbcType="CHAR"javaType="String"/>

<resultcolumn="MYDWT_MC"property="mydwtMc"jdbcType="VARCHAR"

javaType="String"/>

<resultcolumn="YXBZ"property="yxbz"jdbcType="CHAR"javaType="String"/>

<resultcolumn="XYBZ"property="xybz"jdbcType="CHAR"javaType="String"/>

</resultMap>

<sqlid="Base_Column_List">

MYDWT_DM,MYDWT_MC,YXBZ,XYBZ

</sql>

<selectid="selectByPrimaryKey"resultMap="BaseResultMap"

parameterType="java.lang.String">

select

<includerefid="Base_Column_List"/>

fromEASSEN.DM_MYDWT

whereMYDWT_DM=#{mydwtDm,jdbcType=CHAR}

</select>

<deleteid="deleteByPrimaryKey"parameterType="java.lang.String"

flushCache="true">

deletefromEASSEN.DM_MYDWT

whereMYDWT_DM=

#{mydwtDm,jdbcType=CHAR}

</delete>

<insertid="insert"parameterType="com.pojo.DmMydwt"flushCache="true">

insertintoEASSEN.DM_MYDWT(MYDWT_DM,MYDWT_MC,YXBZ,

XYBZ)

values

(#{mydwtDm,jdbcType=CHAR},#{mydwtMc,jdbcType=VARCHAR},

#{yxbz,jdbcType=CHAR},

#{xybz,jdbcType=CHAR})

</insert>

<insertid="insertSelective"parameterType="com.pojo.DmMydwt"

flushCache="true">

insertintoEASSEN.DM_MYDWT

<trimprefix="("suffix=")"suffixOverrides=",">

MYDWT_DM,

MYDWT_MC,

YXBZ,

XYBZ,

</trim>

<trimprefix="values("suffix=")"suffixOverrides=",">

#{mydwtDm,jdbcType=CHAR},

#{mydwtMc},

#{yxbz,jdbcType=CHAR},

#{xybz,jdbcType=CHAR},

</trim>

</insert>

<updateid="updateByPrimaryKeySelective"parameterType="com.pojo.DmMydwt"

flushCache="true">

updateEASSEN.DM_MYDWT

<set>

<iftest="mydwtMc!=null">

MYDWT_MC=#{mydwtMc,jdbcType=VARCHAR},

</if>

<iftest="yxbz!=null">

YXBZ=#{yxbz,jdbcType=CHAR},

</if>

<iftest="xybz!=null">

XYBZ=#{xybz,jdbcType=CHAR},

</if>

</set>

whereMYDWT_DM=#{mydwtDm,jdbcType=CHAR}

</update>

<updateid="updateByPrimaryKey"parameterType="com.pojo.DmMydwt"

flushCache="true">

updateEASSEN.DM_MYDWT

setMYDWT_MC=

#{mydwtMc,jdbcType=VARCHAR},

YXBZ=#{yxbz,jdbcType=CHAR},

XYBZ=

#{xybz,jdbcType=CHAR}

whereMYDWT_DM=#{mydwtDm,jdbcType=CHAR}

</update>

</mapper>

3.数据库表(DM_MYDWT)java

Java代码

packagecom.pojo;


importjava.io.Serializable;


publicclassDmMydwtimplementsSerializable {

/**

*

*/

privatestaticfinallongserialVersionUID = 1078518054837885063L;


/**

* EASSEN.DM_MYDWT.MYDWT_DM

* @ibatorgenerated 2012-02-05 20:14:30

*/

privateString mydwtDm;


/**

* EASSEN.DM_MYDWT.MYDWT_MC

* @ibatorgenerated 2012-02-05 20:14:30

*/

privateString mydwtMc;


/**

* EASSEN.DM_MYDWT.YXBZ

* @ibatorgenerated 2012-02-05 20:14:30

*/

privateString yxbz;


/**

* EASSEN.DM_MYDWT.XYBZ

* @ibatorgenerated 2012-02-05 20:14:30

*/

privateString xybz;


publicString getMydwtDm() {

returnmydwtDm;

}


publicvoidsetMydwtDm(String mydwtDm) {

this.mydwtDm = mydwtDm;

}


publicString getMydwtMc() {

returnmydwtMc;

}


publicvoidsetMydwtMc(String mydwtMc) {

this.mydwtMc = mydwtMc;

}


publicString getYxbz() {

returnyxbz;

}


publicvoidsetYxbz(String yxbz) {

this.yxbz = yxbz;

}


publicString getXybz() {

returnxybz;

}


publicvoidsetXybz(String xybz) {

this.xybz = xybz;

}

}

Java代码

packagecom.pojo;

importjava.io.Serializable;

publicclassDmMydwtimplementsSerializable{

/**

*

*/

privatestaticfinallongserialVersionUID=1078518054837885063L;

/**

*EASSEN.DM_MYDWT.MYDWT_DM

*@ibatorgenerated2012-02-0520:14:30

*/

privateStringmydwtDm;

/**

*EASSEN.DM_MYDWT.MYDWT_MC

*@ibatorgenerated2012-02-0520:14:30

*/

privateStringmydwtMc;

/**

*EASSEN.DM_MYDWT.YXBZ

*@ibatorgenerated2012-02-0520:14:30

*/

privateStringyxbz;

/**

*EASSEN.DM_MYDWT.XYBZ

*@ibatorgenerated2012-02-0520:14:30

*/

privateStringxybz;

publicStringgetMydwtDm(){

returnmydwtDm;

}

publicvoidsetMydwtDm(StringmydwtDm){

this.mydwtDm=mydwtDm;

}

publicStringgetMydwtMc(){

returnmydwtMc;

}

publicvoidsetMydwtMc(StringmydwtMc){

this.mydwtMc=mydwtMc;

}

publicStringgetYxbz(){

returnyxbz;

}

publicvoidsetYxbz(Stringyxbz){

this.yxbz=yxbz;

}

publicStringgetXybz(){

returnxybz;

}

publicvoidsetXybz(Stringxybz){

this.xybz=xybz;

}

}

4.DAO

Java代码

packagecom.dao;


importcom.pojo.DmMydwt;


publicinterfaceDmMydwtMapper {

/**

* 根据主键删除

* 参数:主键

* 返回:删除个数

* @ibatorgenerated 2012-02-05 20:14:58

*/

intdeleteByPrimaryKey(String mydwtDm);


/**

* 插入,空属性也会插入

* 参数:pojo对象

* 返回:删除个数

* @ibatorgenerated 2012-02-05 20:14:58

*/

intinsert(DmMydwt record);


/**

* 插入,空属性不会插入

* 参数:pojo对象

* 返回:删除个数

* @ibatorgenerated 2012-02-05 20:14:58

*/

intinsertSelective(DmMydwt record);


/**

* 根据主键查询

* 参数:查询条件,主键值

* 返回:对象

* @ibatorgenerated 2012-02-05 20:14:58

*/

DmMydwt selectByPrimaryKey(String mydwtDm);


/**

* 根据主键修改,空值条件不会修改成null

* 参数:1.要修改成的值

* 返回:成功修改个数

* @ibatorgenerated 2012-02-05 20:14:58

*/

intupdateByPrimaryKeySelective(DmMydwt record);


/**

* 根据主键修改,空值条件会修改成null

* 参数:1.要修改成的值

* 返回:成功修改个数

* @ibatorgenerated 2012-02-05 20:14:58

*/

intupdateByPrimaryKey(DmMydwt record);

}

Java代码

packagecom.dao;

importcom.pojo.DmMydwt;

publicinterfaceDmMydwtMapper{

/**

*根据主键删除

*参数:主键

*返回:删除个数

*@ibatorgenerated2012-02-0520:14:58

*/

intdeleteByPrimaryKey(StringmydwtDm);

/**

*插入,空属性也会插入

*参数:pojo对象

*返回:删除个数

*@ibatorgenerated2012-02-0520:14:58

*/

intinsert(DmMydwtrecord);

/**

*插入,空属性不会插入

*参数:pojo对象

*返回:删除个数

*@ibatorgenerated2012-02-0520:14:58

*/

intinsertSelective(DmMydwtrecord);

/**

*根据主键查询

*参数:查询条件,主键值

*返回:对象

*@ibatorgenerated2012-02-0520:14:58

*/

DmMydwtselectByPrimaryKey(StringmydwtDm);

/**

*根据主键修改,空值条件不会修改成null

*参数:1.要修改成的值

*返回:成功修改个数

*@ibatorgenerated2012-02-0520:14:58

*/

intupdateByPrimaryKeySelective(DmMydwtrecord);

/**

*根据主键修改,空值条件会修改成null

*参数:1.要修改成的值

*返回:成功修改个数

*@ibatorgenerated2012-02-0520:14:58

*/

intupdateByPrimaryKey(DmMydwtrecord);

}

5.mybatis加载

Java代码

packagecom.db;


importjava.io.IOException;

importjava.io.Reader;

importorg.apache.ibatis.io.Resources;

importorg.apache.ibatis.session.SqlSession;

importorg.apache.ibatis.session.SqlSessionFactory;

importorg.apache.ibatis.session.SqlSessionFactoryBuilder;


publicclassConnectionFactory {

privatestaticSqlSessionFactory factory;

privatestaticSqlSession sqlSession =null;



// 读取MyBatis配置文件,创建SqlSessionFactory

static{

try{

Reader reader = Resources.getResourceAsReader("sqlMapConfig.xml");

factory =newSqlSessionFactoryBuilder().build(reader,"eassen");

}catch(IOException e) {

e.printStackTrace();

}

}


/**

* 获取SqlSession

* @return

*/

publicstaticSqlSession getSession() {

if(sqlSession ==null){

sqlSession = factory.openSession();

}

returnsqlSession;

}


/**

* 从配置文件中获取数据库表映射对象信息

* @param mapper

* @return

*/

publicstatic<T> T getMapper(Class<T> mapper) {

SqlSession session = getSession();

return(T) session.getMapper(mapper);

}


/**

* 数据提交

*/

publicstaticvoidcommit(){

sqlSession.commit();

}

/**

* 数据回滚

*/

publicstaticvoidrollback(){

sqlSession.rollback();

}

/**

* 关闭sqlsession

*/

publicstaticvoidclose(){

if(sqlSession !=null){

sqlSession.close();

}

}



}

Java代码

packagecom.db;

importjava.io.IOException;

importjava.io.Reader;

importorg.apache.ibatis.io.Resources;

importorg.apache.ibatis.session.SqlSession;

importorg.apache.ibatis.session.SqlSessionFactory;

importorg.apache.ibatis.session.SqlSessionFactoryBuilder;

publicclassConnectionFactory{

privatestaticSqlSessionFactoryfactory;

privatestaticSqlSessionsqlSession=null;

//读取MyBatis配置文件,创建SqlSessionFactory

static{

try{

Readerreader=Resources.getResourceAsReader("sqlMapConfig.xml");

factory=newSqlSessionFactoryBuilder().build(reader,"eassen");

}catch(IOExceptione){

e.printStackTrace();

}

}

/**

*获取SqlSession

*@return

*/

publicstaticSqlSessiongetSession(){

if(sqlSession==null){

sqlSession=factory.openSession();

}

returnsqlSession;

}

/**

*从配置文件中获取数据库表映射对象信息

*@parammapper

*@return

*/

publicstatic<T>TgetMapper(Class<T>mapper){

SqlSessionsession=getSession();

return(T)session.getMapper(mapper);

}

/**

*数据提交

*/

publicstaticvoidcommit(){

sqlSession.commit();

}

/**

*数据回滚

*/

publicstaticvoidrollback(){

sqlSession.rollback();

}

/**

*关闭sqlsession

*/

publicstaticvoidclose(){

if(sqlSession!=null){

sqlSession.close();

}

}

}

6.数据查询,插入,更新,删除测试

Java代码

packagecom.test;


importcom.dao.DmMydwtMapper;

importcom.db.ConnectionFactory;

importcom.pojo.DmMydwt;


publicclassMydTest {


publicstaticvoidmain(String[] args) {

try{

// 获取对象

DmMydwtMapper mydwtMapper = ConnectionFactory

.getMapper(com.dao.DmMydwtMapper.class);


// 查询相关MYDWT_DM为“1001”的信息

DmMydwt mydwt = mydwtMapper.selectByPrimaryKey("1001");

System.out.println("mybatis查询测试:=================================");

System.out.println("MYDWT_DM:"+ mydwt.getMydwtDm());

System.out.println("MYDWT_MC:"+ mydwt.getMydwtMc());


// 插入数据

System.out.println("mybatis保存测试:=================================");

mydwt =newDmMydwt();

mydwt.setMydwtDm("aaaa");

mydwt.setMydwtMc("mybatis保存");

mydwt.setYxbz("Y");

mydwt.setXybz("Y");

mydwtMapper.insert(mydwt);

// 更新数据

System.out.println("mybatis更新测试:=================================");

mydwt.setMydwtMc(newString("mybatis保存".getBytes(),"UTF-8"));

mydwtMapper.updateByPrimaryKey(mydwt);


// 删除数据

System.out.println("mybatis删除测试:=================================");

mydwtMapper.deleteByPrimaryKey("1001");

ConnectionFactory.commit();

}catch(Exception e) {

ConnectionFactory.rollback();

e.printStackTrace();

}finally{

// 关闭sqlsession

ConnectionFactory.close();

}

}

}

Java代码

packagecom.test;

importcom.dao.DmMydwtMapper;

importcom.db.ConnectionFactory;

importcom.pojo.DmMydwt;

publicclassMydTest{

publicstaticvoidmain(String[]args){

try{

//获取对象

DmMydwtMappermydwtMapper=ConnectionFactory

.getMapper(com.dao.DmMydwtMapper.class);

//查询相关MYDWT_DM为“1001”的信息

DmMydwtmydwt=mydwtMapper.selectByPrimaryKey("1001");

System.out.println("mybatis查询测试:=================================");

System.out.println("MYDWT_DM:"+mydwt.getMydwtDm());

System.out.println("MYDWT_MC:"+mydwt.getMydwtMc());

//插入数据

System.out.println("mybatis保存测试:=================================");

mydwt=newDmMydwt();

mydwt.setMydwtDm("aaaa");

mydwt.setMydwtMc("mybatis保存");

mydwt.setYxbz("Y");

mydwt.setXybz("Y");

mydwtMapper.insert(mydwt);

//更新数据

System.out.println("mybatis更新测试:=================================");

mydwt.setMydwtMc(newString("mybatis保存".getBytes(),"UTF-8"));

mydwtMapper.updateByPrimaryKey(mydwt);

//删除数据

System.out.println("mybatis删除测试:=================================");

mydwtMapper.deleteByPrimaryKey("1001");

ConnectionFactory.commit();

}catch(Exceptione){

ConnectionFactory.rollback();

e.printStackTrace();

}finally{

//关闭sqlsession

ConnectionFactory.close();

}

}

}

7.控制台信息输出

Java代码

2012-02-0811:43:01Logging initialized using'org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl'adapter.

2012-02-0811:43:01PooledDataSource forcefully closed/removed all connections.

2012-02-0811:43:01PooledDataSource forcefully closed/removed all connections.

2012-02-0811:43:01PooledDataSource forcefully closed/removed all connections.

2012-02-0811:43:01PooledDataSource forcefully closed/removed all connections.

2012-02-0811:43:02Created connection17671659.

2012-02-0811:43:02ooo Connection Opened

2012-02-0811:43:02==> Executing: select MYDWT_DM, MYDWT_MC, YXBZ, XYBZ from EASSEN.DM_MYDWT where MYDWT_DM = ?

2012-02-0811:43:02==> Parameters:1001(String)

2012-02-0811:43:02<== Columns: MYDWT_DM, MYDWT_MC, YXBZ, XYBZ

2012-02-0811:43:02<== Row:1001, 您经常访问的网站包括:, Y, Y

mybatis查询测试:=================================

MYDWT_DM:1001

MYDWT_MC:您经常访问的网站包括:

mybatis保存测试:=================================

2012-02-0811:43:02==> Executing: insert into EASSEN.DM_MYDWT (MYDWT_DM, MYDWT_MC, YXBZ, XYBZ) values (?, ?, ?, ?)

2012-02-0811:43:02==> Parameters: aaaa(String), mybatis保存(String), Y(String), Y(String)

mybatis更新测试:=================================

2012-02-0811:43:02==> Executing: update EASSEN.DM_MYDWT set MYDWT_MC = ?, YXBZ = ?, XYBZ = ? where MYDWT_DM = ?

2012-02-0811:43:02==> Parameters: mybatis保存(String), Y(String), Y(String), aaaa(String)

mybatis删除测试:=================================

2012-02-0811:43:02==> Executing: delete from EASSEN.DM_MYDWT where MYDWT_DM = ?

2012-02-0811:43:02==> Parameters:1001(String)

2012-02-0811:43:02xxx Connection Closed

2012-02-0811:43:02Returned connection17671659to pool.